~/f/dealii/RPMS.2017 ~/f/dealii
~/f/dealii
RPMS.2017/deal_II-devel-9.5.1-1.1.x86_64.rpm RPMS/deal_II-devel-9.5.1-1.1.x86_64.rpm differ: byte 225, line 1
Comparing deal_II-devel-9.5.1-1.1.x86_64.rpm to deal_II-devel-9.5.1-1.1.x86_64.rpm
comparing the rpm tags of deal_II-devel
--- old-rpm-tags
+++ new-rpm-tags
@@ -10151 +10151 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/DEALGlossary.html 3896a041fcf1a1bfb078364e25548604a7298b8c5e8a4b1c16395ccc2d5fb51e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/DEALGlossary.html ed3b823b49614dcaa42b138e94a630468791f74e3b8f4b3b641c79bc81eeab03 2
@@ -10154,3 +10154,3 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/Tutorial.html 3d6748d1073d70df612a7e71cb746663956b1caee6b21f8581d474c9e0de38c3 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/_formulas.tex 2987d67faac7699d953885ecfb154d83cdc597d75cb5d8df8d18db3eba386fc0 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/_formulas_dark.tex a676293adaf9eb1679e827fcbcd2e3e6a4c62f62d7b157340076f627f9d64354 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/Tutorial.html 08060bc5d2992461f8691b50d9c9109481f92a50e1c5ebabe2213aea0b8b8645 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/_formulas.tex 453206fb2b7f14e22a41d3b99815b474ced1038854ef0208eff1228ea8d47ec3 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/_formulas_dark.tex dbfa81338e0e3d9298857ab12eab7177222dbdbb447f521965a6b81c577b5e50 2
@@ -10322 +10322 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_6_1_and_6_2.html d825a7150ffce4911e5c68b78d42ffd883d8b12d088b5fa5577ab627c8912654 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_6_1_and_6_2.html f19f371027d617de067c3c3129a3975900d3d1019332ec44493549534163ecb5 2
@@ -10324 +10324 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_6_2_and_6_3.html c264d9bdd47faed37199cda4d1bbe5eb62684b035f5abe4a3293ab55d1294168 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_6_2_and_6_3.html cee522617733f4282183ce64bafab9b20c65f268a28f68170d87446ad03673dd 2
@@ -10332 +10332 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_8_1_and_8_2.html 6a8c023f55d4909a56b2703af48a8e046b8d2f98e8f417793590580e39c04acf 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_8_1_and_8_2.html a2ad6649d302abbc8a134f258797effc01d3ba19ec2e97c76ce8763747a03b54 2
@@ -10338 +10338 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_8_4_2_and_8_5_0.html 98a5913d5dfd97499db7e7a8a4556baa2a9bbdca9f5a20a804a836b1b83c5fe0 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_8_4_2_and_8_5_0.html f198be15a7049e3972dc038240c43ae09b89768bba125504cfec32697dc684dd 2
@@ -10343 +10343 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_9_1_1_and_9_2_0.html 2684b453a60538c7cc13a4ce746f3c4051f44cd7e7abab1da76057ba2481e209 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_9_1_1_and_9_2_0.html da521ff062eb567325740745c8b2a7e21edb7ae8b6ca6b88de424bf79fed0215 2
@@ -10370 +10370 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classAffineConstraints.html fc79c02f77da2c018530bd7f8941a85c82ebb7121604811dc2014263cd6e1975 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classAffineConstraints.html 4c0bb1427f1eae15689594ba9b13fdd3a616feb437f714d3df749f544dd6548f 2
@@ -10388 +10388 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classAlgorithms_1_1ThetaTimestepping.html 397286bff13aeb55778717a8fb4a58bc3ca13a484c9fbed375791ef18a03ff0c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classAlgorithms_1_1ThetaTimestepping.html c660debc728184dfee74e2872c24a1e55e6968c0561c6d074928ce074aeee6c9 2
@@ -10405 +10405 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classAnisotropicPolynomials.html 0484b361965f1dcb1161766475ef72df75c8c3b8089f1a51e9d2027eecc1fbd5 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classAnisotropicPolynomials.html 495c00cc68809e88ed2f05cd2c4d9ab92dca1d26ead1fb59d3d3354b9b59086a 2
@@ -10442 +10442 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classArpackSolver.html ff871ebdfa8676c7ca80b30189301b28c81d822e047d4393eb97a5f91a7bb0d9 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classArpackSolver.html 178557eafd0fc9a3c3ca0ff8fc29d0b9d163b378ea29bd3eeb4a8f37082a15eb 2
@@ -10445 +10445 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classArrayView.html 5a46dabe65810f8e28178695b7bbd22fc5244c67838fe1c61a5b361e4aca4484 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classArrayView.html dbeb9d3a3522c2aeeaff257ed97191a13205d3708dd91d5f205740939122ffcb 2
@@ -10448 +10448 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classAutoDerivativeFunction.html 2e6ed7a6d2584f0deaed276ca94aecf725726e4718a06c7965364d15e4d70412 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classAutoDerivativeFunction.html 57851191efd241f0c13ec402c06cdf4191ff844679bdadedffe219aeaaa0b029 2
@@ -10451 +10451 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classBarycentricPolynomial.html 7e277f4f5cda85b0e606ef8b2bb8c21a4d8af0a037f19b9d2ec242ec74d19b28 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classBarycentricPolynomial.html 057b676d7b3403066c057c28b0c2d28c8385ff9e0d2988e51cedec678c378007 2
@@ -10458 +10458 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classBaseQR.html d1005fdf1dae7b3d8782209620dd6a1b1f8c2a952379c28ed219e0e32f0f1ab4 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classBaseQR.html a29dbe391d4454f2cbda4541fca020de00bb2a55394706a9b0cf0eeb3569b5b9 2
@@ -10464 +10464 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockIndices.html 0b5ac9f89083d35eb62fdec2aae08474ba9636098d38d8b2367f6271eb523df0 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockIndices.html ec246b0fcb00ae6999f25a8eb79e2c7c9023e737199eaa5f9a2facb4549f9832 2
@@ -10470 +10470 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockLinearOperator.html baff47e299adca7114490cf0424f8ab8b5dff6744dc5aebec7631db4488bed5c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockLinearOperator.html b3d568d6c0f6055f5f6ac071f0b6896513c0e556ec510322b909a1c155932da5 2
@@ -10475 +10475 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockMatrixBase.html b0c56223a9226dea0813e17be79b5bc652c35e57916d77ee0093d36ed805fc85 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockMatrixBase.html a36fc4eaa76a7556c853d0c56ffcb24f12b2dc85a38c1ab43a7370e289effa9e 2
@@ -10488 +10488 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockSparseMatrix.html 878253318a97a6841fd9a3434b51e5396aac9971965e6ac8acec3d6aab8ddf0a 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockSparseMatrix.html d14ed9025876da3479fc9830d150a3e7c8ee25cc0174ebc190d99a13b58623e4 2
@@ -10490 +10490 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockSparseMatrixEZ.html 9f2877b2743d409623472e63665d15bd880c9ef57cc3d5d9986000b1208f908c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockSparseMatrixEZ.html 8e366f1958b960c5e20a566530a35c847a418398289063527a2f6b3dc9e23a50 2
@@ -10500 +10500 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockVector.html a61e7c3d25381a6922fee40f474a58b96c4508a825a250e9b47fcfae451db95f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockVector.html f7d6cfffc1360d5f62863144ef7fe068cfb501665b222c0fb64ec9716113c281 2
@@ -10502 +10502 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockVectorBase.html 07eb3af92ba4db82e2e56d938bf2b1463ff372186274e6d1cbc46beb1b51a9d9 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockVectorBase.html e00d469c25f070b3264a084801b7bb6d7f2b5e8d380cc6fe35e5ce79a648b022 2
@@ -10506 +10506 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classBoundingBox.html 3e03c7bd79e7a4130dfc16776c4d36984da1276c69ea893d12fac028edd60ad0 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classBoundingBox.html 31a2dd1cf2e04543b42978889ddb2da01cd8ebe3b72ee4a5ddc5a71ebbc20669 2
@@ -10519 +10519 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classCUDAWrappers_1_1PreconditionIC.html b44ba6ac7857e137928ab82391842b3bc562b44c2dffdb5625f62dd794f9e597 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classCUDAWrappers_1_1PreconditionIC.html 8fb9ea9ed1a8caeed87a712b6db9157ef665f6bc7716856cd904ba5841bf6aac 2
@@ -10521 +10521 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classCUDAWrappers_1_1PreconditionILU.html 8069bda5c49474c6e450dac51f804c8fc4e54851d7fa04ef022ae9fa87d08859 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classCUDAWrappers_1_1PreconditionILU.html 4ffd10e0ad053209d62186a9ce0e7d3b60ff8b6d6f61576fa435f6317ba9b645 2
@@ -10525 +10525 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classCUDAWrappers_1_1SparseMatrix.html 1701e53b4614f0bfa4d5a2e2517cc62e25b60994fac78cfbf3eecbf405d771fd 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classCUDAWrappers_1_1SparseMatrix.html b8978329dde3d7957a0812f44cdb5991488373dc47cb4f55113bc4f939f7a4de 2
@@ -10528 +10528 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classCellAccessor.html f02bbd00cae94d2f20a607e30ed6135b1b7021b25291eac015f8d32cc4fc73f5 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classCellAccessor.html 5b35488982b331eca3eb995b22ec9b642bef73ab895bfceeebf19c39e7ba9893 2
@@ -10538 +10538 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classChartManifold.html 107328a68846125c0398d1a859a59c8fd188b0298f8d38ba3df6ae7e5e8c40d5 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classChartManifold.html 93b0552b8031fd09b7e3827de5b29316b0688ffbef89f188f792a4843cd56157 2
@@ -10541 +10541 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classChunkSparseMatrix.html 2b27568bb432a76f78fc8db829d90b3f56f358329490fc80ab49b19e003cb869 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classChunkSparseMatrix.html c9f173b713311702d49db8e257e0f4f74aa2f276d874402cc6f53caa7f726ceb 2
@@ -10557 +10557 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classChunkSparsityPattern.html ce0fba123fe751272ae83d0ab03501e4f9742f5319ee9b98099fd748d6c64eb2 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classChunkSparsityPattern.html 21c7c90f299094f8bf7adb54e22142af5d9baab28c8e0a7b3e5969ed9724d830 2
@@ -10570 +10570 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classCompositionManifold.html 6b3f801263547fc21894a6c73fd7556fa169bf3628abe0db4d86eba0c395548a 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classCompositionManifold.html 4331a1b5aab48d7631402fbc2391e615c9fbf431bf9f88b8a88e38ee86abe144 2
@@ -10581 +10581 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classConvergenceTable.html cb1132bd223b5b043f4c8b8120eff1db43517f3c2579411172c0463e980af218 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classConvergenceTable.html dd877416492ec014b5017435383b831e6cff8f07568edb389ae6bd9e455d23c2 2
@@ -10584 +10584 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classCylindricalManifold.html be8494520bf21f051834c594ec842e0e3af5c5bf8904d87ad178f4fe8f79f69c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classCylindricalManifold.html a232c5c38b787241a304138c03a111a2b3afc4ea63e2709b431554a275d9dc08 2
@@ -10613 +10613 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classDataPostprocessor.html 93049a38ac8347e63bb3e592353b37be551b51385a407811ef0e25e983e4665f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classDataPostprocessor.html 66e721de8b3f7c954385a63bcdcd6f302ecb7085bd80009dde1c12004097a86f 2
@@ -10618 +10618 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classDataPostprocessorTensor.html 4469c6dac1ce369451bb4b027131645ec1ce54ed86b05de66243634830affa7a 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classDataPostprocessorTensor.html 3ed2a5765f4cd5de8d77a2f98f718e5fa83a45259669ae25c41e5347c58a92a6 2
@@ -10621 +10621 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classDataPostprocessorVector.html 5a3524d421b8ff159c7c0b92c02d428b73c94e26c8af9928790e8750ebe7db23 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classDataPostprocessorVector.html 8927d1c2e7bccf1380964d40554567177d77b2ab1109ab3a251f4c33a60128b1 2
@@ -10638 +10638 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classDerivativeApproximation_1_1internal_1_1SecondDerivative.html 3730f6cbc665b09d50640e15f42768d2b405d18d7029ccfcdbdfb574b1a760dd 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classDerivativeApproximation_1_1internal_1_1SecondDerivative.html e7473f2a2fa7002d99bd7239d26196a5369725be6ce9b04cbfd57964f86d8684 2
@@ -10640 +10640 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classDerivativeApproximation_1_1internal_1_1ThirdDerivative.html 8c12df44288c5681520c457aafc7afa25117eaafe887d43303a866bfffdc2d2b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classDerivativeApproximation_1_1internal_1_1ThirdDerivative.html 7ce44820b9d7e54c6e23b80e4924240c7c82e0acd0d0e04368f89928a77c7eaf 2
@@ -10642 +10642 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classDerivativeForm.html 970c3191951e14796bf8c48ec94ca2c15148e1dd29663f5fd80e2d935d3fba2f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classDerivativeForm.html 3c67aa449fa60885be2f085a5b0a9e95c58e44a4414f72a4610e8f1f87426454 2
@@ -10648 +10648 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1CellLevelBase.html d45e690ceef835bcf503b3ac7f3158303a3904c74823ef97f98d923899a08d7f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1CellLevelBase.html d3230b8c1e235fd1ba0d574c70ca0b8b836759780aca4e1e99f94edcc7394d3f 2
@@ -10651 +10651 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1EnergyFunctional.html e9770a2ec463043764e104f9f92b82013d4f35a5dcc32557978ebced369cc2b7 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1EnergyFunctional.html 37d0b0c41af29c707c57f0b1cc2eac21c8b5bc7e3ac648bd6bb69dc3567f7fd7 2
@@ -10654 +10654 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1HelperBase.html ad2689204029d72d9eaf53761d55fde8639dce1fc1819f2e5d86db3c8bca0b6f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1HelperBase.html 7ef8e76c8a2d55d714811fbb0db386a6ac4d718c167a2d3936511be426013956 2
@@ -10657 +10657 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1PointLevelFunctionsBase.html 2600f93b27fb602f07f83ec887836ddb63f331dd3df95eb4e82a88c5baaf499f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1PointLevelFunctionsBase.html 9f1b596f83bfbe90fc07de6480eda66ef4b230358d689ac74821a684639bc499 2
@@ -10660 +10660 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1ResidualLinearization.html ae154d2b27c7e0fac3aead5c75519d05c1db2541e10ded409a1084cbd2e7005e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1ResidualLinearization.html e5c248b2b36bb10ba7f01941f82732ebc2b2210ea2580247dbc0f90c47a1f010 2
@@ -10663 +10663 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1ScalarFunction.html 648842100f218a1aa1e79126e5256d8864e50485129b3e5902d6c13ef493c933 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1ScalarFunction.html 56c1daf3f9e1c519b0cab8917787c63db79baa64a0cb55ccfcff9ba561d36963 2
@@ -10666 +10666 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1VectorFunction.html 82a0724adc8bbb8bd86c9da95efef4c175acecaa8be722f1f5949836d2a349fa 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1VectorFunction.html e38353bad36f2bb7fd9619776b2d4bdf0987917094b713c63ac1066ba5f14c45 2
@@ -10678 +10678 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classDiscreteTime.html 4c99ec19b6c759ab74672aa00ad75c54f5cfe1f5ec629b9eaacff0e564a8b2b1 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classDiscreteTime.html 303eb8f2bf80b63cef9f03b3ff2a581b41940ae03b7d75657513ca673f382ef0 2
@@ -10689 +10689 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classDoFHandler.html a6c87b7a79ead3e52da1a3455cc65a0e3ee3cb5c52891d7882c1898008a78ed7 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classDoFHandler.html d0213c1cc50a81dad3cd2462f7c77a8e92337a237e436061f7f7cb9b3220861b 2
@@ -10700 +10700 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classDynamicSparsityPattern.html 2f4d9f165fe26f10fc7df65fc76500ab38dccae0311cdf10f5bc00ec31bf459d 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classDynamicSparsityPattern.html 8b488f09ede50b8ef4df22c0a51e302b233a32bf7207e3e9c5180d19a18e5ac8 2
@@ -10707 +10707 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classEigenInverse.html da46028e7b4507d02b34ec284ccce8e6308e313a9db8b5c58405a709872289f9 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classEigenInverse.html 7dd18f015db6595207d266654129f0dd7a1664c4488693c0161495f024ca998c 2
@@ -10710 +10710 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classEigenPower.html a48c886ad05668216f1ee4c1b22147bca9dd79b5dc9dd1a2355f3128058050d1 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classEigenPower.html e4875927a3fc990e1583a8ee7c35619ae076f426a592e9ddaa556993c8b15727 2
@@ -10713 +10713 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classEllipticalManifold.html 7642085d08bfe1072bd94929e59c2f5caa66e441416188a65393592b95ab2610 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classEllipticalManifold.html 7b3a4f2bdc05c83245984f062319f5f10b75beb4fa52d3d2a50a49e4991eaca5 2
@@ -10721 +10721 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluation.html 5956b43383304c1c74f954e019fabc7acb6cca861020181eebed52d45d5aaaf9 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluation.html d883ba77c8ea259a274ba77f37d6756228b54b42e5efb1f3415315b13393fc03 2
@@ -10723 +10723 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess.html fb17230e17f9f8d1b87e4e350677a5c3573c64d1f0a234d41bdb1050f7cfa5a0 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess.html 1af9e7b7a708be13ad15fced4a165e14b106d8e73d697fca0e311c545cf0a7fc 2
@@ -10725 +10725 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess_3_011_00_011_00_01Number_00_01is__face_00_01VectorizedArrayType_01_4.html fe61746d2478b4dc33e86c62728df4086691eca1d1497014997c329ff9c1254c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess_3_011_00_011_00_01Number_00_01is__face_00_01VectorizedArrayType_01_4.html 5cdcde7db1ac44327158d3bf8fcb4575d0a4b18ea5421c0186a0efcc8acb52f0 2
@@ -10728 +10728 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess_3_01dim_00_011_00_01Number_00_01is__face_00_01VectorizedArrayType_01_4.html 05f50a147d58f5477a8bf59a07edf0abc0e023f5fdc0989f6f401ba9f8ebbfed 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess_3_01dim_00_011_00_01Number_00_01is__face_00_01VectorizedArrayType_01_4.html bc62ed4943d401c0c916b787c237195d262c72a25eb60512b1d39200397c4e5d 2
@@ -10731 +10731 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess_3_01dim_00_01dim_00_01Number_00_01is__face_00_01VectorizedArrayType_01_4.html 602673af90cd8ac5a72e0f806efed828fa0b68353fd13200172b23fc8cffdb53 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess_3_01dim_00_01dim_00_01Number_00_01is__face_00_01VectorizedArrayType_01_4.html 02a221b63b2bd70d44ac15f43e330cc7eb231057762f061d7e771d754b64bfe3 2
@@ -10735 +10735 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationBase.html 8460e9b1c49bdb794ceeb453f659bf843a65bd4476a4195279ce5f2311e1eff2 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationBase.html e93fae5e3e044233d227b62a40811d4dff0458ec836dcbd5e685b692f1591faa 2
@@ -10738 +10738 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationData.html a2602c7bb83706f47c7abee94c3a6da218f3adaf33c93e865c1fe032ee19b406 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationData.html 81ffa6996ae845bb9f7aa01538a5804d32706d0afe0cdbfe22ccb58d570332f2 2
@@ -10742 +10742 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEFaceEvaluation.html 6fd36ffc915c6d5177511a20d01a1a32a38f87195087db843a7fb28976a86870 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEFaceEvaluation.html 6a57ec5a9b351dbd551905ca893aedcadc4d4dc3bebea0933a5663bdf7825ccc 2
@@ -10745 +10745 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEFaceValues.html f5b471f13bf41e7743cf1d7cde319ad6b32e7efd7f1ad6262a2d23c5c3c47ec2 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEFaceValues.html 2770e0bc76c3ca15da013b2a2f9c83526c0af8f60df8b9d08753c844d6bea725 2
@@ -10747 +10747 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEFaceValuesBase.html c817b7d6723631f62fc490ee460be73489ed15a17fb219bd2a0b00b673c11327 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEFaceValuesBase.html ad31d161c592ddbda530135c4f50d46f72f5a60bc07d29a283b6b6e4462c7e1c 2
@@ -10751 +10751 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEInterfaceValues.html 18095f5f3ee25837031939d1413b755ef3e1cf7205feb2471434f5f33ac56951 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEInterfaceValues.html 2bd3e8d3083817ce60cf84e7fa5787ede4bd279517c9883b67d8c70521d3a58a 2
@@ -10757 +10757 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEInterfaceViews_1_1Scalar.html 5aecdd5fe3ab25013ecbf6d794eb8e3e88a85406c428dd8cc9c19aa7f0cdc1ad 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEInterfaceViews_1_1Scalar.html b23aab8c3e698d38eebf6029101556b930e383432fef22fc8a2471778b2cdd3c 2
@@ -10760 +10760 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEInterfaceViews_1_1Vector.html 0ebd834fc2f352922ec68c6ccdb00e2ca2c7641df73bfbef0b2eb7cbc0833631 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEInterfaceViews_1_1Vector.html ce0effa32b0549597c5a850f726447290a565604e20f64ba44625a409a366ae0 2
@@ -10765 +10765 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFESeries_1_1Fourier.html 490db44d02976c4025d83292277e8ba03298b27d456352ff4f79293174409e1a 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFESeries_1_1Fourier.html 3e76830070d605c6fe076e2454af536784a815e99024240fa47c5a89c7c4d0ab 2
@@ -10768 +10768 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFESeries_1_1Legendre.html 7aeeb0ad364e2ac0a47f553651a55741df736ea6c12978f59ae0ee7d345b642e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFESeries_1_1Legendre.html 686a560f17bcc88bc18ecd7d257c4437644622c31e75cb9f8fe327aafa2a95da 2
@@ -10771 +10771 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFESubfaceValues.html 3623b8f25f69f1beea89db3b8eb33009c7472f6579f8c2db9745dd77683b07f8 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFESubfaceValues.html 5342a47b0a833c1d3fb73c76def26f48194612c3e79f54a79d4c88e762004954 2
@@ -10774 +10774 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFESystem.html bcbcb1d8b288402006ce149b10d317f63019bf6f3d048043ced2e6f56624e91f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFESystem.html 9fd5758ed1a6598c93253c43bbb9c7441f284ef4a83c5deb75c5e49d1a6aa732 2
@@ -10786 +10786 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValues.html a073b7b7dde1fa6f96cead74b0522785c269d33bf6b073757c6986d82e52933c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValues.html 65bdd368ae9975085687dd7815960cfbf4946ff3c7c89452926e227e584aa010 2
@@ -10788 +10788 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesBase.html 6d0252e90be669d222b48512b464398424c2d4557515a166822b1059c7ef979f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesBase.html f93d8934b9ce0b7e49c9162d15fcaa275e8cc6aac59c51f0a308442b60fbc5bf 2
@@ -10793 +10793 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1Scalar.html 442c2f7f25ee9ec75392b35385b410a1d951cfbd835b50c1123a7ea4653e5274 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1Scalar.html 82547322dd26ff93879f43b4550ff54aa24b926113ca49974fe8ad13677cfceb 2
@@ -10797 +10797 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1SymmetricTensor_3_012_00_01dim_00_01spacedim_01_4.html 21b9071d328117a55e8bcae8c96f72ef4b64932329717a78fef0cefc7997cd71 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1SymmetricTensor_3_012_00_01dim_00_01spacedim_01_4.html 915495254f2f87a7f2ee61631e691107835b68f939a726e8b41bbfc5dbcc3786 2
@@ -10800 +10800 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1Tensor_3_012_00_01dim_00_01spacedim_01_4.html a99c50c2b73b4a24a43820a2a1a973c53b6d903e8eecfceb45ff71b5cb9b0850 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1Tensor_3_012_00_01dim_00_01spacedim_01_4.html af923e01bf27951cc8f4f5039b0a4bc9c93d09db9115a6ec0a4b763a62d35139 2
@@ -10802 +10802 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1Vector.html 71f433fb9a85088a83065fb22da5c912425f3073b1ff7d5e3dbf27fe8722fdb9 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1Vector.html 2eaa8ea6817a27b3a84fc2ed96d586c8c5106f76abefee7a19f056c2057e882a 2
@@ -10806 +10806 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__ABF.html 059c9239081de1dc76d04c945bd77b9eb096bf03ff1ed594f3e6d6d8af915e39 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__ABF.html 0ea25c70a70da4a14f692896a66e776c82adedda64a3e9d553fffc66c8f11d5b 2
@@ -10812 +10812 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__BDM.html 0a3b168e5f615eb4234e7fb9be6594cdcc45f2eb4b756f5e87e54cde9c4ce1b5 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__BDM.html 5ed34098f1034d09ea8cfb520dc50de8a377e7fd91d8bf2ebeda9c1d8cda9dfe 2
@@ -10815 +10815 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__BernardiRaugel.html 40e9b04068063035ec1d7e8492be6d4df0de64009333e4f7a5ed138b1d6d2884 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__BernardiRaugel.html 90c114cea2666f1091df22f077cfcde7e3b37f72ff5d77c33ca4744fe8f2bc77 2
@@ -10818 +10818 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Bernstein.html d2456e6d4db6837a16e87401935df5ee56520154f9f5fec8054eec699c0ac098 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Bernstein.html cc7281b18dbe31502da0c8398c20275284afd457c8391208948c636b30fd20fe 2
@@ -10821 +10821 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGBDM.html 212597817210794901f70b59e80d5cd57876972a5dade29938143b7de7880869 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGBDM.html 37f8a0e5396841b0b3eda2c2b6797eb857007c1179c8422ab466f63415748973 2
@@ -10824 +10824 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGNedelec.html eed0979680cc5bc1db43f1c3a32882e1bfe21b7d600cc31d94ca4f7bfbc296e0 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGNedelec.html c7070fa52951602ea70a177c8f82809d04957a22e95ae7a75a2f2e3e8fad13ec 2
@@ -10827 +10827 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGP.html e93e171c9c097bd6ab11c4a493f8fec55251da9b7374ec2a754b0c5d96767157 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGP.html dee7c5f11980087e7c0db870504f2fcdffc7687b823db8a1ec6b64f31faf6267 2
@@ -10829 +10829 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGPMonomial.html 112381bb61b0dd4d24b354b5e692b9c9e29aae94678bf6e80a24235f538c2ce8 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGPMonomial.html b793acd1fb98553832703af72afdf501db03b9e6431c9cde116a2be95eaae33f 2
@@ -10832 +10832 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGPNonparametric.html 42fc10e7d8f074f091e103507d209f3df5b97ac51535f390c67e22fb606daac8 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGPNonparametric.html c51e687c2d2005eb826fb143618deaccac2fc1078916ffb6ba06b418a81d40a1 2
@@ -10836 +10836 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQ.html f5db30c938a5069362fd6a61504179d31be8a779480eeb886c0d45ba22ec4363 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQ.html d43f6cd297cec5b709e13d9b572ffb9d69c2f31a0f1e29eaa784eac6463d0714 2
@@ -10838 +10838 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQArbitraryNodes.html 807ce83f8d80d271246ba1f90c19bf45a4a5524c1605f0afd795a09ba34cd6fd 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQArbitraryNodes.html f9a2415556be9a0bbda9d47f54889d9c0a20911d97a9838ee8981c7f1a05b2c3 2
@@ -10841 +10841 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQHermite.html 47bf8b4a3e321d2ace7797948700b3ade63001825037fcaf83d9efc26a6a9f80 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQHermite.html 88f31420bce0c1b35a2e9603d3fcb9e921c7ece3ea3f88e99b63f8197a41a659 2
@@ -10844 +10844 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQLegendre.html f5ed5b1b62fec5076096698a50312d5cd486fa4f56657bd53f633a3685095035 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQLegendre.html d7350b582f0b50e1bc53c9500559329837e420e878331a25595164509d12a16f 2
@@ -10848 +10848 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGRaviartThomas.html 2838d3be421a77f94731f3784354f6eb36795eefe22c8e0c970fbc267bc6b573 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGRaviartThomas.html 076ead5390f184c31419677fe9845c7fc42fb85c3aec0b2ef32a92485fcf1445 2
@@ -10851 +10851 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGVector.html b68db9989d9678967288e1b932d0df9fd7469ad30601f12cb510e72ec17fc597 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGVector.html 89703d8976d3e6a161de5d30a9cb1a6abe05ab39bae7f86aed909924740afc80 2
@@ -10857 +10857 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Enriched.html acc766a4e5108164e79523edbdab6e1d0321aa636c3e44b551c5ca5d19981ce2 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Enriched.html 79a93d3a889de790a077e8960ead2b3066867c9f305f593e26d9ffbe195909e4 2
@@ -10863 +10863 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceP.html 053b38f7e9df4a36778af66b8755b8a57caa02be2be522745212ff32c50c5907 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceP.html 395bf73b4431b721c62bbb57dac91f4a45ea9b3eb427308597ff354872c12ece 2
@@ -10865 +10865 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceP_3_011_00_01spacedim_01_4.html b48d49d9acfdb999fd1bd7b769559beab2d81c408db159c4f6d04868ae5f6162 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceP_3_011_00_01spacedim_01_4.html 394c2e389bf99f374a51d32527434fd153309ddc3d30115bfde7fefb7cc0ed74 2
@@ -10869 +10869 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceQ.html d4c7ec7ac1222f1c81261856faab0242741f87f68ef203e3d0fa09629e4ba2b8 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceQ.html 0583094f725ab096c42e29b18b49e206975559599a9228db1f19b5e51e76658a 2
@@ -10871 +10871 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceQ_3_011_00_01spacedim_01_4.html 955458749cea988b765f829209d3e6cc61ab2651123fb54593570db22eaf4b5e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceQ_3_011_00_01spacedim_01_4.html 35ea6d30642a8111c328d4268cf1be26b6909d68edc497a6f33e26a922367783 2
@@ -10875 +10875 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Nedelec.html 7f9474888f096dc98b8ef85563abe6556dc7132cc5675d500de67ac3d5411f11 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Nedelec.html 0165e73babc4394e7a9122380496a463e037a429115f84fa325328b6227fb942 2
@@ -10877 +10877 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__NedelecSZ.html 8c1dacbe7adac6ce2e2942f55779728bf906764bd11ea4392ec23ea18eee9988 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__NedelecSZ.html 32d60c448c7b1112ebda62b424f0f1bedf07f3b371fcb887033020f00ce0a15b 2
@@ -10879 +10879 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__NedelecSZ_1_1InternalData.html cf4e51cf49726db8117020efdd4d6e2fb3f443d4f53033467fbb98adfad48823 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__NedelecSZ_1_1InternalData.html ffe31a83ebbf37a9a2ab0548c71ce3b5a43a233d0af42441cc09e8c0eb6f35f0 2
@@ -10884 +10884 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Nothing.html ebdac7b3a179e72722c6c1afff46d4d42a03ece67bd4a9500af23b4619a69861 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Nothing.html 44c6b9b5ef18612e74e07f590d988f7a2b1418218378dcc88b7ebe13a6f124e3 2
@@ -10888 +10888 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__P1NC.html 5d6a0f1a434c1f2f1cdff6a91cf1211f1aaf4da0b8371a62c1896f801546d120 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__P1NC.html ba8b23ed193a65c1ff5ad79e72b2c8f4b808610878272f5e2689f14ade348cdd 2
@@ -10891 +10891 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Poly.html beb302765af85a56900ea552d643b4b3ecefa34616ea07ebfb0380f906b6cf60 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Poly.html 159a6c01bee1d78c0968ca61eb4b9e82fb8c9e43bb4b5d7de7affa3baf70f58e 2
@@ -10893 +10893 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PolyFace.html 8947b129c5ce83bb1c877d7913cb2b893d08a37f054e4d763954f861ecd7d715 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PolyFace.html e5e8fbf0393983e7cf6049ee832a16c82224fb4cd5762c9a0cfe75a94d78a486 2
@@ -10899 +10899 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PolyTensor.html d6366a1b591af74c738c2ecbc5ff4dc33c3f6c63ae531013b595088a6a80414f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PolyTensor.html 5fde64386d4ebc51e3dd674e425be6f9e453a56501f8a184f41871dc21a95f28 2
@@ -10909 +10909 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PyramidDGP.html 5bedaebb3a79ec123c9f11987c2b21679e7a7e69ea5d719f049a53927e59d04c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PyramidDGP.html 45cf57fea27d19230c07ed68d2f6957d0a6322a94ab5fb2484906a6c35e51c2c 2
@@ -10912 +10912 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PyramidP.html be88d5d84de48e176490078dc6e2921a237ab389be8ece256a79d31c9a2f5cf3 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PyramidP.html 85c50eb12e0b4937b202e682c37f1e959962b39f523158b8fb5131254b01eac0 2
@@ -10915 +10915 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PyramidPoly.html 0727fe6becbcae52222617783a100672d61ad14887761b1d9eac9afe4c8edcaf 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PyramidPoly.html 75be030829ef8743ade5ff1dae98d32df025e4f055796737b71097bb77f37b23 2
@@ -10918 +10918 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q.html 33b421cce72c8cff7ce17b3b7cbf631f1decfdc3da987891c9f545d0ed12e04b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q.html 33af5c1eb03b16adc4e48b28fb6e308c2b98a5a90eabc903f48cf155fda819b7 2
@@ -10920 +10920 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__Base.html 330edd712a4541b7ed6e278080a59b3bf5a1b664b252ab24e98b9b3490938e80 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__Base.html bf9d48e7a9664ed3faaefb0b28af22cddf4f051deca5e4766cea944c35eccd3b 2
@@ -10923 +10923 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__Bubbles.html 137e2fdfc3c7af7fe1c26ba94f0facd921405291b13ecac9f043679aa18edf14 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__Bubbles.html d420a2287861125958c3c7d7d5706fb11882b0a7cf59c6409b521db754f026f5 2
@@ -10926 +10926 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__DG0.html 07dcc70962f34a8cf54920f3e3f2fdaef80e60cc2b3848fa6d92b60c5fccfa23 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__DG0.html 39aa196064a33cc8bb337691563375b37f383bf0070131e47f69c89654aa2d27 2
@@ -10929 +10929 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__Hierarchical.html 69e8c78b7e3505998a4ff4182b8215258aa10eb09ecc3d94fbbe983da5a15e6b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__Hierarchical.html 7363b28ff5dcedceb545aaf7034101f644e3eaba8821a0b52fd0090fdfc331f2 2
@@ -10933 +10933 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__iso__Q1.html 46302e9a22e544bd1017f25daf7f201a97cd4ac7836804ad5bc5a974373cebfd 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__iso__Q1.html 1c1ee3871b883e2e16b2c869ac07ca1a83624c3878a23fb79a411ef07c49bd62 2
@@ -10936 +10936 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RT__Bubbles.html dbd3cf9fe517b80542f7fe697e5e0cfc17d9ab470471f08e208a0b8c1d1e441a 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RT__Bubbles.html 6f3f9096ee0928bc95672fbd7bbf467dc7bc67c0a91a447bf9b5779c8e68cb8c 2
@@ -10939 +10939 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RannacherTurek.html 4c025e2e233de17c9e69cdc1eccaad85f0594cb41ed71cdc93ae9ece73d2f75b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RannacherTurek.html ed02cd5bfb62be5e813ac358e96db179a435cb309f89110c656c19e8851bd500 2
@@ -10942 +10942 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RaviartThomas.html 572873d86102082eb4e26279956365a82beddee34c9317c861dea0f9deebe126 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RaviartThomas.html c2d6f2fa436ec516a3dc81313f751ca6ad99c1f1b144689a956ed82eaa4effda 2
@@ -10944 +10944 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RaviartThomasNodal.html 61490ab8b5bf8eff0684510590c6bc83afa5143ec239b36d45dadf0b1e9c4451 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RaviartThomasNodal.html 10a591453460a0fd3e8d2703963ad8e67a942b664306c0be1ae485add9d769a3 2
@@ -10948 +10948 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexDGP.html d068f17d862476d0610cc26b1537c65ba1303e981ed91022f3e4c5c9ad4ff075 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexDGP.html b58cd41514346bf38f8c4458b76506df533ccd8d8873b1d6d464583fde4e2c3e 2
@@ -10951 +10951 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexP.html f063b030489bffbbeaa64743051d172dd1ff19885cf4136e1f632076035ee5e8 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexP.html ce0aaf1d41cb1537462ad7f06a1369829bfb7030fefcb8244ef87bdb2a58b033 2
@@ -10953 +10953 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexP__Bubbles.html 672701a6e7e10e8bb6a131e44168534babfe029ce4175eddaf1203ff76d7d53e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexP__Bubbles.html 4373362b7be3971c36a79be72824978831eef4c7c65bdf4d9efab42bccb75646 2
@@ -10957 +10957 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexPoly.html f09cb088ac2f9d8047f58ee4f46b33f71a56d65ccd91454ec860524662390984 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexPoly.html 01ee0123bf494dc7ac3f84df3f92551d66bd3884c5e1274fcdc061dde3a50d12 2
@@ -10960 +10960 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__TraceQ.html 2ff20c7e8ac58dbcdab7fcc74e70f68ce1b1abf834b34c005e644b11b78609f1 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__TraceQ.html 4006dd0b714af3baa111ea4834caec5910abe3dcce87b74c7d1342cfb39f5091 2
@@ -10962 +10962 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__TraceQ_3_011_00_01spacedim_01_4.html bd1719b29689166540197e2562a7a5ff74b6e5bd141b5346a6f0f87a47fcec80 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__TraceQ_3_011_00_01spacedim_01_4.html fa4a18f2f0e9065d3db8ec4db33d77ca7763c5b30c884189e2e163c61c15ead5 2
@@ -10966 +10966 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__WedgeDGP.html 62181ab8c6455c42553420dd39a5276d71937851baebcd17f6ffeaa6e3f83324 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__WedgeDGP.html b226e4fba867acbfa9db4e7a85f56edcb3eb74853cf8b53f1d5711f9d0f5951b 2
@@ -10969 +10969 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__WedgeP.html 7c152003cd9de58716d7d68d8cddc7ac87432bcbbc7de0f15a172253160d5169 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__WedgeP.html 71fe44269c9b3304092a8adca2b45c647b9b24dc10c3bed308148bb6f1bfe6b6 2
@@ -10972 +10972 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__WedgePoly.html 0aa8196da21e21d2d11d1848554e1d05c8dd2dfbd984ca6f6aa58db071ea986f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__WedgePoly.html bbf67635a15152ecd42cd7c5b997d1ec2f2f2364a6a92cc91ada8249a74a4a32 2
@@ -10984 +10984 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFiniteElement.html 90545b4450288602c1563cbeceea32fe717aa0b95390f18cd859abe4328c3634 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFiniteElement.html 2ff74a0ec9a18b381d74d82163fb745e939ebd7b64fca1f2047bea568e80c039 2
@@ -10993 +10993 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFiniteSizeHistory.html 38c37108758627bf3cc48d60ca4881df2fc818215b284eed31043e6d1db1875c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFiniteSizeHistory.html 8ca2f12f8ff2e34f17bbb0db1ea52dd1bebe75e4dc8b303c1677302f159a046b 2
@@ -10995 +10995 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFlatManifold.html 23d628a448c534e79ec4211eb63ecda2b1aa4f8a007887aaf60b61c8d440fee1 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFlatManifold.html 11bf1f5a3aff685845be604eb51f36c30354f1fc2f7be34cb0149ba835e2a640 2
@@ -10998 +10998 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFullMatrix.html 602e9c14406f2bb5405af0f3d6df528f4b088f7570ee6bfc77ccee9a537ddc3c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFullMatrix.html f0035b4235941591bf053ef0c7cca33d4a2a7efb922f74d9363095733790c62c 2
@@ -11002 +11002 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunction.html 115edd4704a0564cf7c35c3c1a0d51b845d61f841bc306bfb31396963b9fe744 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunction.html ee3bd47c205cec6376413dc77f914b1c50304424fffaa52d0e6b7558fb651d9f 2
@@ -11004 +11004 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctionDerivative.html 269bbcad6f4f667f06c144ed1e1df76599f6c08437fda88e2a0f75c23e2d5ac0 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctionDerivative.html d7358744004ca8daf1ad383453ab58d4c634e17b92e32652caa6e16d7b22adfe 2
@@ -11010 +11010 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctionManifold.html d6707737e939153a1c2070df7b64641aa7390ac986548f411da3df60069e7639 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctionManifold.html c37d2145053db9748e93b1ebc9dc53207f84fa963519f25abb5c84db6d1af2d9 2
@@ -11013 +11013 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctionParser.html b282dde52fa3d309ce67787365a572eeb37be50c689b600bed553ef8ed65e3b6 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctionParser.html 90d81d1ec7a3681465333e94f696b7781d635faec890b945e2725bc8022892bd 2
@@ -11029 +11029 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1CoordinateRestriction.html 2ce80308b7d1f7c02fde1fbab613ccdc2d46a9d427904ab4609ef67ba305faa1 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1CoordinateRestriction.html d60781dc81246e8469b82eb21c8580f60cb7c5438eefaec16523501ebac7fb69 2
@@ -11044 +11044 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1CutOffFunctionCinfty.html 4b188f9c3c4dd85fa23bed95c40d57ca9db5b8166aba1992a79056e61ef5dc6b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1CutOffFunctionCinfty.html 7180101e64309e5191b2cb3583f9300caae178df30307c63d5301145d54e3c7a 2
@@ -11083 +11083 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1InterpolatedTensorProductGridData.html 371970f644252f3442acb8171503b63abbc76db8644f9eb4a543beca626cc167 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1InterpolatedTensorProductGridData.html 33f2eef41917dc30944c0cda7abf479c07f1ec6a320ab079adfdc3b93ef9c2aa 2
@@ -11086 +11086 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1InterpolatedUniformGridData.html aab91beab62c9332db5f2d2e58796d88be29e7c072d084afef1e1994b6771421 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1InterpolatedUniformGridData.html 99d3dde663c36c8911b89dbfed85550e13550b43e8244ae28c37b5e92bcb8cf5 2
@@ -11095 +11095 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1LSingularityFunction.html 69f5d4e622e3ca4170c1b49b154c8e8016aefec9c8629c5d586989a55a693740 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1LSingularityFunction.html 0630184abee05b8ae165d4b4b2d999090fa222b233dcc6fe28e72e975d5bbc98 2
@@ -11104 +11104 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1ParsedFunction.html e4b8def8b719b6148931df3c835b79347e2d6cbcb02aa7a89fd75408bda35fbf 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1ParsedFunction.html 02c9d39d6a3dac82b671d1241f21134826bd6a368f00999746086e4d0d4261d5 2
@@ -11110 +11110 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1PointRestriction.html c711ad78e2c5904e6879deafa2c0a7317430b3915d144efacae39e381c8e1880 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1PointRestriction.html 11f62a536945842bcb38ebde20dfa4aa9188323a410e38c9cd6a7b9364aa40d4 2
@@ -11116 +11116 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1Polynomial.html 0f206c7ecce8e370a450896cc34796c91d48a0a379e736372e2f45a18978ce3b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1Polynomial.html 1a9e6d39f26804b7e19304331b0ccfb268b4fea98df094e7059d0fcf425a268e 2
@@ -11122 +11122 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Ellipsoid.html 51b87e36cfb4d290b10d2d29d6efcd003218007486d3619b2392d8a55da5dbbf 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Ellipsoid.html 33f9c4f90bc16a9595ff1e0cff72ce96d518820b99e7f9b73e69efac0bf9858e 2
@@ -11125 +11125 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Plane.html 6b2310e6f8d61cd81a97b6fdd4eee9fff9f3dfa48b572b573e9a06a4acf37264 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Plane.html 7c42c1d3db1a1c35910eaf634266dae1623547c188b65069915fe9cf6c1ec792 2
@@ -11128 +11128 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Rectangle.html d33f35983d47badcba49881c1e74ce931fbc3bf85c50c9e25383312aba146599 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Rectangle.html 0068b90d8a381980e9d209e235a608dd0ed3d6880735a62cd7fe2ed7aa04647b 2
@@ -11131 +11131 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Sphere.html 85efa304190bb896d16c55466c8000a3b3770739e19749c2e1db8ded2e614533 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Sphere.html 6a254823f2b05682ec33a4ee527361f3509c3ff6cda85b472a58b8565bc7a23d 2
@@ -11134 +11134 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1ZalesakDisk.html e411236f8fb9723a6a12a3239b086e100982b1ac0f07b292628bfe30cb570a55 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1ZalesakDisk.html 0c58045f25be6525fd63c87ae2211c85659d8abc1c9d88a3ea9795e7db21e8bb 2
@@ -11143 +11143 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1Spherical.html 7f34221c537e06e061db328c6fcb8048bc0bdf8e2aa3c021052c6781959667fc 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1Spherical.html 7e6558c888c517f23ab752004734ca245b6dd5a9fd8694a9d3bc40e31141cb71 2
@@ -11152 +11152 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1StokesLSingularity.html a9851f157ebf75b137398046f4e44b920cd9fb035fccf1f8451bc92ae71b4904 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1StokesLSingularity.html fb57ff6465787a8907d7914ab93a0c6f13c365ac6050eedd257a219092af15f6 2
@@ -11189 +11189 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classGridIn.html 8429a9d093c1e5063ae2a1926d144b7246e05df1582a5ca5eeb77b445f57672d 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classGridIn.html 8c8f47b10e28071c945ca3130d18331cb4053fafe36998e9d148087ba0660fa1 2
@@ -11229 +11229 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classHouseholder.html 8be7707b7c539c7edcc9168cdbd646a918408fc97c1dc39f3b3b434966e48462 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classHouseholder.html c94e69340df3222f9b0b18f85a52fb8149ea8f1abeecee9daae0d995afff6779 2
@@ -11232 +11232 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classIdentityMatrix.html 6f229ca1cc7ee80337e69023bceb166aed3df736b1674644201076097a2bb817 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classIdentityMatrix.html fb0a1ae4c0a125d31ca1f5b5b386f0f8d55cbaeccaeac8720ef1639df9e93b65 2
@@ -11234 +11234 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classImplicitQR.html a55f1b835a1f95767f7425d40888fd548282b28f9505f5b67c26dd3cf7a1704d 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classImplicitQR.html 7cee836837e0bf829db7fab1070fc3a3fb115664cc02ce04d208a367582a9bac 2
@@ -11237 +11237 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classIndexSet.html d5b90121632f40358336d355b57d5ef91da7936b9ee1fcd26408a1beb392e93d 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classIndexSet.html 0766344a489285054c9364c46b1c2ca6242b86712c31226adb6d692016f69d8c 2
@@ -11247 +11247 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classIntegratedLegendreSZ.html d3b42d893df1c00c2b82f1e07d6e93baca7bc9ba55458a35d3a80204f008107c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classIntegratedLegendreSZ.html 6a647cbb415621040afbcdf1cab9f9279efd19573c165b294006a144e8e37773 2
@@ -11289 +11289 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classKellyErrorEstimator.html 8950ee3f75b110e57ddb75850661cf843b1e1977fc3dbf62b7e088a52edf1996 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classKellyErrorEstimator.html 65a619ad5abf86c3c44dd7cd9f7d6e97afff65a0e588ee84d83cd956bcaf752d 2
@@ -11302 +11302 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classLAPACKFullMatrix.html 62d4b121d458c1cc7b50ec3e178581f9210d3c216e29191487db1398e79e8ea8 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classLAPACKFullMatrix.html d030eeb11e87a48e165fa55134e5766866ef1a4ceaa40d95d36da11b4fb4c913 2
@@ -11306 +11306 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1CUDAWrappers_1_1Vector.html bd48ce161537b9f4679f3f9995012728539c719d7b672f52bf587d4f9647bdae 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1CUDAWrappers_1_1Vector.html 321f38e49fa5f585555a0f6ab54c10be07cfa35f1a1c56eedc04096d4ae50d44 2
@@ -11315 +11315 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1ReadWriteVector.html 214ff678e6cba04b513d1b2fef6d54bf388d9ec3c41fcc6726467ff273f6de49 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1ReadWriteVector.html f96411403e0228bc25b391f948ab07a3706795fbee86f0d8b2b18f96a6720523 2
@@ -11332 +11332 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1distributed_1_1BlockVector.html 8013e2bf0342794add0f07e5fbe72a112d69ff36db60dea556fa8d3bd0287a23 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1distributed_1_1BlockVector.html 750362d867d42d88bb307002f71d34148e3928f164bc898e36c7c54dbb70c75a 2
@@ -11335 +11335 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1distributed_1_1Vector.html c10f878c168e70aff1feff677fcbc3872c11d8a359673628c8eb86cfb88aa564 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1distributed_1_1Vector.html 719e0c69c89f646c170f12d3722295a51b34e08cddb98cba4f3f0c0cc2d952e3 2
@@ -11341 +11341 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classLinearOperator.html 6226e14848f72f5a1152481128194df93ece0c35cd98b60e6b31e7a54b7152ba 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classLinearOperator.html 16194620b610792d609cc82ad41bfafbcde9741b9ef6db8c2b8ade1c47da6d82 2
@@ -11459 +11459 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classManifold.html d600bdf3d10900c4ccf8935fff382cab0b1b29f84c47070170f50cdf0410aa15 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classManifold.html 5ddc062b21b4849da0c117eaaf4dd2d253ed285c4b6be2e881a76383f7f7a2e4 2
@@ -11462 +11462 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMapping.html 5fbc28205bac16834c970eceec7990aa66374742df34b6e6fbb85a67357d892f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMapping.html f0ba1e9b4d12c206244b68869a522f624a98325761ded3a256f0676f3ae857bd 2
@@ -11464 +11464 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingC1.html 1bb72417480e86fc610e1362d607ea8ceceda5984b6208e19f5a1b1f06dfb38f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingC1.html bfe82e98a413077e64d31b47345240d05aa2f23a34c3f8b4beed62d32a5eb811 2
@@ -11467 +11467 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingCartesian.html df8561676f0d08ee4c26f312c160d22edef2f4642a3c087bb9dba491ebcfd02c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingCartesian.html 0ee9a8031c3838f6d2da65963597c739f69d40ee56ac9561e4c10bb4e4c4236f 2
@@ -11473 +11473 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFE.html 17a873dbc2200152c1d751b1bcb77231e5cea399c217ebbd1fa691b3fda34e1e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFE.html db3c406e50434cf0395a5b9312169254300b31437b106b7092adaf04024efcb2 2
@@ -11475 +11475 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFEField.html 11d43b7c003c7fc7a11d016a0ee6c341c0d0006badac9ea6c05641c200d52d07 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFEField.html 0fac9fd035fe095a9a59d35458f0f9cad231f32b17b2678496a2bef0f52fa63e 2
@@ -11477 +11477 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFEField_1_1InternalData.html e8c724198dd35c89e0657d098d76a36eb76f77607ebff0f4627cc615ec22eb77 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFEField_1_1InternalData.html 2ac22cc65706cee7b8cbfe7d8abbccc551f874bb11cecfc0700e6d2877dd6b27 2
@@ -11481 +11481 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFE_1_1InternalData.html 0cec4bb94eedec3896ec2fe0487bea3c844bdcf84fd4b15040c723f18c5ecead 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFE_1_1InternalData.html 2a68198486fa8bc5db365e00f6551fc468c5909483f4adae249db11fc72bfa82 2
@@ -11485 +11485 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingManifold.html 74e1cc5285e069768642031681f5029b1b5a5801ea65601be4562821b8af4a77 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingManifold.html 6a1b38fb0621cf35fc78fc3c0d1673809c4f2014e26224d41fd12ed5b5acb706 2
@@ -11487 +11487 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingManifold_1_1InternalData.html b704d1c60f8bc8ecb2133af3e6506fcaec0e254be8d3526bc39f7191c4f585dc 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingManifold_1_1InternalData.html c68a2a96ef537023f79ae1ac5c13a2c19eda3a9dff9f6a93ae8cd41561787405 2
@@ -11492 +11492 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ.html aabd3517c55d7c5b7a6a6de9e0763964e241ea217b13791e2f28afbf03ed444e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ.html bc6bb07cbfc50f47d36a0c39f61a14e1584b3c5f3cdce83f38656a486890e4a4 2
@@ -11494 +11494 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ1.html 110fb8bfba47287ec9ea8ac5881259052f0828d8baab5c4e6f24bc31c5b544de 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ1.html 12149c302b8ffd9b26b61faf7662760550f5dea848e79beacddc9232657bd0fc 2
@@ -11496 +11496 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ1Eulerian.html a28e97054d80a700c7bbfe331cd533ed85a162f4b1754d2ccbd9bb052f5c8bf3 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ1Eulerian.html 349855921c23d87b70805f25de4f036f07086f688edbf2d83efebc64f7328f54 2
@@ -11500 +11500 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQCache.html 35f075861d22bceb3bd0b0f4aac0c270b63751b4a9d733b3c6f20b079ad6205f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQCache.html bf722b0b15acae9152973486d06877456ae7a2a9af73186390770a07862a3619 2
@@ -11503 +11503 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQEulerian.html 45e47ac5ea7e96ab0213548c4d76bde5a398b86b19dfa7542b92fbe5cd7dedc1 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQEulerian.html 33f435de2636822f7ccb56f4122ab2c4ef13cc3721ad87dcebf8c34f0e3390c4 2
@@ -11509 +11509 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ_1_1InternalData.html 398f04a3aa021d8bc3a9dde1e2ef9f43295f3a2edd9c4a93bf1b4b5782a41a5d 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ_1_1InternalData.html 3397206de4b9760a2091fddf3825a819287c9220b364d6fc370c328202aa5138 2
@@ -11531 +11531 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMatrixFreeOperators_1_1LaplaceOperator.html e7950d418551951ed4857e70d82294a791327ac290ec698ca51c82115ca8b6e1 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMatrixFreeOperators_1_1LaplaceOperator.html 84fb0ffbb9fda2cc064abc250e17589f734c3ca7f8c4e41a607e16ee69ce4e72 2
@@ -11576 +11576 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMeshWorker_1_1Assembler_1_1ResidualLocalBlocksToGlobalBlocks.html 5a4904c6c7168c1bd854a313146bf8d1192687720cd43ad8d75306312ad743ea 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMeshWorker_1_1Assembler_1_1ResidualLocalBlocksToGlobalBlocks.html 5fe6931d5ae84087fd98df94489adba8e17a19e8b2ffa6c59c965cba43e8d7a2 2
@@ -11586 +11586 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classMeshWorker_1_1DoFInfoBox.html 84fbaff632b0ec81e1cc0f65e5846ffe3e7917061d533470eda3506327bb95c3 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classMeshWorker_1_1DoFInfoBox.html 716ceb502842e815700a2518845586f4664d28f5749ad25fb05f5df991a04d9c 2
@@ -11631 +11631 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1DiscreteFaceQuadratureGenerator.html 1ccd31a7e5ff961183c0dee1804ceeae26fd94e820091ee04e53ff8d5e26f14c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1DiscreteFaceQuadratureGenerator.html 346cc5c8c502767a074a03d46b9af49a49a5c9414600669ee4c563c92f673bec 2
@@ -11634 +11634 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1DiscreteQuadratureGenerator.html 6113ef29fedc8fc1acb977346db1812e299600b53c6e4620184267408212de2e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1DiscreteQuadratureGenerator.html f5ee005a811cdeaf9b2b4c07046eb79872d13ef085d29af322ba2de3dc4d65b6 2
@@ -11637 +11637 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FEImmersedSurfaceValues.html 0f6be8d2bc08d82b3864d3ad6e974292002022da037a37c1b312e4a00ea4bf4c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FEImmersedSurfaceValues.html 481f85175493fd3d61c90f161b7979dd0b310eac9a97a2a4042046ca2f8ec755 2
@@ -11640 +11640 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FEInterfaceValues.html 4ebeb3e31f9b283d6afdc1ba5c1bea1992dbb116bcd3d7d79df28ced0a12c319 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FEInterfaceValues.html d81028e937910bc5727fd780672953d1f922ac589756b989f8e6fdab2911abe4 2
@@ -11642 +11642 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FEValues.html 986c4c17709a7267b525b06475364bbb90b4c786553a1831d036620a323f3652 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FEValues.html 2f8a2129fb7b0aeb98eac02a4a0edf66ad13e11109f67678ec6fb3dcb7c84198 2
@@ -11644 +11644 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FaceQuadratureGenerator.html 264f6bb8a617934d54befb70048bc768586775318f225fffa0c677712c869f34 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FaceQuadratureGenerator.html 6f74bd876546850632231ab70a9b5f208cf29aeb4fc1b768a4c5ea11710b39b4 2
@@ -11646 +11646 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FaceQuadratureGenerator_3_011_01_4.html 026869b33c1258482f058c565130472fa175ab2e0c2377baf0bca4fb817634f1 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FaceQuadratureGenerator_3_011_01_4.html 9c4bb2719c5f397a81b210b2ca2666c5be84518e391476684fdaeed138f9cc4e 2
@@ -11649 +11649 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1ImmersedSurfaceQuadrature.html adee8d34b46ef9ceecc0a4b445ade4863e07fb5864be92d0cd380c47b03300ae 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1ImmersedSurfaceQuadrature.html f229dc282f2a1960ae87800d0d43ce8c7471fd1341f6c09ce3e46bd9437ec733 2
@@ -11658 +11658 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1QuadratureGenerator.html 201a919b99f9a61915cf9d6526fda761f677f72b889b26fbd4d20468b19deff1 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1QuadratureGenerator.html c7778649a98cf3fead454afa9345dc6c599f9603d03a0135203a2e6111fd3b97 2
@@ -11666 +11666 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1DiscreteQuadratureGeneratorImplementation_1_1RefSpaceFEFieldFunction.html bf9c264a8faa0fd5100750f4fb975c98d30575d358426cb7de0b05544cf52191 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1DiscreteQuadratureGeneratorImplementation_1_1RefSpaceFEFieldFunction.html 65410a3dca364e8045d8bbb8cd9151945ea82c9016de55fe9758ed0d17c7fdce 2
@@ -11681 +11681 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QGenerator.html 1ddefe984b484cab9e60a3d863a795b3db4c58c952ac503e1226c3bf45a0fe11 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QGenerator.html 62d727e513e552da0e43b8fe569b0a3b076410c05994d899dbfff9dfa5e8df46 2
@@ -11686 +11686 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QGenerator_3_011_00_01spacedim_01_4.html 3cda92e47325e3bd3f26ed053e0ea8f60ea95d6c4b6e54385db58758dbec01ff 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QGenerator_3_011_00_01spacedim_01_4.html 916e7ea5293d237b6657b70c7806423ee4c2c32a9cd89de8aff18fddea6175d2 2
@@ -11690 +11690 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html 227b67856f873a71899e70c1db20c23ffefbeb1b236fe075861f36055da53a63 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html e7ca97628bd9c826d9be6565381be102ef9dd73583c5f14ef512b53fbc8160c2 2
@@ -11692 +11692 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1RootFinder.html 3578a2efc39e4dbdd080458d6c4c2ca4b5b7ce212567f812058c2279c902af1b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1RootFinder.html 7f28efed3788ee4dd470596d421e708535a05e7d6f4c6bff3b0b3ec8afb57d3a 2
@@ -11694 +11694 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1UpThroughDimensionCreator.html 9386cf22d43255aadf57e92a2d1baa498630177050567e6011cfd171fa4fa9f2 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1UpThroughDimensionCreator.html fcc578014c98146f6ee0117f9a7712c0393104abedc1d9063f62b9e6724dd481 2
@@ -11696 +11696 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonlinearSolverSelector.html c457004a355fb24c45e76b1429f163c8be2c60fccb9d5208d26ff72bb3e28ceb 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonlinearSolverSelector.html 5d6794eaa0e4d34859b2fc8ec4f13d322ac415c1543e5c0e0dbb271894e63860 2
@@ -11698 +11698 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classNonlinearSolverSelector_1_1AdditionalData.html c745f64cda6758167c2904d1737dce3c85cf5a97ef8fcbbf5f021a5531142980 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classNonlinearSolverSelector_1_1AdditionalData.html 99a01f4e6d62b21d5985237b15b775bd5020fcd4db79e377cf524f1cfb333ae6 2
@@ -11700 +11700 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1ArclengthProjectionLineManifold.html e95705db87f649397e4be5f02ac73774e82bbf4caae747fcab6899ae4cdfc608 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1ArclengthProjectionLineManifold.html fb393de211c703b0c311e4ef91b65c69f15820cc2d883ffb958209bc43a890ac 2
@@ -11703 +11703 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1DirectionalProjectionManifold.html fff83d2cf598a537e5d449636034f14301b55785538e6c57ce87c71f1ddd4188 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1DirectionalProjectionManifold.html de08e66da9b574152b4e35c48928c37b4d4c7826090e2bb0af451d4504e80f81 2
@@ -11706 +11706 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1NURBSPatchManifold.html a97a67b9fa8d89ab6f0bdc3d78840fe5d08b75b5c3f081ca1df1291752194e92 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1NURBSPatchManifold.html 6527696b065940e4ae5fe18066f85343798741acbee33f7aa635a3e9e159d8b7 2
@@ -11709 +11709 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1NormalProjectionManifold.html 9748054ac61e25a0b55bedf5ebb8a29d34c0bd4f7c81a2264963152e70f74f02 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1NormalProjectionManifold.html dc2e4e2bc870f1fd2777e1f637ee74d1a793c5c9f002cee45cc732f2c7babfdf 2
@@ -11712 +11712 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1NormalToMeshProjectionManifold.html 193a34b78d91487322f9f48bbae2f9e1d43811bc24fa71762e3fe9be84249304 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1NormalToMeshProjectionManifold.html 1c9c437b99a75e0099f07859f00627b2e0291d87e3eefd307929e052a751c8e4 2
@@ -11715 +11715 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPArpackSolver.html 6c537fa05afea999839149f9627aa9f1735bf373c4806e738186989f878d5d41 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPArpackSolver.html a04deee944ba10b1f2b57fea8c839336bcc022fb02f525a97414016ec1c2f552 2
@@ -11718 +11718 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1CommunicationPattern.html c8ca4df1aa00cc0fc15e3930589457fe8a27f818b39916d53c82eb5711d83a6a 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1CommunicationPattern.html 6d8d5c3addae99b9b1c96bdd27473e3157d70be56460add98aa5daaa17acaa88 2
@@ -11721 +11721 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1FullMatrix.html c386e2c3bf4d003b8df314b7fbf0456ff41b7c695f57132bc04fea99355dc8f8 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1FullMatrix.html 168fb3868873f378d66a31d4f17ccce950d0ef77a16dd7067f5f7903b0833b4d 2
@@ -11724 +11724 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1BlockSparseMatrix.html 1dd1a9056b7e77fc479b19800ecdc3cfccb172721162af0fb504d9b8d8b87983 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1BlockSparseMatrix.html b07415c1cf6c29e02a2ac6593f486f59cd619dde18630659b1523a13cc742ad2 2
@@ -11727 +11727 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1BlockVector.html b1ed0bc1f4f571bc401d95041d0840dd0babaace923d9a5a5bc4c6672da0d450 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1BlockVector.html fbce0cfb56a144f80073072d74cc511192348a381263ab4cd9e041c100a54cee 2
@@ -11730 +11730 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1SparseMatrix.html 1f7375090e2fba62da7dae2b24a6c8032b1976a11084584a92ec058628e7ae70 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1SparseMatrix.html c3c461390d804ce96507153d588e8ee6e2a7eab81b60fa17cf2a3a19a28535cb 2
@@ -11733 +11733 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1Vector.html fc1ca1c029e5a88488fc8697827633fae42121e8168604d6553f63ca5df47513 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1Vector.html 5af586d93dc187c1c0c4c673985ddff608d4eec5c2056ee9a6b2daa0d4b4e020 2
@@ -11736 +11736 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MatrixBase.html 87e2e9a3140bc8fef666a229e7b3a54999564d41c601f6b6742cd0cb3bc2e9eb 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MatrixBase.html 62777ae6aaf16d68ba18e2245f65e6f9622d387d27b9792e2c12e59a170e516b 2
@@ -11739 +11739 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MatrixFree.html 13a21d8b265e378e57478dcde6ddccd18b70c5f84b051fc3fae3be4305093767 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MatrixFree.html 8d4a2956201b35627cde5c4aaa7bb687d64a8f2cf211d153468206ebe7f879fa 2
@@ -11746 +11746 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1NonlinearSolver.html bb90414602e8d0e0278396a7b2ed1940e81aabb371b7a42efb9d040bf5539c13 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1NonlinearSolver.html c11ad176b0bc7b5c74fc33ba7acb116661c1336a5b15af24394f6a7d4a5a72d0 2
@@ -11834 +11834 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1SparseMatrix.html cf5dc70df663b680440369ec741815f18570befa022ce1eda7b2cd16243a1164 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1SparseMatrix.html c415eeca8a3004a472cfab9d8d0a8da3d1342b3f8992500bdad1de68de90f2fe 2
@@ -11837 +11837 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1TimeStepper.html 4ec317bb484ef8c67b47e592156aaaf5e54119b4f8fd43827131cab7952ee030 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1TimeStepper.html 0cdc70384050b17fa9f6d08be04ec4486512103b7b77e884bc31e22d6b68be8f 2
@@ -11841 +11841 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1VectorBase.html 70a1cf3e293128a3f8a2c1f767b1c533927c5e1795e2a5a8e7e84adc4d1a9d22 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1VectorBase.html 3496791a2df3d8dfef1ab7888419fa963d6b6591deec80c2be903132f39382ae 2
@@ -11846 +11846 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPackagedOperation.html e963085a5a65b7eda2dce277f2e7fe10c02c5c6bb2163c1992fb937c829789f2 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPackagedOperation.html 79882520177adc4154fcaa365ea83a9aad1f4f9636d5259f419b5569718e1971 2
@@ -11867 +11867 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classParticles_1_1ParticleHandler.html 68bccfd8a1061ce93104a13dc2edf58c96285791b62680ddad6480a547c4ddc7 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classParticles_1_1ParticleHandler.html 09f491a9560da85c2233f7069ae2e1bba6baa74cde01a203bf2b751235e61c4b 2
@@ -11872 +11872 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classParticles_1_1PropertyPool.html e87dae7ca398c27843d37edc6ef5cedfc371673fbabef2797aa7bb0f93a5fe11 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classParticles_1_1PropertyPool.html fd367c7121af8b0692c99a6b00c4ea27337afcf387c02eb6f9ef98a9f07f1e55 2
@@ -11913 +11913 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPersistentTriangulation.html 3485eafcd3158bb4f6fad3b229aa40364d679c9763024d15baf455fea36d4f09 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPersistentTriangulation.html ddd738b786e9d01f9c442a83cb848098cfb030bdb90ba365535593f37f0dfdc0 2
@@ -11916 +11916 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPhysics_1_1Elasticity_1_1StandardTensors.html 9a09d648c25a2e4d40837e090f07923ec45e2117a70ad99413e7aa786993ee80 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPhysics_1_1Elasticity_1_1StandardTensors.html a0ecee9003f35b4db3188976e4bc6a551b3178cf4c2938e41c5bc94a94cf2f3b 2
@@ -11918 +11918 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPoint.html c260b8247b423d1ea13e1777a5f102d45532309033faadfce0f40f92fb2497c9 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPoint.html fe15a8a3675e50293f4cb02fa358769e82b5dd34cbc53c6248b76dfcbdd8cb9c 2
@@ -11923 +11923 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPolarManifold.html a20703d6937063081c57c8251a8d596866a424653e4955da0655709e330c96ac 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPolarManifold.html 8938d88efbde4611945057a1b71213f868bfa58eebcf70903bd9d0ddbe93248b 2
@@ -11938 +11938 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomialsBernardiRaugel.html a8cfddbb576e685ead4a8ecc193861153ede3cbbf4903e96cdf6a1dd83dae7a0 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomialsBernardiRaugel.html dac2687b57219049778298bf9e3746d7d3a124dfcd24e21743f8fee57ccc712c 2
@@ -11941 +11941 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomialsBernstein.html afa864aaf0f5caccb6cd1a37fcebb68a29fa71162ebebbec60126e746eef7062 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomialsBernstein.html 3dc5f27026dc50bf13083b6b4bf761579a709095db24a123eb9d22783f0f5c52 2
@@ -11959 +11959 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1HermiteInterpolation.html 31e813fa9cd030ca39846342b3da020290ea5aefd5045c632c609070aa20e78e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1HermiteInterpolation.html 1c45573804aa4c495bcd58c9a5700fb52cbcd90366fbbd3c5174c609950c6a8d 2
@@ -11962 +11962 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1HermiteLikeInterpolation.html 53e64e0f0aa0094de90bfd7c049a24fdf35a0450c717f73efcbee68962a195f7 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1HermiteLikeInterpolation.html 7acc020bcb1b7490f0014c84dc81b317db483b381f79821691625c5c75407e4c 2
@@ -11965 +11965 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Hierarchical.html cb8a74f4cc6df4fdfddd49dedd592cbf66c08522433f610dd08ceb1b4a5add2d 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Hierarchical.html 3847ebccdaf21a75a797508d9c63dfd7521796ce409d50d13161b26b8a430250 2
@@ -11968 +11968 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1LagrangeEquidistant.html 3e9e4a98a9e51fea4a15dddd89eab5f4a973cde5bd4f20e906f26825b2df3d33 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1LagrangeEquidistant.html f421ff497736cec954cc0db88dfbc86f1c8826c6c4b7fb3f7f265018057f3d3c 2
@@ -11971 +11971 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Legendre.html b5fa53f776924f2b467a77d94dd0ec0c2c6138fb9a89512074bbac1570d2095e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Legendre.html 72338823e586127a3d078be2f4eadc5cc3578eac1b2471af6e0222d0c0f9306b 2
@@ -11974 +11974 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Lobatto.html d0d81a193b08c289d4f4dd38f75fb4020d5cee4152c44471a3c447d42168f3cc 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Lobatto.html d8c748c1ea7f3afac7b9294aa4fd97e1da503ce508f24cc26c60e4a045b9068a 2
@@ -11977 +11977 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Monomial.html ec4af7a4d470a46267a2f8dc1716e08bcd7e4bff9acc4d83fed77f8c09ce7e2a 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Monomial.html 2d3d9656237685f6229850eb2c344bf1ae9079105b9cd06c54b68af59bb1a850 2
@@ -11983 +11983 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Polynomial.html b37151aca7cf400dfed10b9936e9ba5de4298fdfd77347a4e5401c185cdd30d5 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Polynomial.html e9f84fe029f053ea502cb6ff1590c8752f0335b49deb8c8a4e6873b62d4293e6 2
@@ -11986 +11986 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1PolynomialsHermite.html 3e00fd214ddbae667c2b85ce4cab0f4ac11da195288263a8f1fe581b94f1d874 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1PolynomialsHermite.html a1282f31b327e0561717b621eb1b48cd30acc6268239ae398af92690359e6be1 2
@@ -12063 +12063 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussChebyshev.html 1737d006b30efc3b50d301e7b941a8e139850f01db06d0b1eb47a5e581f8c52c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussChebyshev.html efda8bb72ad79e6cf57ab33669ee4244eff414f31d5497c3778cad16ccc2353e 2
@@ -12066 +12066 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLobatto.html c6682e2ed134e2a500af86f586b5890df68e2ddacfc6700df3f4bb4fbc09c2df 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLobatto.html 62bfe0d5571a5e3aa9bb97e40b0a85c860cc72c1a5216d8e80b0bacc0c3cee7e 2
@@ -12068 +12068 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLobattoChebyshev.html cb7abfce8aa9763d8f25cb3007e24f64105b643bf1192f562d02b1a837bd3954 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLobattoChebyshev.html 45af40b87c5dacce27933ebcd782bb607d2efa5ccd16be36b1e848cb574f0ba2 2
@@ -12072 +12072 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLog.html 1ee6899dc58ec06134ade83f4dad54e4ebbc5e3792191bf2859a889e4136dd49 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLog.html ddeee83d9bf73bf0777e71e1872ca576284622b4e9310fc19295383bf1455dd4 2
@@ -12074 +12074 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLogR.html 79bd2be192d4f3f7120927fefa254469b6a06bc7ad90f1fd236f23062f29209f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLogR.html 1de0bacfa1771245804b86fb60e5672abfb89c9e58459f66bf2ef2320b8857fb 2
@@ -12078 +12078 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussOneOverR.html 200bba11317b7f93e892938d17029c65781ce97b9f7bbb6ddbf15fa9b34456ca 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussOneOverR.html 9f7f8e9698ed787bca548674f3d22f3e8d5c78a79a47eaade6920748eb9f1dec 2
@@ -12084 +12084 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussRadauChebyshev.html 3206dc3a2d7c3dfccd80a566a5d12bbf022c7039161f2528933c3abdbe2499d5 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussRadauChebyshev.html b8d7174337177d529e912240458c5ea2fa6d21fb24fec8fa1b9d035ae76ab9b3 2
@@ -12110 +12110 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classQR.html 544fc68b720d9db489777d42a527bf4006047e399ebc1d987bd4e780d28f7fd6 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classQR.html fb5a9179c956848f32ace54942aa21bc2a7442c0133d697253c337c70b1600c2 2
@@ -12125 +12125 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classQTelles.html 719c56a8ae7567814bee8018c13842715cfa1d4dfb7a5b09026505b022c84025 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classQTelles.html c62b678f19a37b4eb91c39a929a0e7a8a9e4fa94e7f4f39970d1f64f6a372d50 2
@@ -12137 +12137 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classQWitherdenVincentSimplex.html 0280db262ec51e18966d64cfd88224348665160cb941ab48d24ae2e91cb5eb68 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classQWitherdenVincentSimplex.html b017a6961a6122d1c1ddc7526e2b83095e738b7030770bf9ba7e24a1217e9730 2
@@ -12140 +12140 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classQuadrature.html 9ae030cf861f293d08027a7790f1c3d36b226ac7530cf02291d511b667269c89 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classQuadrature.html a405c5b08b5005b854770fd1e6a87670a40d82f076e4e5ceb49abff293e2f276 2
@@ -12151 +12151 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classReferenceCell.html 0956cce8d9705cfe2dd0b1126cfa2dfc9902b75cba4ca5437836fbe5b6b9a7e6 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classReferenceCell.html d02864516699652a181f328eb9d9e8044d2eba3b6b221a6c8518e160037435f2 2
@@ -12229 +12229 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1ARKode.html 883ce60cb052a7e6ea770a43d1a61bda431b338fa8e29ba93232161daeb98e01 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1ARKode.html 191671896957b7218ca34a7e92a29b96629dfc53e07c5f8265f72d5821e4c45f 2
@@ -12233 +12233 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1IDA.html fb858df227abb6c317ad472693a8e4a626ac4ce1b8b9a18975dd83051238d826 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1IDA.html df75e397594bebcf0d22f3ac6fd108055a72858279ca2ad537a8ab88f3833aae 2
@@ -12235 +12235 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1IDA_1_1AdditionalData.html a491b9e1c504847ccdcd1379eb102730749ceb66c4e182579fee06a4e5a07dc4 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1IDA_1_1AdditionalData.html 89c1cfba9fc7c48552038abdc56c272e923d6b2a9210339216a14e24a57d74a4 2
@@ -12237 +12237 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1KINSOL.html 0565b9c22d85463a2e83a269a8c24526002d1f135275784149c2ac958f71713b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1KINSOL.html 9e83a79254fcf8c4b340f6e212b6168ea9e417965d047cb7a70c40509661c9a0 2
@@ -12248 +12248 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classScaLAPACKMatrix.html 9434b55e7a040d5fd4903e3e1255c45bfb7f7341b3a402a97463319e415bd0d5 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classScaLAPACKMatrix.html 90d4b185bf888b85211d9dd4fd1f0834231e5f7a4af55f2bd1506737625f94e4 2
@@ -12251 +12251 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classScalarFunctionFromFunctionObject.html 751f5eabc939707e7d67b23f5e97d0ee0af05955137ddc88c246867c6e93b0fe 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classScalarFunctionFromFunctionObject.html 6344e95ae8cd5d292f8a0150b9cc81e4e0ba2207332265ff70d6c7bdf30732a7 2
@@ -12269 +12269 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSolverBFGS.html b11a1960d253ddc58ac2e28b12968cd760628559d1507599ae44372b046b314e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSolverBFGS.html 4479d5b020c25ff407c732db11ab209e6694b00f8793cda0c46b95e1cdeff65c 2
@@ -12278 +12278 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSolverCG.html ce0ad5521072625eaffa9fbbc04683375be9316f1b57339e9d5f34f53e08c5a5 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSolverCG.html 156756111d1a9b0475e6da281c6c3314107437dd1afec3fcfb6f94e60d4feaa3 2
@@ -12290 +12290 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSolverFIRE.html ebd928e99053ccaf81c7dcd389b9a341f3915bbabdf9ce5f37251d3f42c4da02 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSolverFIRE.html f386e63760d2a2a85b9dd3999e0efb9d42c6d139ad77eb5720cd649b26fc3e6c 2
@@ -12293 +12293 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSolverFlexibleCG.html 82e185b774f84073e6bc85fa24f2c3f8795012bd9f9b8b54fed0e5f8b42eafa1 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSolverFlexibleCG.html 62ba3f00b2373c17e0edf7b93bda054d24627e63ef4b0f35c92e69f48f100f4d 2
@@ -12311 +12311 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSolverRichardson.html 2f24dfce8cb1fac3fba09705d01fdbe6f8785ec889410e631d4342be0c5984bd 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSolverRichardson.html 83e908a1e1c88cc16c7a8d5f4b404f8776b8a47aa889a720038ce85fbedc03cc 2
@@ -12323 +12323 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseDirectUMFPACK.html 72db06ecee0917d4af8c5b6c66fe0bc1a21e9a54a849f05e9155b5c337b1abc6 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseDirectUMFPACK.html a5544592fcb9ce7d365962ad9ecf97f96205f13bc3a646553a0060ad686aaf06 2
@@ -12327 +12327 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseILU.html df1b39d5e4982589e5da655a9b288b62b384ca92c761f00fa351268d4359e488 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseILU.html edf4678b760565bec9f2703c64b8a753081299e58c0f6d80dccb59a12477f17b 2
@@ -12330 +12330 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseLUDecomposition.html 02398191fac8643d13ee0b1684bff586b04f4209481dcfc26070987977f1942b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseLUDecomposition.html 42b07a9608c77f69dba7e9ae0e7c49255a11d2966016bafd499e40505a7d4811 2
@@ -12335 +12335 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMIC.html 9546d100d949e6f7d9a578a49405d6ab2b31cec78d805316865db88943dc92d5 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMIC.html fb66884d65525b9e70aef4d12e04b248c7810af71893f2c9d172d0c2a29414a4 2
@@ -12338 +12338 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMatrix.html 960e3699e463b10838e4cc24839778399d8dc9686201ad0020cd9bddf9057012 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMatrix.html 243202678585777fd7625ac13faa98cae1d3a4a8d4acb5c5cdc033d1d639155a 2
@@ -12340 +12340 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMatrixEZ.html 7e60ce4650b795fcc8c4e14096df10e2716a74689640007aa93d93bf91c59ce4 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMatrixEZ.html 59bf7def87a936937382dfd346d1c675c7ecac093067d9fb5bed2ab5bee98037 2
@@ -12358 +12358 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMatrixIterators_1_1Iterator.html e63ef58c90b46ec916b1701b4cdb7689b46daeacfd5ef4d6613fde6468aee5e8 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMatrixIterators_1_1Iterator.html e6bcdd90d8e25ce88ba3621af8560800744f72275608e944fb6c83a59b6665cd 2
@@ -12366 +12366 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSparsityPattern.html 8a15eb3e6e8038e60e6aeb34808e1ab757efdb0bae0d2a6c68d9cf11ae1deba7 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSparsityPattern.html 7ae9138d3df50ec16591104e4b46363322b24603c461f47fe3ab18322ec90354 2
@@ -12374 +12374 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSparsityPatternIterators_1_1Iterator.html 2a0be46f3181c9067dfd789794e1c857df482abf2efed64ec803aa3a26f21234 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSparsityPatternIterators_1_1Iterator.html e17fdc68759bc34782993eb1870f65f8a4cc85d915b74265ed12026df5cc499c 2
@@ -12378 +12378 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSphericalManifold.html b7d3689c8c311407e0c1e940856625bdf200f5bfc6e4ccb13a0981568fd091cb 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSphericalManifold.html 13440622948a45f0bb719d71b036c312984c3f29fa9613796c2cdf7021963080 2
@@ -12386 +12386 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classSymmetricTensor.html 24c3af7e7bd4357921d82b1e8200c73dd7f22d62df453406feec1c556d560697 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classSymmetricTensor.html c148a5de962a31f757787bbe80e28f67df1d20383d032873b86657de02e1d45d 2
@@ -12390 +12390 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTableBase.html d8dca06bb263efd7ecb98a2e599b94cde9d3548fd84fc8f64181ca0d240c4c3e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTableBase.html 276c884a9b7ff0c9a5ccec41cd867f38b85c5dd25ff0aa84b22f329c8ef88de0 2
@@ -12393 +12393 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTableHandler.html 909cf1635cdd1837260912fba5ab491a3e490fb839f505142569615edf6d253a 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTableHandler.html 9372a95c25861dbf085ea58481c6f83eb73ec658177b01ae31abeeb038d6116f 2
@@ -12421 +12421 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTensor.html 75a62593a8051ea4df47f09a7d7cbe8c6909278f8451476553c72bdf11a8cf1f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTensor.html 1bab0c28fd86feed5dd9dae417ab6d80b47039e69a68f7ed712678295aba6d8f 2
@@ -12460 +12460 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTensorProductManifold.html 8b6b8e357c8aa5f2d8d31ca5dfb07c7c5926ace9a0680f458c4f2b6526b1eedf 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTensorProductManifold.html e1697da1d5321bf765af8db66ef9a06a6cd4c8bfe131aabe8a9fecefeaf7a9d1 2
@@ -12463 +12463 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTensorProductMatrixSymmetricSum.html 5c2cf9715a9aa0222fedf5699181269737817700d6063daa66db6c04f6f78416 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTensorProductMatrixSymmetricSum.html 8b6dda83523c71c75f1fd6ff078b7cf31ae9c423ea3c049bc98e9d52fad9a355 2
@@ -12469 +12469 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTensorProductPolynomialsBubbles.html 614501182cfe6d0bf8cb84715a442780674d44443b580404bf1c3bc4b49b0c95 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTensorProductPolynomialsBubbles.html bbe7c006403d87926472497caf271f3bca66ec31b8dec79f7217cd695e73476f 2
@@ -12540 +12540 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTorusManifold.html 30ffac37889a6ee9276d29c83de8088f9d19d8f273c93043f1f37ed497cc58a4 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTorusManifold.html f377912b9ebd66c471d24f3ad2f4600fa6472de46922bd06b827e19ae6fa6854 2
@@ -12545 +12545 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTransfiniteInterpolationManifold.html 2bc75d4d4bdfea40d05101851434e7c8fef4bf987e72cf9c1a4581ae0609ac49 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTransfiniteInterpolationManifold.html 7addc4727ad85feea4640fb5ff0bafb540172f3bb0f9b58109fa3ce2f7b03e8b 2
@@ -12551 +12551 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTriaAccessor.html 54fc14ec0584ee0ac492a3b596d12b6c7515c8be7a7c674e907b7b6dacabb171 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTriaAccessor.html cd17b94bc46ec9239dafca158eff6c9824a6cdf1774b8aca1b2d7f796b604c6e 2
@@ -12556 +12556 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTriaAccessor_3_010_00_011_00_01spacedim_01_4.html b0f9f5e4c91c4263043e984fee5e7fa8bcffb8bb3be33a6b13d6acdbcd839eac 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTriaAccessor_3_010_00_011_00_01spacedim_01_4.html 85b87355ce9eecabceb084eb0f45371eb95e7baa0803f81a52e91ca5c6c2b011 2
@@ -12559 +12559 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTriaAccessor_3_010_00_01dim_00_01spacedim_01_4.html e73d6dfc4f3bff59f8ed0d156b459d44d2376701738d1f4bc5ff998bf047873d 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTriaAccessor_3_010_00_01dim_00_01spacedim_01_4.html 20f44b2f19e51b38d1415a179793c138c1f410671bb04caa82aa4bb9b6667126 2
@@ -12571 +12571 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTriangulation.html fd6410839ad9d728aeb26540bbe51fdcd038aa2db2069bed24c673036e7cc348 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTriangulation.html f7b7fc7b5b19a14a0847f84fcd3b14b78aefe360845cca40b00e2108fc14a7a2 2
@@ -12578 +12578 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1BlockSparseMatrix.html a2ddf4978be9cbb44e38043c4d90490d37a427263e69a44a166819c7b016f120 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1BlockSparseMatrix.html ed61ad2738b2e397d0b8fdf87cd73e80eb1c23b562ce382832b48ef989616ed6 2
@@ -12584 +12584 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1MPI_1_1BlockVector.html 93730f26793a972aadc49eb9599cb2f1207e9daee99f0619d34b51eee310e673 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1MPI_1_1BlockVector.html e3ad24afbb37c326c3f928184366bffeec23694e48ad113a50006732f8706d63 2
@@ -12587 +12587 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1MPI_1_1Vector.html 7e9530097f44f5a48e92c9ef046fa66b7cf18e32aef229a218c79e9da7d4adb9 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1MPI_1_1Vector.html 44bb2f3e936913576edf14d4d369f9ef9c68d654ab5b71749c947b12e54a22b0 2
@@ -12590 +12590 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1NOXSolver.html 74bfaa915cb784c49f81b37ec5fd1dc57f1ffe944f4e51ac5d577462100bf08d 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1NOXSolver.html 8f946dee3c3d103a515ca300894d241c17dae0e611d9a0e2ea79f2cb7e928327 2
@@ -12658 +12658 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1SparseMatrix.html 72112263dac6f4743b18128618ed5354955841439f2312813650d4622651307e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1SparseMatrix.html 1542b3382914419eacfd1697289b777fb2f4e0bbfde536c03c5f0ad46a118922 2
@@ -12677 +12677 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1SparsityPattern.html cc0ce26dc5d206cce3b4a99dc1cad0ec316dcf954495c6abd96a1ffff4ad8ce5 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1SparsityPattern.html e456c9b3b2582e968a69a4eca678ed24af84b28d79420e0f685cef4e626ffdd6 2
@@ -12726 +12726 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classUtilities_1_1MPI_1_1Partitioner.html 75e6e1865b34e9d521f7991d67247f3e0570e888bee27ab445d53f05e4cfee69 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classUtilities_1_1MPI_1_1Partitioner.html a98f805e3ab09a7071be1db5bff532b918caa5f0ddae529ea824d1e519978df9 2
@@ -12729 +12729 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classUtilities_1_1MPI_1_1ProcessGrid.html 0f53f4e762c3bdce173c3bad4ff4248a2c4f47a3d0c678a4b8adf83f12a20e08 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classUtilities_1_1MPI_1_1ProcessGrid.html a4a21f40bb7939f50bfcac13c5a738cebf07c96cbbc11cd8db4b36e58d1cf48a 2
@@ -12741 +12741 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classVector.html df090b126322c358a2a2f14ada718e37b5e51ebd1dc8575bee7592bbbcbfae3a 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classVector.html 5d4818ef9401d87664487284b52e2685ba8c3cf388d8f26d93a8b022da0a6d5a 2
@@ -12810 +12810 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classhp_1_1FECollection.html b2cfece9f306ef26a6d9e2fd1493982ab74050fb74bca7fc9a6017f7affbf262 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classhp_1_1FECollection.html 255ea33900ede4e6b3c79a9b0486610332076fdc82277013f8064dea6adbf498 2
@@ -12932 +12932 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classinternal_1_1MappingQImplementation_1_1InverseQuadraticApproximation.html 557abed3d0c03bc8c15291a71e112c3e6bfb57a98984cc783f8f40690de69461 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classinternal_1_1MappingQImplementation_1_1InverseQuadraticApproximation.html fb653d56ff7ff22a7bb15d6ab8b67294526e46af1899d38eb5c46e1d1519de03 2
@@ -13005 +13005 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1DistributedTriangulationBase.html 20cbbbaa6b477ef4ea0227ef01021e8257be25fdd80d3b5b46a346183520113b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1DistributedTriangulationBase.html 7cf337d165eae4f42aa94bdadbea36ae86c3dfd4a21e4277f1a73979cbb94c20 2
@@ -13010 +13010 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1TriangulationBase.html 6aad91063ba3ff738634e63dfe2181af3911c1e8c91e558274ffc09c0094b5ba 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1TriangulationBase.html 3fb2940f87c46407abb9ae5f88f3001f270046d5b7a9bb23e4e60e3e56eba305 2
@@ -13023 +13023 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1distributed_1_1Triangulation.html a3e586f6ed044019d6df5abe08aec87f24b6bfbd0c638942397f8abd48438a14 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1distributed_1_1Triangulation.html 2627acd8b9e29ae7a801642ebed59214025b01ec83079d0a3b7957e42d101fb5 2
@@ -13025 +13025 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1distributed_1_1Triangulation_3_011_00_01spacedim_01_4.html 66d110ff4cae014bca7d8e44285b5e57f899ae9d8f0566d63058ce76a05c7444 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1distributed_1_1Triangulation_3_011_00_01spacedim_01_4.html b0e626aadc2fe4c4166df1434fc9f6f217cc219039e249510c9da73f8156cda6 2
@@ -13032 +13032 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1fullydistributed_1_1Triangulation.html 006fb5611f4aa86359e7f0ce47a17f753994c140e8ed2c84bb4e4248938cef46 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1fullydistributed_1_1Triangulation.html f41f4a9b5890ba23179a9e6a1034534543b32237f10cfa61a0a7d9e8beb0fa39 2
@@ -13037 +13037 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1shared_1_1Triangulation.html 832cf8558c8d2299387bbb46990511f9993dea9aa9f6698815d0c18ba7d76269 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1shared_1_1Triangulation.html 1e0b528377120a86f68f4648c76464cb8248db374c24b6be339db14fe82e06d6 2
@@ -13213 +13213 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/deprecated.html 2b45305b035db6878e633fbd47523f5438dcb9e79945f7139a556ebc88a60cab 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/deprecated.html 9014639ad20a5fe9a555e7d19a31a3af1b37855e550e89abc85e9aac442ca253 2
@@ -13218 +13218 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/derivative__form_8h.html 71e81765a98024dfa149a60ca145dc7a9fca66b68f2733fe3ce81959173e47d2 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/derivative__form_8h.html 584a2df8d714a4995e25d1574e5b717d581e98113f60ddd7c8488c511894818c 2
@@ -13681 +13681 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/doxygen_crawl.html a576bb6996cdd1185e110656261845c41f6de67a5a766592a4afa4163b43cb4a 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/doxygen_crawl.html a87a6ea7fdefac7d048f853d4baba7a53b5da9829a16c0cc594da9676033d31e 2
@@ -14351 +14351 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/grid__tools_8h_source.html 164582b635f4f06f12dd4b57e9cb22fba441098102ea8f89ba68904e8efb5ed4 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/grid__tools_8h_source.html 47f601766695ca7452c5af37ad5daaa5b6ef332fa44538972073c50c5733590e 2
@@ -14366 +14366 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/group__CPP11.html 47e4e103b4449352634293bc2cfe6acc59f3d6bdf6253210ea21a0595115782b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/group__CPP11.html c89a7abcd95f68b857cf43849a4abb6c5f6d9d1e6523bf93df30406cd99470ab 2
@@ -14369 +14369 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/group__Concepts.html 2cca334bddf268b8f62e60d4f0cef91f744f84f7180a43073e52e14e6f96cc28 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/group__Concepts.html 0db63910a29b8fbf33df55ac9b131254e95897cabddb7338410c888a8e8a7055 2
@@ -14371 +14371 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/group__Exceptions.html 67a67de01b198bad16e249d6e27560a43591edbc74726929a1ae0c57f5dfd187 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/group__Exceptions.html c4a5664e41f3d85d4d8fe30c4e9e309555c9d910e262877c26f0af25ad80a77d 2
@@ -14383 +14383 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/group__LAOperators.html 3ed8a5bc8fa10c59d9cb6a5d01b3b274dd94ccc8543bcb37d45d911105bc265a 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/group__LAOperators.html fdd8fa21e36cf931facba2cc44ad52746e1327a79bdd0c1c9c1bcb35abec0d97 2
@@ -14411 +14411 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/group__UpdateFlags.html 61a24342e263df221a15f94207a276d9b5e22f6a6b95d4e979d36dbaf8617daf 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/group__UpdateFlags.html b5dc8102a277089c67aa18cc7d7166bac0c90990504b44fe8ccc622bf9010af1 2
@@ -14416 +14416 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/group__auto__symb__diff.html 720fb844ad6a3676d54ac2b5bf5fed1dea9d02daedced1cc0c83a01c95202093 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/group__auto__symb__diff.html 5535a54a323a9a51f44c1fd3adb925a2234ab055bd9dadb308d5fa57982dba69 2
@@ -14418 +14418 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/group__constraints.html e0bd74a0e8d80549090f56f4427b96e9d6f81d0e3457cd30bed906a5c3d134fc 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/group__constraints.html 093b8bfc6e050280fcdc92615d2b4b6a94d07a6f6f311302f1a39ebc5c89c060 2
@@ -14428 +14428 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/group__feaccess.html beb69c29dce3ff961b88d107d1b4909d61a412eeab483ed6fccf352ab512766b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/group__feaccess.html 1f587589da5a12586afebe8112cbca43d96f0b024ba329a0f8d9dfd068fcd95b 2
@@ -14442 +14442 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/group__hpcollection.html 933e985c61ef84af1ff0ce73eabe5c7c96854d47aadfd899eef9f3d774f8cdae 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/group__hpcollection.html 1f72f1cf397bdb97fc4cfedfd88410678843fc69d06b4a4f041e1407e3b1df80 2
@@ -14446 +14446 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/group__manifold.html 77197961b99c36ffb3686a18ce19590fbcd0d8e26213189f3d82a0f6656130ff 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/group__manifold.html 7d78481e8e7587e5c2e9d041214cbfe828e84c73640202b3c4de9d6acd2cd3a3 2
@@ -14448 +14448 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/group__mapping.html 940bbd1eaba1dbe5ebc53936fec97ffa4662db95a449534016d3beabbbbfe403 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/group__mapping.html e9beaed29ba53587348f65ed7e884ea8efb39cc8554d0addaf04b285a911a2fd 2
@@ -14459 +14459 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/group__reordering.html 1c62c958ab09cee8fbb999e1a3d49029d663496c1c6de1f4cec2a61480a60531 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/group__reordering.html d1c1d718f4a88573815abbebc9aecbbb752ec5575c6f9559b7cd3d67a6102d27 2
@@ -14464 +14464 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/group__threads.html 68bda27584b0ac107f220c46f32da6c525594303e2acc2a58bb05aa41492f481 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/group__threads.html abadb726f5de5c5c0598274e89a7c59a980f3c8df0027be12af8930ab36c031d 2
@@ -14468 +14468 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/group__vector__valued.html e66e9c8063fce10b5e917af372c037e3f9dc0b9d3c59487e6612074d088c1ab3 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/group__vector__valued.html 0a305245f37f4f26bf1984376a696b7b146a9242007bc7e0db9fcd945554fbe8 2
@@ -14561 +14561 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/index.html 41313e1943d3fad12b5d2744be5a68adefc4ba856e82d100cc6e48b82504183e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/index.html a1069dd00c28558b1ccd41777a623434f791e8b1e0fb028d18adb4c14639308f 2
@@ -14564 +14564 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/index__set_8h.html 28296ff5b3901efe295c249671ecc5ca422a1fcd9bf86d8f2b1fa5d1acaf0101 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/index__set_8h.html f7b3700a69ecfb2da0dd19de5ef67e0b4825a1366db40c0770e023a25e86199a 2
@@ -14899,2 +14899,2 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceAdaptationStrategies_1_1Coarsening.html 4d55029e440b6e90ff84d11861abed47381d961f8db1276834a71c121d6497ad 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceAdaptationStrategies_1_1Refinement.html d6e16dd04aa5c8adb24d43c6c39d8374caecc37c62019e2f64ea4a9d33d7b63a 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceAdaptationStrategies_1_1Coarsening.html dfa4f9efb5b3851c6e81b91e76f94f0f2ad7720aa6a2550013a98c353109c4f0 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceAdaptationStrategies_1_1Refinement.html d08ab0985806590c0a2ad9db8f6258240e1d3848bc149a7d17c0cb15df839542 2
@@ -14915,2 +14915,2 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDataComponentInterpretation.html 616460ac8a4cd3953d8bfe4932d24fac9bd0b29460ebfc0305db0efbc30597dd 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDataOutBase.html ae11cebdee4adda7452e5032e6a24feaa1ba6a5c717f028aa0533b41072968e4 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDataComponentInterpretation.html 1f655b55e48810d2727287413654162997f4ec9210b0349ff1bc50ab911bd718 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDataOutBase.html f672614fdc1adb21bd367cfd9def8201f30dc37777eb44797acf17a5e8cb125f 2
@@ -14920 +14920 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDerivativeApproximation.html 486ef6f47e5402f788e4845149124238c5a079d16e24ae509fbb96d4884e4b11 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDerivativeApproximation.html 2be08b2fa3e2edbc41bbbf6798050af4f23ba1466c8213e9b1b4567472bddf49 2
@@ -14926 +14926 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDifferentiation_1_1SD.html a759597cd89f3786c2f797efb601c38a1f9acf31f99f99ac636abac060137da1 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDifferentiation_1_1SD.html 4e62c4329b6414a3be08dfc2853c25bd0ba6f7b9c9ddb3c997e55ef3ad86b6bb 2
@@ -14931 +14931 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDoFRenumbering.html f34ab4a576e3fece9fd5be9dce2172b6d28e6fc5bcafc976c5f21cb02cd734c3 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDoFRenumbering.html d799e3df85b4a8e512913b614a1a2bfb98c697e481e9308f18dffe9d33081171 2
@@ -14936 +14936 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDoFTools.html 99276de4b462df4e5a22f0e1aa01e578fcae57402e325c20b956267bc636948e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDoFTools.html 2ae39b275e7ac9d6e5bc35f86fe862e68615d567bbdb8843b76f6189497dce4a 2
@@ -14944,3 +14944,3 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFESeries.html a39989ee5932ee10592691c88dccbe0e4e7eedfae1e13f5c0ff645c1610856a9 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFETools.html b6ec1cf207b14bfbc171a6af1d12800ac9cbf67c18abcede7909679bf8e77a92 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFETools_1_1Compositing.html beae6ef5524a06d442c316453e82dc2d7baddf701cc28dc7ccc6af4cd8911da9 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFESeries.html 4fb880a4eb6b2cf6f9cb534e168f573d8a3808d42c3779b4f249f398685efae3 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFETools.html c9b5d884d88501d4a78cdb70912810c8898fac9c19c527cc027dbd51cdd0c3f7 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFETools_1_1Compositing.html 2ab80bc9b2db201c70b30b2bbaed7d741dea10537068d4a03ce5bc6e01199415 2
@@ -14952 +14952 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFunctionTools.html ca790226c0b73ae95f5705c6cd21562eb05ae6f659b3d02b9bc39d5480da16c9 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFunctionTools.html 6128467bcffc06de7b8a8ee07b311fe8c91fb513e5d54fbe21c8a14bb4431c27 2
@@ -14960 +14960 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGraphColoring.html 83879eb0f57bff25fe9aabe5f297abfc9e2a611d8d8ef4a0deb96c4fd624aa30 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGraphColoring.html 3df6561f76f472e1a54c9860693111ac77bb5825b6a62bc3b87ef536e44ef04c 2
@@ -14962 +14962 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGridGenerator.html ad6428fba14c11a504beed0c8b4ab04da3a31ad2125e76397ada6c4dcdd81655 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGridGenerator.html ff9e142ab5a298ea4253cea8d4f8d921d813cfacada531a36abacd279af86244 2
@@ -14965,2 +14965,2 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGridRefinement.html 77c8ac12e1e1cd69fa15d7ce65cb8946b42aa71da3ad0130b4b911a53ea7b174 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGridTools.html 2fb0d7e68ffd15b7ad4e47b9d2b8f2f90babdc6a70bf69d6c0e8b514db6df65f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGridRefinement.html 6368c6c20e30d51f7ed02a5a24050275fef155b39c86a7e0b2ddedb101b131ae 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGridTools.html 7c26dcd7bd5945b74e286973698c0ffd28fd203393376304a648330639bafa5b 2
@@ -14989,8 +14989,8 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators.html 39e37b2a2c64eb7fd3f5b087c4ff2c3df7445e699e3fbbf69f5655689dca5cbd 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Advection.html 91c0b461a52f667b93904391faa5155a3544f3791a55e20bfbd5f932f565b541 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Divergence.html 264d813e99ae7d4ed041576c396f34eb7a84479e1710b3dc81bb65fc256b43ca 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Elasticity.html 124e2a76e86921f7d7f45b50da80ce29c02e96d740e86d0f5468b1c784ac2037 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1GradDiv.html 8a3a966b9c8b398de62cbdbb9476755c02a53c1cdd35f45b6c566f97940b403a 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1L2.html e2d0b6213bd5d88ce6e845636ffdd4873f694d46575f531a03a9e94f4aad2585 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Laplace.html 97390f80e16ddf796fea92b887fc85c2e31c9b2fbb42fee60252f698219c28e0 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Maxwell.html c9091829060c46cc31e1e3cc666593426d741d3764aee18592012953ff91941e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators.html 33e2e7c4d16b0b01aa1c6536e948af651b3a41d892946279889f5cef00aaca9b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Advection.html 9f3e0db11fa9452d1a16e3bac573c120f4b0309b1c82bdcb445dc1c78aeeef6e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Divergence.html ca8d5f2b91985f783003af7deddd0b859cc238550fd9d90c6e41d0c5e28ff3a6 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Elasticity.html 5fe8c7a4197ddcd59f546a868365fb305917e80fe6e86c8e5bbd6f9deeaa5e60 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1GradDiv.html 5fbd6347a6b8c3bf7be3d2e0418dce3df31f78e4a658a10f41a6fc5d3a0e2999 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1L2.html f1c59ad7653bcf97e46d32b062a87be5b00ff2b65d1178ba73d523c825112b8a 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Laplace.html db202d8e145acce946f36500f151701a98dea8df972551ec07b68b4fc493c97c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Maxwell.html 3ab75d380f8773e103e3cf526e7e98bf5159447f2b60267df943b907c867c095 2
@@ -15002 +15002 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceMatrixCreator.html 55ab72051cfbc2dd7eda3343646af857aae697758472c80fde7f9412f1589ca4 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceMatrixCreator.html ed992db20a601b4cdaf881e4dcff35e9c99b2bb4df2a0d0b46a6d0d0ddd5ba58 2
@@ -15016 +15016 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceNonMatching.html ab34678bc1ad1152cacfe79102c0b61415b1a34ed288d24e73f5e5bd5066c295 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceNonMatching.html c766d840e917fe2f8e46dd323fa00ef4e1cef5fdb8e9b08965d54e8096ab963a 2
@@ -15020 +15020 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceNonMatching_1_1internal_1_1QuadratureGeneratorImplementation.html 8d54dd4fa9060a0340539a49900f40093574b3ff624c9c13ff9554f68b855ab3 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceNonMatching_1_1internal_1_1QuadratureGeneratorImplementation.html 9230accaedf38e5cf0f7ac2a3569a27d7dac557684c715f23fe84e7c40b12ebf 2
@@ -15029 +15029 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceParticles_1_1Utilities.html 7d001221aca6c5de9ae515419e32f3c20360afde8e043b0bba0c06a748b56512 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceParticles_1_1Utilities.html 29b355675d56e1b1e4754c6932b9c61d617de4171f7aebc75a421915c5047f7f 2
@@ -15037 +15037 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Elasticity_1_1Kinematics.html 18df4ecd197c858fa2b7534535d890c11d73fb6b334c2a37437d0fdea71633d4 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Elasticity_1_1Kinematics.html 05dc68b33bc8487e3377b450c1a7ed2a285ff8c8e850c129bdfabbe4525492dd 2
@@ -15039,7 +15039,7 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Notation_1_1Kelvin.html 8a00c4724d13d4319ec43f957d1cef68ee13e3b39f7d0f0db7dd0f8fa7f264e3 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations.html 77ecb16b7ab352d20125538a8c81e6ded567783d813be3e86c6f06491d69c57d 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Contravariant.html 8dc10c38b3861fd4f2f5ef614b0cbd3e24b3b52c7b8f9762399bee635737dd8d 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Covariant.html 7ea48f7d48bc3d87c03117874f07780205b7143f99be1845e7574277f202df0f 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Piola.html 91a59aef9388b331457b53f88db5e741bb8033947a1dd8f503dc94986bf96ac3 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Rotations.html 744dd3460b91696b474a2a4aad6bc1e7cdeb736af3b8fd6e9d99793e03b68a9a 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1VectorRelations.html 3e39c0c6e5b3fd26db395c779622132387ad76ee24229d1f2983aaae474d2e5d 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Notation_1_1Kelvin.html 3724ec9e9362e38b2446e0ccf6bcd6b89c552403e4627d77ea3aa1508aba6344 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations.html a36b8665158efe66b6f927c2e8610c7b64614b10bb728ad62d6fcbb180594a3c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Contravariant.html 2f14413ae1a5ecffe12f6f6e1e425cbd50cbd31dc8ad12d95940bb759ac67eaa 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Covariant.html fdac09aa9f25228985f6ab2fd225162126af0a4c048241e37b48a2eb821cf008 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Piola.html 0252dcd979df8e5b39258f56c255a474add8929a6f28f07a0cfd2cdcbcea4a46 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Rotations.html a819d3a08a753669e038342063607b8ce868eb1e9585c7a5a9e63d59cf0aa605 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1VectorRelations.html 61d6ad379a2d0bbc9cc3463a4f7f66a854b3cc7b6cbadfc3e5434adba3c8c094 2
@@ -15053,2 +15053,2 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSLEPcWrappers.html 7472179f7c18ac4d9ea8c7e5f9c2d54998b7ae1adae54bf2577eaafc08aa460e 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSUNDIALS.html 01ba175258e52234c5487c1b39f216b88aaf7b2d402e692a728ac463c661ad59 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSLEPcWrappers.html c50d96aa59db576898c8c05ba1984c056eadfeac6a203a0aa21c102aaae1e4eb 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSUNDIALS.html e0481e41b256f975a41a778d29f53f26a5615dc2d9558324af23f67fa0f624fb 2
@@ -15058,2 +15058,2 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSmoothnessEstimator_1_1Fourier.html 9c8255f45676b2d7efc0974ec0e2478e42d36b89fce159e588c92ae86a47f690 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSmoothnessEstimator_1_1Legendre.html 4fe2c275980c34968f13c49b9e3dc7f32ffa9ad0bd0173f4030a08134b6042a6 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSmoothnessEstimator_1_1Fourier.html 9eb4448576d242bc92b18e2bd08ec687def7bd8e03f0404837532080dc0f8ab1 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSmoothnessEstimator_1_1Legendre.html a8b40f0cc1e1fb6fbb5be79e00c3a79caace05feab0ab243a4e82b41fa265906 2
@@ -15061 +15061 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSparseMatrixTools.html 1eb7df3ef256fe934f9b0c5b117262080b8491e7392693e8ce1b1b5cc7bd8c42 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSparseMatrixTools.html ec50d951dac2be06cf3d17dd0a2a889b0cf807f9afca673dabfe7a7559d4f7ee 2
@@ -15066 +15066 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceTensorAccessors.html 29219bf0ba9526a9ceec05d6d0a513eb9d9ae608b5634bd4f7aec0346cc66397 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceTensorAccessors.html 71abdbdbf61fe6d60d41aa711555c311b857fd8d157d741e4fdae4693703c4af 2
@@ -15089 +15089 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceUtilities_1_1LinearAlgebra.html 39cd0cc03fd050790482298cef89b16d8499bb44cc006cc399c05798bc09d26a 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceUtilities_1_1LinearAlgebra.html 1284128b98e9b3a6ee9b3af25a2323f7e36ff4cf395aab45546d2130648be276 2
@@ -15091 +15091 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceUtilities_1_1MPI_1_1ConsensusAlgorithms.html 3b0214d5f86ea9b0a154b9948348a03c52cf21e8f1b193ed2d1153e620b60fd6 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceUtilities_1_1MPI_1_1ConsensusAlgorithms.html a24f85f235223e4ef851c5deda07552d99c8c830f428244ccc79c48c09b0e4fe 2
@@ -15102 +15102 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceVectorTools.html 0a2dca1184772abb7ca671e29ebb48f99b167d91f0f17c05a529e910361d3ec5 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceVectorTools.html b0bca7bebc11d4cfd2797cf848522e2e38a664c78004437fee149aa5e00f8c20 2
@@ -15122,2 +15122,2 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespacehp_1_1Refinement.html 2ed1fc94c423356024694d967da709de6488d59c0ff734e30934e24299e6f12c 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceinternal.html c0f9e15445ba29aac902534fbe10f93f0ff9729d0c81f72a5df09c48476a66d9 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespacehp_1_1Refinement.html d01588fc080821a6c7962bbce5e154a0b370090a2f9bccc6a3ada053a15bcf23 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceinternal.html 43a61f57ba06979e0ebb282d1f6a8429804a0283023da8051cfd14f77252a957 2
@@ -15257 +15257 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceparallel.html ed6abfc2114495fc36628fd7bfa248da5cc916d7db38fd4d9cc828f2c3608719 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceparallel.html fe28dd45a22e8a909f5d0b3fbaccf0e7a02417a073806b0477b2347ac4489074 2
@@ -16330,5 +16330,5 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_1.html 1a3dff9930478670515dd5aef8710955e0ae379dcd682ff3365e9a57ae9098c0 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_10.html 1f506871d8b15453e70e19577f73bcd22ad459385cdbe986380441c84fa1457a 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_11.html f3b330d8630cb6d934c7e817c57c86ef2e3fcf9451894d03517cd83aae06063a 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_12.html 9209f1778a9cb3e661f34575d9b6a3e055505ff7be7299fad5b602cf2742fa64 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_12b.html 35e75d6915d57db5bfb305173a0cabdda7d871d0023b61fed889daad699de833 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_1.html c87cd1c36ad2d5905c0c2d9a7f691870ccf29ab9b5db1a993d0887c3ff5d41fd 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_10.html b65aec03ee427de8cb4c4a3d43be29146a2635773e5ff5524f5ec0cae3c65811 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_11.html ae81aceea6feacd8445ac9641ec1d53b1e2a5f02be1d332413f322247a6c08b1 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_12.html 3091f2619aad5d50db86a1d860fca252b9c926d95fb7562e21fb8d435987ff20 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_12b.html b9488a2e7333071bc39e969b4cd0afad8b4e015cc318131976640fba32518f9b 2
@@ -16336,3 +16336,3 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_14.html 1a3af43997680f73ed93a2269dfc50d278a55d82d844311a454b5946197e0b93 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_15.html 9285b7acfbc0a707ccfe01960013ce8420b371018a7d1b1b4208c57b1edd952f 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_16.html 01d04c057103576ab7519fe7681d1adea68e9e02f4861fd61be244155b50a90f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_14.html 985ad48bec533ce5a393b552e040a4fdf1cfb514905287ca0f054bd2bee4f395 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_15.html 2c9a9a5d10da44a88b04306b27e8e70208e0b3171fa6a14afec0e90e477b1532 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_16.html 9a0b7e2cd663ec73677162cd43f9357c2fea4f8f566ce338640c01e935bd25c8 2
@@ -16341,40 +16341,40 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_18.html bd0dbd51cc6b1324acf5dfe311188321b32378b46582a4794c3efa2af6eb9995 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_19.html 6bbe501280eac806146d5dc53ac2afb7e3330439233954bd6a07a0b8c0f28939 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_2.html c48a7aa98bb9755b36c6a075b5abe16bf118df379a0efe5cca49ae84f4c25085 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_20.html 7eff4749a90f640372c87692dad82b693dd37339d7e8401dc5427354a3230093 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_21.html 6b7a7584269343914cd5d4bc0e2c868555ee5cbcd57057fcebb7b6713cde22e9 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_22.html 91667a2a71a0817ae53d8c7a24ba04b3be183bddb160c9ca47dc855451417d81 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_23.html bc3cfbaf894e74bb22644d138e5f92b6b8cc10fc7394e79f7ee7280d6128767a 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_24.html 8829f0588bc54138b43684849fa9299a5faa5c73bf215a45c25899aede71e49d 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_25.html d233748819569e4629558645f6029d8750cc424aeaee222e60b1f46cfcbcc1fc 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_26.html 23118be4292e19a8c81634093576bb8f47f4b0c3e8c4bf40011a557f3a609c37 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_27.html 694c73f9e34f738afd58c696d942da21aa48a49240581fe56c3df0bdc3419594 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_28.html 8fab060ccaa8860c95497218f09aa95bc6f9b1d85d1a322b46225db75f87c2a0 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_29.html 7a1c757b0984321874932ceb6420c7f2b4cb565d8d07e2144c70e26fc05fe463 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_3.html 5ae95251f05d6b581bbfcfce7db1f0cdf0d43e550e416758b96118500e6d8d2d 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_30.html 6dce30bdcbe0edb8a17d124bb449eeaf0d0045dc915368fb74ab7fe315b58b4c 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_31.html 4808e5e3bb517a7e92e1e95bef46c4aa126198e89dce603e8b02101bf9af4f08 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_32.html ea2afe4a9951ed16fb5538890c666c7d710e273669bf2faed7581597df763446 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_33.html 7c4c046c44f10f0535add28d0bc24f47fb62e597fa670b5debc4988a1ef93583 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_34.html 9157bdf8028660ff23ca33476972cf09b4e7099a1e780bca86553bdd0aae229a 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_35.html ef4ddafbf5e86521e82d0b49fc893d53d1305fbb4fa1b6be45c5c87de3be9e2e 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_36.html b939e50ba35614ed24fc6daa10b9fe955ceb2d80ee7d458289a12bca0524d800 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_37.html 8917b810648e5f5529c2bcfcfc7bcf2cf20c7907707aaa3b8baf696e702276b1 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_38.html b15b5e6c78c371b3abff5132dfee3a6d2dda627fddafbf33cd444ab5f2ece961 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_39.html a2c504a869985b152b1f479603e4d44e8866baa634787dd9e8ee1aa1b310182b 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_4.html 1b65f26781012eb3ba1d43f3ff78307cc9ed0794dc4d14f0f49814cac16573ce 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_40.html 619de046b387979dcfe1b8fd4e1aaf50cfcdd1881f648c1e77ba3ab5c04d0e43 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_41.html f28fe7f72e470024fd02bd87fea6073af1fff035a162c9a3a787db5a7dd01e8e 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_42.html 59550c8e3a105149b13722274075a887b628602b527f8914fa45c028decf6fd1 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_43.html c3f713662faf1076fc358fe188317a8cf78d42c0dcbf5a283d8e6f0131a913e2 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_44.html 5fb81c83e0c7c7b7cb42394296e20629c5117f11dbbfbfd29863e51a54611f5a 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_45.html 18eb6c253c29125a4e38ffb239c1c7a51ddf4c9279ce062b20d403dd55e392e5 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_46.html 59596736d568f23648fdf3b2241a0a34449ccc05e3f2592b6e4a9af1f661b912 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_47.html d460e43571d5a5a8a38eeb75555a436aab87c1ff2b29949babce53923110dc17 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_48.html a3755e4dd6f04dc7d8599a3331f3d631d7a50f55b718570a324402c8db0c646c 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_49.html 2b23670d54bea8e67101271dc8f9cf3a021c7868b1b74c0b26c424e7cb3836fb 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_5.html 3d2f377fa4913c67d1959934f36ff287e7a2c73d923369d35174c0dfc80ade28 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_50.html e8c27c3d6d908f2899d2a932af2b8612e8f85e674620970703c5c77e1e957417 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_51.html 2f187f78763c2ba23f3278b5db0a54d85d1d4cc3ac65ee80cde4155bc05fe642 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_52.html 3f8f090343944df92c68944b62ff2e7352d1c6ef624fbdef2494f0373126c080 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_53.html 9b0d184895c6694232aa9193c2a017cd7c953e752086ddb8b2ababfcc4ab0b30 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_18.html c106d7c79a2646898080637d6e7d62d9dbb96bc1a8012dd06b967e54532f054c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_19.html e485fcdee498919e503288db83dd42e4c418605a3b15deb00880cb178bc49621 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_2.html fb01f5506837ba02900a23abd332e26b115962a2a3dc0e97cdb37f4ffc7f902a 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_20.html 84109b84d204a42dab0ae068c0fb3050337813cd909431536d8f36edbe9c3861 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_21.html fe3c501fd0f8ef303080190f5edc9444d8f0723ec41a56ca14458b0dd6e316c7 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_22.html 125b9fc26404f6258892cf6c9535809de5cf64cc03cd38d7fee33df51093fb30 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_23.html f261b0612a30580cd5a35c60e9a4e14c17fa5fb815b90ef9d2e00fe97eb7c5dd 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_24.html 412b978714c473fbb8ee26988c229ff04198d3f1a344f30b866c91fba036dc59 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_25.html 2e4d4a9c059b254e6c264026cbf15fe6cb9280022b446c609f326ae03e17206e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_26.html a2a7165034bc10e68eebf1261e9f8dfa8ec6e15945420c15056a686d0229a2ce 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_27.html babd67ddc3599346483e4982dfbb57ae207ceab788de3329de42eb561dbb2292 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_28.html eb5fc560bc25fbe889bd38f8bc7412ba4e92fe9fdeebbc9e468dbc2ea1a0725d 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_29.html f80d42ac62ce8a670939b91955e2539e8589bae9f835a028cfc9c535364485a9 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_3.html 02dbf1ef07080a7458e6179596cb0bb5783b3e94eaf7e313a614ef8d6564ea4d 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_30.html eecfd6ec1b1d6c216572285cdbe7a769ccc6d7fa7a7d606d816ae3da0ffdf426 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_31.html d6ccf7f3202beaafa13b38bbd3d1c415e12915b15dbacf3b79eef84ea18a96b3 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_32.html f8c791fe08394168e650fab8f2433ea1859ee144a119423ecf6ee2f5f6b0d787 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_33.html 44eec43779398390ddfd53a1da295a4b2e1193d2d1af16b4e524db3d51bdbf14 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_34.html 386650fe72dc48dd3dd15328d4bcdb7328b57c19dcad1a78df25cbd4eaab0f6d 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_35.html 10942d587d7ef4bb06611f9a2618477b0ae224e00045460f7b0ecbe5f57ab12b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_36.html 680ac711cf0d29d36d179add34428ce269c680ad4b4dcdde9270641a8c1d9edd 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_37.html 9f75c743bbbe90ed3486686f53d69b3885f5c802e73abfc2b321f2a6e774f0ae 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_38.html a7dc69917784b29cc3ad15c3b1384f170c08e1c199a7f4912014403d2079586d 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_39.html 93e3fad41312b68d1a3c5d6714e4053b2fdf2d00f3361c709a8a0ae31844822c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_4.html 684d20e1c6e9fe30a248cfe6506cb9d2a7ec83e9a632494ed7efebab8737e34b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_40.html fd0b1c15a123c7ac7479a4071e4f6c382eeab9769f1318bcebb2bca682b0f8b0 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_41.html d719128c4d4ca193bb8ed01d0b4759419f1ff8a8327a3675052ed20ebd6cf4db 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_42.html 8352c6e93f284f7f71a51a8f887c35ee513f09d8d5ea1b12b29cf0b759070cb7 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_43.html 19a0507a01ae89b9e05b31b6dcf2191b56b724ea40518fbce1e4cafafe7c74a6 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_44.html ca103b2329ea4f211034d058c17e289a1eabe79f5f220f7e66cd27d17bc66029 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_45.html 87ef020733bf1d31be402ba75d9e882d0ab5fa5270aab47ae0af95391ed0431f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_46.html 581b5cc84e00d58893e99cd356aa5124c571f93bf36d9db4105c4adfb3bed5d6 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_47.html 218cbced1283aee10530dbf7a4c5a0b80c169b220662324aab26e22b63adf44a 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_48.html 13d4889dc3859149e304c617830f5f9c9ab321b041ffe12b8ddd5b4e611e30f2 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_49.html 14e6cfc7c42c6dff66130ef99ec23f17a0a21d21e1a0e42b3e5dab7494e0b224 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_5.html b224844149abe0b5b89b0ae3714342f9067703c2cdbd6ea78dd0e2874aa15734 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_50.html 3930e12927202477ca3d761e60be271e5d3c78960f8daeebad585d29612764b6 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_51.html c32184bd54f49c436d8450e5cf751405e563a0d19e124e73716722f46b694cd6 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_52.html 62fd01a3ffa06acd6e7a76e5d1fb5fd858b3751fe66c2e31fd496453694b3e7b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_53.html b6b8e4ae99595edf11434342958520ef7e3ff797ba2279f84c54cd289958c93a 2
@@ -16382,31 +16382,31 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_55.html 0c00872505f35c7c670ac566288a72cd982489b2adf190dc1af3fb5cba926408 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_56.html df6c518d6ecf8ab8d4e1c9847beb94ed7b9bdac5000e3d1a9ed431f06059f4b6 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_57.html d0cf70b83ca339807e55982847bd7c103c3b43e92f8be3b0bca0deb049e55603 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_58.html 8e65d66a9af3ef33df88429e9e17299789e168bf52e59db3046e60e694f3d499 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_59.html 614cd4532cfd1faefea5287c1ec16318f0492800cf6077cc691ba5cf5c2bea27 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_6.html aac9e92d11b3492d5c49632302e1a1bc69d8e606f45080a0e7d6fe5a7dede261 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_60.html 48677c8f79ff4835c04caac4b2226750d7f81c019a91d10509c5bdf71d9930de 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_61.html 5dfbf01a9b53981f00fd032a4ba5cfef9a28e8788f9da5179116e61d525a0bb5 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_62.html 5df95bda70102725f4d6be108af2273041a334a5f6fd5d30d264ef04d8d200b1 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_63.html 7313b4c069faad538d915fa9f6300ee1e6c940093208df903ecef6c055affd40 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_64.html 7b01009a11194efc7f20ccdc1d3e8458adb9c93eff2eca0d62c57ffa54e0944e 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_65.html ce8b7f2065b4fac978fda765a53625677dda16f0a497a85b62a3d8a8ee6dc4a1 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_66.html 8214233817342c692901981d13dee94d958e780c24e13b094ed18507fd5f8716 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_67.html 940e74ea8f7a094812c127871d8e36aa3725e790d113aa6311d72b5f6cc3d343 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_68.html c76a35fc7633a354300acef26d2734613b1b63d7f17856715886b709983afe51 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_69.html 2f355ff2b93b7feb1de214a90aa4bbc7a70eee7b3bf0103f528b159eaebe942b 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_7.html b2f228df1c0cdfc928abaa75bca5292e710483ebedd1f4a26e3119969be7f4c4 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_70.html 9445f9e2d1e8e4b8cfc97958127cf41daece266ff1d820721933e709dcd98104 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_71.html f1fa548b757f0bd8c2d7c7b0f68d4485e72e7927037ca47ecc87d1f1e26acc40 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_72.html 09dd5aad8e09d0b0d2a3cb00136df2ea5573736597892bce7c70dbc933587f77 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_74.html 8423872901848571caa25856aabcb62bbf5f5d9fa5dadfdcb0a41d8525da90ec 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_75.html e5ac5cc5af06cf2fef95c539ed0986d3228bb1f18f857715a46c48ed1aaf8373 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_76.html dd070de19533bfe74acefc0d101549170ef6066f123352b8d192401cff727696 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_77.html 83578257a3cca7f34417b4d2df5458877a4b4da6387ee8eb10fab1a9d294a707 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_78.html 97617d6bd1a68d9db466e1a897f8eadf3790b09e579d0b1f81331a99de0e641e 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_79.html f3923ad108227433eb828734a3a74123c9f1bca1067dbc5b04d371c1402976a8 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_8.html 93d3cee5b3f36362f9f268394c2f0bbd9d57cad663529022c9fdf894c92461bf 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_81.html 5d8c58336af9b2be1c4bb167debabc5fc634b8b11ac110352dedd5f7eeeee093 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_82.html 95e1b454cbc8f81487ad8847ecc7ac2e1485ad4fcddec12823adcc318d00f423 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_85.html 17d109ca493aa088dc8ec32bcb13c6ddf4b48e3b92a51166e2a2f4b07dc6e2cb 2
-/usr/share/doc/packages/dealii/doxygen/deal.II/step_9.html f1192fc65a7f1eb5c25ead292cc82886a5a1b93208a3fd922b8fb7c456cc81a0 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_55.html 01a8dd73c1f4da2abf5f21adefe042477cd4251df435ef04e6005a9a5fd8963e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_56.html 5c9ecc1a96282ea05d03b560dbfe7def8753079ca0c149e47361345562163a61 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_57.html d056c5e71abb25efd27600bb26fb5109d9f276923c58f05ca5b9ea884dec85c4 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_58.html d990afcd6552257ba7d3c2d94355b1f22eb0dba484999c05ff9e5c86c4a83b13 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_59.html 59a78bc69f78311d1ec260691fe1a0b476508f44b6f9266c29ff893e5a53284e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_6.html a81666e1d12049f19be1f5d23f83824a783f234a943d6e5b2ecc8b950d78041c 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_60.html 4944e8cbf945127c4acd5ba59ad15bf72f41e45e41e0878dc5af1177464a5a28 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_61.html 18fcfdc1c417bfd61be152d428a4079b01f8e7d51c7058aea2522d3bd27d4189 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_62.html 42a84357cad3df1708b36ce16c822ca9b4cc03fe70560318aad1228095f607af 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_63.html 785aa1855ae6a990e394df2620e1a9ab1e45aba1ba209d53eb930e1c88710fc5 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_64.html 15f2f5ee78817e25cb55016bc35c2b056f7290da2ab3aaa563f0c5b581d311c4 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_65.html 9a4eca0e4fae5de5f2f2ad09d5611df3786e0976c530a8dbd7616a2e49bf117b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_66.html 2f1eb659b3628152130af800f023e71596fb62c739096d5842da3848c7902c64 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_67.html 3c0b1b761d01a5030c3a266143a627e7d41b2ff3114027fbf6299de4f6bd43a2 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_68.html 31a9a992c9c7dee1b9070f9a15421a762bb5b5c3697e9e454e7975f277cfb9e0 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_69.html a06d388d985a9331b64ca2c2e472520cd97945c8b228184020d3622de937619e 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_7.html 3b7669d35ae6457e878a7ab87d8f1b54f69c55217b78123d2de60da073b1720b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_70.html 39c4ab74c426473bcb2179ab7b1231484af144893fad35a5a3d84fa47f41fbf6 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_71.html 7f396b6dddcfd2f3506dc5bf77ed7caf16ab30eb0b7bbef6659c9e9b88c01fd9 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_72.html 147382cf3e6ebab20b9bae2d5f7dedb06ae77b988d157a67f549a1f58fce8998 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_74.html 6c39bbfff65317f3d6646c4221f79eb55f0d176ee3bdd7f50cdf7482582bb534 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_75.html ae3334f555aa2ff6a6f004e20c237aae02b523574d67f4ee16162fbea789e7b6 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_76.html b3cfc2b1c05cb4d22d4eacb77fb288944f137be8cb59e5584fcd3cb76d9c83ef 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_77.html db7168f0e8d1302e1baa9aace2fc58456834ab8ce4003723a22548150d267a10 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_78.html eddb790f183f30cd7e0378e56bbe261463b563381799645e3c34ce3c030ca3ba 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_79.html 2859116cdd79927a71829ba099fa4b6e8dcfaf198a9683a8bf4143501734695d 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_8.html 14d86987d50b68f2a070d13daacec44a8daace6015b504591ce0c2cf1f4ce32f 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_81.html fcadb98ce964e9c41d4f4425bf7741fa74dbc01854da9252687cc87ca1f362b9 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_82.html 06367770e43b3fa255158ed23f3b507810635367d02fde4f248097ee750db37b 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_85.html da0331f5f0ac8bf58a99cdd577feaa7aae73821d39ac41b041d2810127bf9cac 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/step_9.html 9f9682ba0605a3173c78531ab8b681e76d78cc2ce81e6353f1e007c1f931814b 2
@@ -16466 +16466 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structCellData.html b5e40c6e5bfd3b2214d79f08360a83dc8c4836557d17d2bbf9c6a4fdff4fefef 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structCellData.html 8bb6375e8661f0031a3bb82f32659eaffa4bfb4e79ae2f18bae19bf41c6f5ec0 2
@@ -16471 +16471 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structColorEnriched_1_1Helper.html cdcbe8611016c7991c3df21dafb71b3b7ffa3b41457b4413db7fa81cc18bd919 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structColorEnriched_1_1Helper.html 3bdfe1f6c48b61ee36e0a355d17655362932da4a10261581474c442f46b0199b 2
@@ -16522 +16522 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structDataPostprocessorInputs_1_1CommonInputs.html 967c374a6afa0a1ee9cf98c0b3ebc06189748250a9fd79cc9fead1cafd91c4a4 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structDataPostprocessorInputs_1_1CommonInputs.html 4928c6122c5f1b948e556807af29f3bebb215939bef31069368512f3a4788033 2
@@ -16528 +16528 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structDataPostprocessorInputs_1_1Vector.html 98722442c1c0e5b81ef2f1bb13133aeec8bde559d0e04c360c01e2902aeb3142 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structDataPostprocessorInputs_1_1Vector.html f0d1c096472bef8493659bb9deee084269233f60bd1ffb7714fc74c6f60aab62 2
@@ -16682 +16682 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structFEValuesViews_1_1Scalar_1_1OutputType.html 1e172ba66f0b06578da06c749ba1c067e32bb7629dac3ac023aeda4e0b4a7d07 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structFEValuesViews_1_1Scalar_1_1OutputType.html efd223e38235e0c4a351a1c1c7b718bb4be6a1e46b628d5dc66bc04529707d8d 2
@@ -16686 +16686 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structFEValuesViews_1_1SymmetricTensor_3_012_00_01dim_00_01spacedim_01_4_1_1OutputType.html 57d932be6fcf51a792f0fdba4a41ef3266460e25dfa4e1d4e6c34e311996c7ea 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structFEValuesViews_1_1SymmetricTensor_3_012_00_01dim_00_01spacedim_01_4_1_1OutputType.html aeef2b33a9363bf2b9a0e75bcaaa2d1f2563e6dc5efe8fc1a5f0f8cb25ba0f17 2
@@ -16690 +16690 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structFEValuesViews_1_1Tensor_3_012_00_01dim_00_01spacedim_01_4_1_1OutputType.html 00b55e288b0539b39b34ed03584916d8e712d1f63ca7a8ede9d64fab81e1c858 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structFEValuesViews_1_1Tensor_3_012_00_01dim_00_01spacedim_01_4_1_1OutputType.html dd93902e6703f6ebe1915f53397866174ea1c3ee355fd3862488dd696cc179c6 2
@@ -16694 +16694 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structFEValuesViews_1_1Vector_1_1OutputType.html 692b16cdbc685656f1f1ee843c333a0d4b27db4c7898842051227b3b0a7250f9 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structFEValuesViews_1_1Vector_1_1OutputType.html 8e0e98e95a0432bb5bb06a94c5c0ca3481b001730883fab967e5cb12b4770fc1 2
@@ -16704 +16704 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structGeometryInfo.html c5ec90c96769baaefc23724fb9aa71e597db1088a51ed57a854b8d7c0e646df8 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structGeometryInfo.html 2c4cc55e46c1f9dcdde1d1c0aaaa8782780b0cba6d7148505f7d60977b80239b 2
@@ -16752 +16752 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structGridTools_1_1CellDataTransferBuffer.html 67299af81682bec49f4a71b07b3a3d5f14ec368eb15ff448a4843104823914cf 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structGridTools_1_1CellDataTransferBuffer.html 168b123dc4e7f4a705d2ec8d1a4a8bc6e53acbc345fb7f44bbf658b02f5b5a92 2
@@ -16825 +16825 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structNonMatching_1_1AdditionalQGeneratorData.html 2dba0ac5e05a5157bbca3819429ffe56bcd8367de95354cd41299ecee6327db0 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structNonMatching_1_1AdditionalQGeneratorData.html 08b8bc9422b78db25ce1057a5b88ea7c5dfa7b4b9404256f4a312e0def020028 2
@@ -16829 +16829 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structNonMatching_1_1RegionUpdateFlags.html 78072fa0efd4821045ec8532ce2e0bd93035dfd1f36bee49e1091c28efbda396 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structNonMatching_1_1RegionUpdateFlags.html 3e293e6643155d7e55ddaf1816161ff7953e5fc7dfcee1e2dd7d63ca20847949 2
@@ -16833 +16833 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1HeightDirectionData.html 252eb004b8cd70ab8f25096c6fc1bf7cb5271c9a2c4bf316d66dba80240bf605 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1HeightDirectionData.html aafe027411e1bfad95d9d9dfd907ef3cb8b4f7247d291b8042df4fb25564da72 2
@@ -16974 +16974 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structProductType.html 6ba1bd2f2bdc3da8d57675bb650fb0d7f90973ea6a4bcdac03b95a61ae6f4347 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structProductType.html 8a5127c05007a27b6ecfcd5b5d0fca8fd2e3657d367d1b9d1acde8ac542bd1b4 2
@@ -17005 +17005 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structSUNDIALS_1_1SundialsPreconditioner.html 8c00e16d72e70d1c320ea8664ace8b7ccaacbc8366d5333bcda30e5c1d005c61 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structSUNDIALS_1_1SundialsPreconditioner.html 691fde1375635947f048b3a63f1bf410933a8f0a8bbe6c78dca5daf191fd4fec 2
@@ -17050 +17050 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structSynchronousIterators.html f8f4d850e244aa82070c6bfcd58f52021545b8f92d7169b769bab9d3e7b44053 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structSynchronousIterators.html 701f08433c083a03612ab584a08657ec255005f2aa2b3aace161dc174feda5f5 2
@@ -17127 +17127 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structTriangulation_1_1Signals.html 4fca73ca74cdb1530e74802c603eb3cc93b07c5be15b3a0d398d5b549ffc6e4d 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structTriangulation_1_1Signals.html 9642d2eadb09b514baa91d0bc2a5a4ff616a86e13b2b3b30cf58b6d35d6b0f57 2
@@ -17415 +17415 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structinternal_1_1MatrixFreeFunctions_1_1MappingInfoStorage.html 92db71375a04e54361c6ef93c336f983326e6d91a588259445c1fe1bc5ac80c7 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structinternal_1_1MatrixFreeFunctions_1_1MappingInfoStorage.html 804d256a2b9c7f601206106bd1d64e2e2e579c5ac7b581f714842787d950a124 2
@@ -17426 +17426 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/structinternal_1_1MatrixFreeFunctions_1_1UnivariateShapeData.html 72f04ecc0405a78c71ab362b47936b819dea10827ff45c3e3ebae90239411b35 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/structinternal_1_1MatrixFreeFunctions_1_1UnivariateShapeData.html 25f596d948ca8e25c14fcc74ff5dad8fb26572dc19599052d22f54fd2b8f728e 2
@@ -17954 +17954 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/symmetric__tensor_8h.html 5333cd1ade0a8a9e706b73160fcae4d27de9c414d216ff941c2785576c579b17 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/symmetric__tensor_8h.html 9146108d01f07f7f2f7bef1ca6eca5cf808bd23e62fb44cab60c555ea371643a 2
@@ -17958 +17958 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/synchronous__iterator_8h.html f94c25fcd1ee487f46cc72b23d9fd2f852ab424655250a563db205317ef7d950 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/synchronous__iterator_8h.html dda578d325a4090fe4d1025f7230971b0b902bba7510c3c008c98a9ef42f95c0 2
@@ -17988 +17988 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/tensor_8h.html 91fa9ce5337e933b3b6e5a91e75accd7b76e25148ebd45b42f46a00ba8f16897 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/tensor_8h.html 69d33f1306858919956cb4be629b155434c4f2530f8e6452346ec4a2033f6512 2
@@ -18050 +18050 @@
-/usr/share/doc/packages/dealii/doxygen/deal.II/todo.html 92eaf8eb695eec6698c9d0fdda08c8eca4852c4f235eeba7a2a25bc65723d31d 2
+/usr/share/doc/packages/dealii/doxygen/deal.II/todo.html 7d7141a4b98276625b76cd1808c201dbbb1fde581d9247a38ad4648642fbfa4f 2
@@ -18269 +18269 @@
-/usr/share/doc/packages/dealii/doxygen/deal.tag b5b8a96aaff22f459ffcd9350a437017aaded9d487faee76c323352298b016f4 2
+/usr/share/doc/packages/dealii/doxygen/deal.tag 27d9afd3fdc449ff1a1f09f931167a7a699b94e80c337a258aedcd6fa4af4181 2
comparing rpmtags
comparing RELEASE
comparing PROVIDES
comparing scripts
comparing filelist
comparing file checksum
creating rename script
RPM file checksum differs.
Extracting packages
/usr/share/doc/packages/dealii/doxygen/deal.II/DEALGlossary.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/DEALGlossary.html	2024-03-17 21:57:16.855070069 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/DEALGlossary.html	2024-03-17 21:57:16.863070118 +0000
@@ -103,7 +103,7 @@
 </dd>
 <dt class="glossary"><a class="anchor" id="GlossBlockLA"></a><b>Block (linear algebra)</b>  </dt>
 <dd><p class="startdd">It is often convenient to treat a matrix or vector as a collection of individual blocks. For example, in <a class="el" href="step_20.html">step-20</a> (and other tutorial programs), we want to consider the global linear system <picture><source srcset="form_57_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=b$" src="form_57.png"/></picture> in the form  </p><p class="formulaDsp">
-<picture><source srcset="form_100_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \left(\begin{array}{cc}
     M &amp; B^T \\ B &amp; 0
   \end{array}\right)
@@ -114,9 +114,9 @@
   \left(\begin{array}{cc}
     F \\ G
   \end{array}\right),
-   \end{eqnarray*}" src="form_100.png"/></picture>
+   \end{eqnarray*}" src="form_92.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U,P$" src="form_101.png"/></picture> are the values of velocity and pressure degrees of freedom, respectively, <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> is the <a class="el" href="#href_anchor">mass matrix</a> on the velocity space, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> corresponds to the negative divergence operator, and <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B^T$" src="form_103.png"/></picture> is its transpose and corresponds to the negative gradient.</p>
+<p> where <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U,P$" src="form_93.png"/></picture> are the values of velocity and pressure degrees of freedom, respectively, <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> is the <a class="el" href="#href_anchor">mass matrix</a> on the velocity space, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> corresponds to the negative divergence operator, and <picture><source srcset="form_96_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B^T$" src="form_96.png"/></picture> is its transpose and corresponds to the negative gradient.</p>
 <p class="interdd">Using such a decomposition into blocks, one can then define preconditioners that are based on the individual operators that are present in a system of equations (for example the Schur complement, in the case of <a class="el" href="step_20.html">step-20</a>), rather than the entire matrix. In essence, blocks are used to reflect the structure of a PDE system in linear algebra, in particular allowing for modular solvers for problems with multiple solution components. On the other hand, the matrix and right hand side vector can also treated as a unit, which is convenient for example during assembly of the linear system when one may not want to make a distinction between the individual components, or for an outer Krylov space solver that doesn't care about the block structure (e.g. if only the preconditioner needs the block structure).</p>
 <p class="interdd">Splitting matrices and vectors into blocks is supported by the <a class="el" href="classBlockSparseMatrix.html">BlockSparseMatrix</a>, <a class="el" href="classBlockVector.html">BlockVector</a>, and related classes. See the overview of the various linear algebra classes in the <a class="el" href="group__LAC.html">Linear algebra classes</a> module. The objects present two interfaces: one that makes the object look like a matrix or vector with global indexing operations, and one that makes the object look like a collection of sub-blocks that can be individually addressed. Depending on context, one may wish to use one or the other interface.</p>
 <p class="interdd">Typically, one defines the sub-structure of a matrix or vector by grouping the degrees of freedom that make up groups of physical quantities (for example all velocities) into individual blocks of the linear system. This is defined in more detail below in the glossary entry on <a class="el" href="#href_anchor">Block (finite element)</a>. </p>
@@ -135,7 +135,7 @@
 <div class="line">               <a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(1), 1);</div>
 </div><!-- fragment --><p> With the exception of the number of blocks, the two objects are the same for all practical purposes, however.</p>
 <p class="interdd"><em>Global degrees of freedom:</em> While we have defined blocks above in terms of the vector components of a vector-valued solution function (or, equivalently, in terms of the vector-valued finite element space), every shape function of a finite element is part of one block or another. Consequently, we can partition all degrees of freedom defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> into individual blocks. Since by default the <a class="el" href="classDoFHandler.html">DoFHandler</a> class enumerates degrees of freedom in a more or less random way, you will first want to call the <a class="el" href="namespaceDoFRenumbering.html#href_anchor">DoFRenumbering::component_wise</a> function to make sure that all degrees of freedom that correspond to a single block are enumerated consecutively.</p>
-<p class="interdd">If you do this, you naturally partition matrices and vectors into blocks as well (see <a class="el" href="#href_anchor">block (linear algebra)). In most cases, when</a> you subdivide a matrix or vector into blocks, you do so by creating one block for each block defined by the finite element (i.e. in most practical cases the <a class="el" href="classFESystem.html">FESystem</a> object). However, this needs not be so: the <a class="el" href="namespaceDoFRenumbering.html#href_anchor">DoFRenumbering::component_wise</a> function allows to group several vector components or finite element blocks into the same logical block (see, for example, the <a class="el" href="step_22.html">step-22</a> or <a class="el" href="step_31.html">step-31</a> tutorial programs, as opposed to <a class="el" href="step_20.html">step-20</a>). As a consequence, using this feature, we can achieve the same result, i.e. subdividing matrices into <picture><source srcset="form_104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_104.png"/></picture> blocks and vectors into 2 blocks, for the second way of creating a Stokes element outlined above using an extra argument as we would have using the first way of creating the Stokes element with two blocks right away.</p>
+<p class="interdd">If you do this, you naturally partition matrices and vectors into blocks as well (see <a class="el" href="#href_anchor">block (linear algebra)). In most cases, when</a> you subdivide a matrix or vector into blocks, you do so by creating one block for each block defined by the finite element (i.e. in most practical cases the <a class="el" href="classFESystem.html">FESystem</a> object). However, this needs not be so: the <a class="el" href="namespaceDoFRenumbering.html#href_anchor">DoFRenumbering::component_wise</a> function allows to group several vector components or finite element blocks into the same logical block (see, for example, the <a class="el" href="step_22.html">step-22</a> or <a class="el" href="step_31.html">step-31</a> tutorial programs, as opposed to <a class="el" href="step_20.html">step-20</a>). As a consequence, using this feature, we can achieve the same result, i.e. subdividing matrices into <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_97.png"/></picture> blocks and vectors into 2 blocks, for the second way of creating a Stokes element outlined above using an extra argument as we would have using the first way of creating the Stokes element with two blocks right away.</p>
 <p class="interdd">More information on this topic can be found in the documentation of <a class="el" href="classFESystem.html">FESystem</a>, the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> module and the tutorial programs referenced therein.</p>
 <p class="interdd"><em>Selecting blocks:</em> Many functions allow you to restrict their operation to certain vector components or blocks. For example, this is the case for the functions that interpolate boundary values: one may want to only interpolate the boundary values for the velocity block of a finite element field but not the pressure block. The way to do this is by passing a <a class="el" href="classBlockMask.html">BlockMask</a> argument to such functions, see the <a class="el" href="#href_anchor">block mask entry of this glossary</a>. </p>
 <p class="enddd"></p>
@@ -164,14 +164,14 @@
 </dd>
 <dt class="glossary"><a class="anchor" id="GlossBoundaryForm"></a><b>Boundary form</b>  </dt>
 <dd><p class="startdd">For a dim-dimensional triangulation in dim-dimensional space, the boundary form is a vector defined on faces. It is the vector product of the image of coordinate vectors on the surface of the unit cell. It is a vector normal to the surface, pointing outwards and having the length of the surface element.</p>
-<p class="interdd">A more general definition would be that (at least up to the length of this vector) it is exactly that vector that is necessary when considering integration by parts, i.e. equalities of the form  <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_\Omega \text{div} \vec \phi = -\int_{\partial\Omega} \vec n
-   \cdot \vec \phi$" src="form_105.png"/></picture>. Using this definition then also explains what this vector should be in the case of domains (and corresponding triangulations) of dimension <code>dim</code> that are embedded in a space <code>spacedim</code>: in that case, the boundary form is still a vector defined on the faces of the triangulation; it is orthogonal to all tangent directions of the boundary and within the tangent plane of the domain. Note that this is compatible with case <code>dim==spacedim</code> since there the tangent plane is the entire space <picture><source srcset="form_106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^\text{dim}$" src="form_106.png"/></picture>.</p>
+<p class="interdd">A more general definition would be that (at least up to the length of this vector) it is exactly that vector that is necessary when considering integration by parts, i.e. equalities of the form  <picture><source srcset="form_98_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_\Omega \text{div} \vec \phi = -\int_{\partial\Omega} \vec n
+   \cdot \vec \phi$" src="form_98.png"/></picture>. Using this definition then also explains what this vector should be in the case of domains (and corresponding triangulations) of dimension <code>dim</code> that are embedded in a space <code>spacedim</code>: in that case, the boundary form is still a vector defined on the faces of the triangulation; it is orthogonal to all tangent directions of the boundary and within the tangent plane of the domain. Note that this is compatible with case <code>dim==spacedim</code> since there the tangent plane is the entire space <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^\text{dim}$" src="form_99.png"/></picture>.</p>
 <p class="interdd">In either case, the length of the vector equals the determinant of the transformation of reference face to the face of the current cell. </p>
 <p class="enddd"></p>
 </dd>
 <dt class="glossary"><a class="anchor" id="GlossBoundaryIndicator"></a><b>Boundary indicator</b>  </dt>
 <dd><p class="startdd">In a <a class="el" href="classTriangulation.html">Triangulation</a> object, every part of the boundary may be associated with a unique number (of type <a class="el" href="namespacetypes.html#href_anchor">types::boundary_id</a>) that is used to determine what kinds of boundary conditions are to be applied to a particular part of a boundary. The boundary is composed of the faces of the cells and, in 3d, the edges of these faces.</p>
-<p class="interdd">By default, all boundary indicators of a mesh are zero, unless you are reading from a mesh file that specifically sets them to something different, or unless you use one of the mesh generation functions in namespace <a class="el" href="namespaceGridGenerator.html">GridGenerator</a> that have a <a class="el" href="#href_anchor">colorize</a> option. A typical piece of code that sets the boundary indicator on part of the boundary to something else would look like this, here setting the boundary indicator to 42 for all faces located at <picture><source srcset="form_107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=-1$" src="form_107.png"/></picture>: </p><div class="fragment"><div class="line"><span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;face : <a class="code hl_variable" href="p4est__wrappers_8cc.html#href_anchor">triangulation</a>.active_face_iterators())</div>
+<p class="interdd">By default, all boundary indicators of a mesh are zero, unless you are reading from a mesh file that specifically sets them to something different, or unless you use one of the mesh generation functions in namespace <a class="el" href="namespaceGridGenerator.html">GridGenerator</a> that have a <a class="el" href="#href_anchor">colorize</a> option. A typical piece of code that sets the boundary indicator on part of the boundary to something else would look like this, here setting the boundary indicator to 42 for all faces located at <picture><source srcset="form_100_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=-1$" src="form_100.png"/></picture>: </p><div class="fragment"><div class="line"><span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;face : <a class="code hl_variable" href="p4est__wrappers_8cc.html#href_anchor">triangulation</a>.active_face_iterators())</div>
 <div class="line">  if (face-&gt;at_boundary())</div>
 <div class="line">    if (face-&gt;<a class="code hl_variable" href="data__out__base_8cc.html#href_anchor">center</a>()[0] == -1)</div>
 <div class="line">      face-&gt;set_boundary_id (42);</div>
@@ -240,7 +240,7 @@
 <p class="enddd"></p>
 </dd>
 <dt class="glossary"><a class="anchor" id="GlossComponent"></a><b>Component</b>  </dt>
-<dd><p class="startdd">When considering systems of equations in which the solution is not just a single scalar function, we say that we have a <em>vector system</em> with a <em>vector-valued solution</em>. For example, the vector solution in the elasticity equation considered in <a class="el" href="step_8.html">step-8</a> is <picture><source srcset="form_108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=(u_x,u_y,u_z)^T$" src="form_108.png"/></picture> consisting of the displacements in each of the three coordinate directions. The solution then has three elements. Similarly, the 3d Stokes equation considered in <a class="el" href="step_22.html">step-22</a> has four elements: <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=(v_x,v_y,v_z,p)^T$" src="form_109.png"/></picture>. We call the elements of the vector-valued solution <em>components</em> in deal.II. To be well-posed, for the solution to have <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> components, there need to be <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> partial differential equations to describe them. This concept is discussed in great detail in the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> module.</p>
+<dd><p class="startdd">When considering systems of equations in which the solution is not just a single scalar function, we say that we have a <em>vector system</em> with a <em>vector-valued solution</em>. For example, the vector solution in the elasticity equation considered in <a class="el" href="step_8.html">step-8</a> is <picture><source srcset="form_101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=(u_x,u_y,u_z)^T$" src="form_101.png"/></picture> consisting of the displacements in each of the three coordinate directions. The solution then has three elements. Similarly, the 3d Stokes equation considered in <a class="el" href="step_22.html">step-22</a> has four elements: <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=(v_x,v_y,v_z,p)^T$" src="form_102.png"/></picture>. We call the elements of the vector-valued solution <em>components</em> in deal.II. To be well-posed, for the solution to have <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> components, there need to be <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> partial differential equations to describe them. This concept is discussed in great detail in the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> module.</p>
 <p class="interdd">In finite element programs, one frequently wants to address individual elements (components) of this vector-valued solution, or sets of components. For example, we do this extensively in <a class="el" href="step_8.html">step-8</a>, and a lot of documentation is also provided in the module on <a class="el" href="group__vector__valued.html">Handling vector valued problems</a>. If you are thinking only in terms of the partial differential equation (not in terms of its discretization), then the concept of <em>components</em> is the natural one.</p>
 <p class="interdd">On the other hand, when talking about finite elements and degrees of freedom, <em>components</em> are not always the correct concept because components are not always individually addressable. In particular, this is the case for <a class="el" href="#href_anchor">non-primitive finite elements</a>. Similarly, one may not always <em>want</em> to address individual components but rather sets of components &mdash; e.g. all velocity components together, and separate from the pressure in the Stokes system, without further splitting the velocities into their individual components. In either case, the correct concept to think in is that of a <a class="el" href="#href_anchor">block</a>. Since each component, if individually addressable, is also a block, thinking in terms of blocks is most frequently the better strategy.</p>
 <p class="interdd">For a given finite element, the number of components can be queried using the <a class="el" href="classFiniteElementData.html#href_anchor">FiniteElementData::n_components()</a> function, and you can find out which vector components are nonzero for a given finite element shape function using <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::get_nonzero_components()</a>. The values and gradients of individual components of a shape function (if the element is primitive) can be queried using the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::shape_value_component()</a> and <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::shape_grad_component()</a> functions on the reference cell. The <a class="el" href="classFEValuesBase.html#href_anchor">FEValues::shape_value_component()</a> and <a class="el" href="classFEValuesBase.html#href_anchor">FEValues::shape_grad_component()</a> functions do the same on a real cell. See also the documentation of the <a class="el" href="classFiniteElement.html">FiniteElement</a> and <a class="el" href="classFEValues.html">FEValues</a> classes.</p>
@@ -262,7 +262,7 @@
 </div><!-- fragment --><p> would result in a mask <code>[true, true, false]</code> in 2d. Of course, in 3d, the result would be <code>[true, true, true, false]</code>.</p>
 <dl class="section note"><dt>Note</dt><dd>Just as one can think of composed elements as being made up of <a class="el" href="#href_anchor">components</a> or <a class="el" href="#href_anchor">blocks</a>, there are component masks (represented by the <a class="el" href="classComponentMask.html">ComponentMask</a> class) and <a class="el" href="#href_anchor">block masks</a> (represented by the <a class="el" href="classBlockMask.html">BlockMask</a> class). The <a class="el" href="classFiniteElement.html">FiniteElement</a> class has functions that convert between the two kinds of objects.</dd>
 <dd>
-Not all component masks actually make sense. For example, if you have a <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object in 2d, then it doesn't make any sense to have a component mask of the form <code>[true, false]</code> because you try to select individual vector components of a finite element where each shape function has both <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> and <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> velocities. In essence, while you can of course create such a component mask, there is nothing you can do with it. </dd></dl>
+Not all component masks actually make sense. For example, if you have a <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object in 2d, then it doesn't make any sense to have a component mask of the form <code>[true, false]</code> because you try to select individual vector components of a finite element where each shape function has both <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> and <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> velocities. In essence, while you can of course create such a component mask, there is nothing you can do with it. </dd></dl>
 </dd>
 <dt class="glossary"><a class="anchor" id="GlossCompress"></a><b>Compressing distributed vectors and matrices</b>  </dt>
 <dd><p class="startdd">For parallel computations, deal.II uses the vector and matrix classes defined in the <a class="el" href="namespacePETScWrappers.html">PETScWrappers</a> and <a class="el" href="namespaceTrilinosWrappers.html">TrilinosWrappers</a> namespaces. When running programs in parallel using MPI, these classes only store a certain number of rows or elements on the current processor, whereas the rest of the vector or matrix is stored on the other processors that belong to our MPI universe. This presents a certain problem when you assemble linear systems: we add elements to the matrix and right hand side vectors that may or may not be stored locally. Sometimes, we may also want to just <em>set</em> an element, not add to it.</p>
@@ -304,9 +304,9 @@
 <p class="enddd"></p>
 </dd>
 <dt class="glossary"><a class="anchor" id="GlossDoF"></a><b>Degree of freedom</b>  </dt>
-<dd><p class="startdd">The term "degree of freedom" (often abbreviated as "DoF") is commonly used in the finite element community to indicate two slightly different, but related things. The first is that we'd like to represent the finite element solution as a linear combination of shape functions, in the form <picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf{x}) = \sum_{j=0}^{N-1} U_j \varphi_j(\mathbf{x})$" src="form_132.png"/></picture>. Here, <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> is a vector of expansion coefficients. Because we don't know their values yet (we will compute them as the solution of a linear or nonlinear system), they are called "unknowns" or "degrees of freedom". The second meaning of the term can be explained as follows: A mathematical description of finite element problem is often to say that we are looking for a finite dimensional function <picture><source srcset="form_133_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h \in V_h$" src="form_133.png"/></picture> that satisfies some set of equations (e.g. <picture><source srcset="form_134_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(u_h,\varphi_h)=(f,\varphi_h)$" src="form_134.png"/></picture> for all test functions <picture><source srcset="form_135_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_h\in
-   V_h$" src="form_135.png"/></picture>). In other words, all we say here that the solution needs to lie in some space <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture>. However, to actually solve this problem on a computer we need to choose a basis of this space; this is the set of shape functions <picture><source srcset="form_136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(\mathbf{x})$" src="form_136.png"/></picture> we have used above in the expansion of <picture><source srcset="form_137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf
-   x)$" src="form_137.png"/></picture> with coefficients <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture>. There are of course many bases of the space <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture>, but we will specifically choose the one that is described by the finite element functions that are traditionally defined locally on the cells of the mesh. Describing "degrees of freedom" in this context requires us to simply <em>enumerate</em> the basis functions of the space <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture>. For <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements this means simply enumerating the vertices of the mesh in some way, but for higher elements one also has to enumerate the shape functions that are associated with edges, faces, or cell interiors of the mesh. The class that provides this enumeration of the basis functions of <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture> is called <a class="el" href="classDoFHandler.html">DoFHandler</a>. The process of enumerating degrees of freedom is referred to as "distributing DoFs" in deal.II. </p>
+<dd><p class="startdd">The term "degree of freedom" (often abbreviated as "DoF") is commonly used in the finite element community to indicate two slightly different, but related things. The first is that we'd like to represent the finite element solution as a linear combination of shape functions, in the form <picture><source srcset="form_104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf{x}) = \sum_{j=0}^{N-1} U_j \varphi_j(\mathbf{x})$" src="form_104.png"/></picture>. Here, <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> is a vector of expansion coefficients. Because we don't know their values yet (we will compute them as the solution of a linear or nonlinear system), they are called "unknowns" or "degrees of freedom". The second meaning of the term can be explained as follows: A mathematical description of finite element problem is often to say that we are looking for a finite dimensional function <picture><source srcset="form_106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h \in V_h$" src="form_106.png"/></picture> that satisfies some set of equations (e.g. <picture><source srcset="form_107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(u_h,\varphi_h)=(f,\varphi_h)$" src="form_107.png"/></picture> for all test functions <picture><source srcset="form_108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_h\in
+   V_h$" src="form_108.png"/></picture>). In other words, all we say here that the solution needs to lie in some space <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture>. However, to actually solve this problem on a computer we need to choose a basis of this space; this is the set of shape functions <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(\mathbf{x})$" src="form_110.png"/></picture> we have used above in the expansion of <picture><source srcset="form_111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf
+   x)$" src="form_111.png"/></picture> with coefficients <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture>. There are of course many bases of the space <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture>, but we will specifically choose the one that is described by the finite element functions that are traditionally defined locally on the cells of the mesh. Describing "degrees of freedom" in this context requires us to simply <em>enumerate</em> the basis functions of the space <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture>. For <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements this means simply enumerating the vertices of the mesh in some way, but for higher elements one also has to enumerate the shape functions that are associated with edges, faces, or cell interiors of the mesh. The class that provides this enumeration of the basis functions of <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture> is called <a class="el" href="classDoFHandler.html">DoFHandler</a>. The process of enumerating degrees of freedom is referred to as "distributing DoFs" in deal.II. </p>
 <p class="enddd"></p>
 </dd>
 <dt class="glossary"><a class="anchor" id="GlossDirectionFlag"></a><b>Direction flags</b>  </dt>
@@ -327,7 +327,7 @@
 </dd>
 <dt class="glossary"><a class="anchor" id="GlossDistorted"></a><b>Distorted cells</b>  </dt>
 <dd><p class="startdd">A <em>distorted cell</em> is a cell for which the mapping from the reference cell to real cell has a Jacobian whose determinant is non-positive somewhere in the cell. Typically, we only check the sign of this determinant at the vertices of the cell. The function <a class="el" href="structGeometryInfo.html#href_anchor">GeometryInfo::alternating_form_at_vertices</a> computes these determinants at the vertices.</p>
-<p class="interdd">By way of example, if all of the determinants are of roughly equal value and on the order of <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^\text{dim}$" src="form_138.png"/></picture> then the cell is well-shaped. For example, a square cell or face has determinants equal to <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^\text{dim}$" src="form_138.png"/></picture> whereas a strongly sheared parallelogram has a determinant much smaller. Similarly, a cell with very unequal edge lengths will have widely varying determinants. Conversely, a pinched cell in which the location of two or more vertices is collapsed to a single point has a zero determinant at this location. Finally, an inverted or twisted cell in which the location of two vertices is out of order will have negative determinants.</p>
+<p class="interdd">By way of example, if all of the determinants are of roughly equal value and on the order of <picture><source srcset="form_112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^\text{dim}$" src="form_112.png"/></picture> then the cell is well-shaped. For example, a square cell or face has determinants equal to <picture><source srcset="form_112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^\text{dim}$" src="form_112.png"/></picture> whereas a strongly sheared parallelogram has a determinant much smaller. Similarly, a cell with very unequal edge lengths will have widely varying determinants. Conversely, a pinched cell in which the location of two or more vertices is collapsed to a single point has a zero determinant at this location. Finally, an inverted or twisted cell in which the location of two vertices is out of order will have negative determinants.</p>
 <p class="interdd">The following two images show a well-formed, a pinched, and a twisted cell for both 2d and 3d:</p>
 <div class="image">
 <img src="distorted_2d.png" alt=""/>
@@ -366,19 +366,19 @@
 <p class="enddd"></p>
 </dd>
 <dt class="glossary"><a class="anchor" id="GlossGeneralizedSupport"></a><b>Generalized support points</b> </dt>
-<dd><p class="startdd">"Generalized support points" are, as the name suggests, a generalization of <a class="el" href="#href_anchor">support points</a>. The latter are used to describe that a finite element simply <em>interpolates</em> values at individual points (the "support points"). If we call these points <picture><source srcset="form_139_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf{x}}_i$" src="form_139.png"/></picture> (where the hat indicates that these points are defined on the reference cell <picture><source srcset="form_140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{K}$" src="form_140.png"/></picture>), then one typically defines shape functions <picture><source srcset="form_136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(\mathbf{x})$" src="form_136.png"/></picture> in such a way that the <em>nodal functionals</em> <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture> simply evaluate the function at the support point, i.e., that <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi]=\varphi(\hat{\mathbf{x}}_i)$" src="form_142.png"/></picture>, and the basis is chosen so that <picture><source srcset="form_143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi_j]=\delta_{ij}$" src="form_143.png"/></picture> where <picture><source srcset="form_144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_{ij}$" src="form_144.png"/></picture> is the Kronecker delta function. This leads to the common <a class="el" href="#href_anchor">Lagrange elements</a>.</p>
-<p class="interdd">(In the vector valued case, the only other piece of information besides the support points <picture><source srcset="form_139_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf{x}}_i$" src="form_139.png"/></picture> that one needs to provide is the <em>vector component</em> <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th node functional corresponds, so that <picture><source srcset="form_146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi]=\varphi(\hat{\mathbf{x}}_i)_{c(i)}$" src="form_146.png"/></picture>.)</p>
-<p class="interdd">On the other hand, there are other kinds of elements that are not defined this way. For example, for the lowest order Raviart-Thomas element (see the <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> class), the node functional evaluates not individual components of a vector-valued finite element function with <code>dim</code> components, but the <em>normal component</em> of this vector:  <picture><source srcset="form_147_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi]
+<dd><p class="startdd">"Generalized support points" are, as the name suggests, a generalization of <a class="el" href="#href_anchor">support points</a>. The latter are used to describe that a finite element simply <em>interpolates</em> values at individual points (the "support points"). If we call these points <picture><source srcset="form_113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf{x}}_i$" src="form_113.png"/></picture> (where the hat indicates that these points are defined on the reference cell <picture><source srcset="form_114_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{K}$" src="form_114.png"/></picture>), then one typically defines shape functions <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(\mathbf{x})$" src="form_110.png"/></picture> in such a way that the <em>nodal functionals</em> <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture> simply evaluate the function at the support point, i.e., that <picture><source srcset="form_116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi]=\varphi(\hat{\mathbf{x}}_i)$" src="form_116.png"/></picture>, and the basis is chosen so that <picture><source srcset="form_117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi_j]=\delta_{ij}$" src="form_117.png"/></picture> where <picture><source srcset="form_118_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_{ij}$" src="form_118.png"/></picture> is the Kronecker delta function. This leads to the common <a class="el" href="#href_anchor">Lagrange elements</a>.</p>
+<p class="interdd">(In the vector valued case, the only other piece of information besides the support points <picture><source srcset="form_113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf{x}}_i$" src="form_113.png"/></picture> that one needs to provide is the <em>vector component</em> <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th node functional corresponds, so that <picture><source srcset="form_120_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi]=\varphi(\hat{\mathbf{x}}_i)_{c(i)}$" src="form_120.png"/></picture>.)</p>
+<p class="interdd">On the other hand, there are other kinds of elements that are not defined this way. For example, for the lowest order Raviart-Thomas element (see the <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> class), the node functional evaluates not individual components of a vector-valued finite element function with <code>dim</code> components, but the <em>normal component</em> of this vector:  <picture><source srcset="form_121_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi]
     =
     \varphi(\hat{\mathbf{x}}_i) \cdot \mathbf{n}_i
-   $" src="form_147.png"/></picture>, where the <picture><source srcset="form_148_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}_i$" src="form_148.png"/></picture> are the normal vectors to the face of the cell on which <picture><source srcset="form_139_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf{x}}_i$" src="form_139.png"/></picture> is located. In other words, the node functional is a <em>linear combination</em> of the components of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> when evaluated at <picture><source srcset="form_139_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf{x}}_i$" src="form_139.png"/></picture>. Similar things happen for the BDM, ABF, and Nedelec elements (see the <a class="el" href="classFE__BDM.html">FE_BDM</a>, <a class="el" href="classFE__ABF.html">FE_ABF</a>, <a class="el" href="classFE__Nedelec.html">FE_Nedelec</a> classes).</p>
-<p class="interdd">In these cases, the element does not have <em>support points</em> because it is not purely interpolatory; however, some kind of interpolation is still involved when defining shape functions as the node functionals still require point evaluations at special points <picture><source srcset="form_139_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf{x}}_i$" src="form_139.png"/></picture>. In these cases, we call the points <em>generalized support points</em>.</p>
-<p class="interdd">Finally, there are elements that still do not fit into this scheme. For example, some hierarchical basis functions (see, for example the <a class="el" href="classFE__Q__Hierarchical.html">FE_Q_Hierarchical</a> element) are defined so that the node functionals are <em>moments</em> of finite element functions,  <picture><source srcset="form_150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi]
+   $" src="form_121.png"/></picture>, where the <picture><source srcset="form_122_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}_i$" src="form_122.png"/></picture> are the normal vectors to the face of the cell on which <picture><source srcset="form_113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf{x}}_i$" src="form_113.png"/></picture> is located. In other words, the node functional is a <em>linear combination</em> of the components of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> when evaluated at <picture><source srcset="form_113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf{x}}_i$" src="form_113.png"/></picture>. Similar things happen for the BDM, ABF, and Nedelec elements (see the <a class="el" href="classFE__BDM.html">FE_BDM</a>, <a class="el" href="classFE__ABF.html">FE_ABF</a>, <a class="el" href="classFE__Nedelec.html">FE_Nedelec</a> classes).</p>
+<p class="interdd">In these cases, the element does not have <em>support points</em> because it is not purely interpolatory; however, some kind of interpolation is still involved when defining shape functions as the node functionals still require point evaluations at special points <picture><source srcset="form_113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf{x}}_i$" src="form_113.png"/></picture>. In these cases, we call the points <em>generalized support points</em>.</p>
+<p class="interdd">Finally, there are elements that still do not fit into this scheme. For example, some hierarchical basis functions (see, for example the <a class="el" href="classFE__Q__Hierarchical.html">FE_Q_Hierarchical</a> element) are defined so that the node functionals are <em>moments</em> of finite element functions,  <picture><source srcset="form_124_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi]
     =
     \int_{\hat{K}} \varphi(\hat{\mathbf{x}})
     {\hat{x}_1}^{p_1(i)}
     {\hat{x}_2}^{p_2(i)}
-   $" src="form_150.png"/></picture> in 2d, and similarly for 3d, where the <picture><source srcset="form_151_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_d(i)$" src="form_151.png"/></picture> are the order of the moment described by shape function <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>. Some other elements use moments over edges or faces. In all of these cases, node functionals are not defined through interpolation at all, and these elements then have neither support points, nor generalized support points. </p>
+   $" src="form_124.png"/></picture> in 2d, and similarly for 3d, where the <picture><source srcset="form_125_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_d(i)$" src="form_125.png"/></picture> are the order of the moment described by shape function <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>. Some other elements use moments over edges or faces. In all of these cases, node functionals are not defined through interpolation at all, and these elements then have neither support points, nor generalized support points. </p>
 <p class="enddd"></p>
 </dd>
 <dt class="glossary"><a class="anchor" id="geometry_paper"></a><b>geometry paper</b> </dt>
@@ -453,47 +453,47 @@
 </dd>
 <dt class="glossary"><a class="anchor" id="GlossLumpedMassMatrix"></a><b>Lumped mass matrix</b> </dt>
 <dd><p class="startdd">The <a class="el" href="#href_anchor">mass matrix</a> is a matrix of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_152_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
        M_{ij} = \int_\Omega \varphi_i(\mathbf x) \varphi_j(\mathbf x)\; dx,
-     \end{align*}" src="form_152.png"/></picture>
+     \end{align*}" src="form_126.png"/></picture>
 </p>
 <p> It frequently appears in the solution of time dependent problems where, if one uses an explicit time stepping method, it then leads to the need to solve problems of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_153_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_127_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
        MU^n = MU^{n-1} + k_n BU^{n-1},
-     \end{align*}" src="form_153.png"/></picture>
+     \end{align*}" src="form_127.png"/></picture>
 </p>
-<p> in time step <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>, where <picture><source srcset="form_154_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^n$" src="form_154.png"/></picture> is the solution to be computed, <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^{n-1}$" src="form_155.png"/></picture> is the known solution from the first time step, and <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is a matrix related to the differential operator in the PDE. <picture><source srcset="form_156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n$" src="form_156.png"/></picture> is the size of the time step. A similar linear system of equations also arises out of the discretization of second-order differential equations.</p>
-<p class="interdd">The presence of the matrix <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> on the left side is a nuisance because, even though we have used an explicit time stepping method, we still have to solve a linear system in each time step. It would be much preferable if the matrix were diagonal. "Lumping" the mass matrix is a strategy to replace <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> by a matrix <picture><source srcset="form_157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_\text{diagonal}$" src="form_157.png"/></picture> that actually is diagonal, yet does not destroy the accuracy of the resulting solution.</p>
-<p class="interdd">Historically, mass lumping was performed by adding the elements of a row together and setting the diagonal entries of <picture><source srcset="form_157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_\text{diagonal}$" src="form_157.png"/></picture> to that sum. This works for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> and <picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> elements, for example, and can be understood mechanically by replacing the continuous medium we are discretizating by one where the continuous mass distribution is replaced by one where (finite amounts of) mass are located only at the nodes. That is, we are "lumping together" the mass of an element at its vertices, thus giving rise to the name "lumped mass matrix". A more mathematical perspective is to compute the integral above for <picture><source srcset="form_159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_{ij}$" src="form_159.png"/></picture> via special quadrature rules; in particular, we replace the computation of  </p><p class="formulaDsp">
-<picture><source srcset="form_160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> in time step <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>, where <picture><source srcset="form_128_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^n$" src="form_128.png"/></picture> is the solution to be computed, <picture><source srcset="form_129_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^{n-1}$" src="form_129.png"/></picture> is the known solution from the first time step, and <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is a matrix related to the differential operator in the PDE. <picture><source srcset="form_130_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n$" src="form_130.png"/></picture> is the size of the time step. A similar linear system of equations also arises out of the discretization of second-order differential equations.</p>
+<p class="interdd">The presence of the matrix <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> on the left side is a nuisance because, even though we have used an explicit time stepping method, we still have to solve a linear system in each time step. It would be much preferable if the matrix were diagonal. "Lumping" the mass matrix is a strategy to replace <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> by a matrix <picture><source srcset="form_131_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_\text{diagonal}$" src="form_131.png"/></picture> that actually is diagonal, yet does not destroy the accuracy of the resulting solution.</p>
+<p class="interdd">Historically, mass lumping was performed by adding the elements of a row together and setting the diagonal entries of <picture><source srcset="form_131_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_\text{diagonal}$" src="form_131.png"/></picture> to that sum. This works for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> and <picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> elements, for example, and can be understood mechanically by replacing the continuous medium we are discretizating by one where the continuous mass distribution is replaced by one where (finite amounts of) mass are located only at the nodes. That is, we are "lumping together" the mass of an element at its vertices, thus giving rise to the name "lumped mass matrix". A more mathematical perspective is to compute the integral above for <picture><source srcset="form_133_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_{ij}$" src="form_133.png"/></picture> via special quadrature rules; in particular, we replace the computation of  </p><p class="formulaDsp">
+<picture><source srcset="form_134_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
        M_{ij} = \int_\Omega \varphi_i(\mathbf x) \varphi_j(\mathbf x)\; dx
               = \sum_K \int_K \varphi_i(\mathbf x) \varphi_j(\mathbf x)\; dx,
-     \end{align*}" src="form_160.png"/></picture>
+     \end{align*}" src="form_134.png"/></picture>
 </p>
 <p> by quadrature  </p><p class="formulaDsp">
-<picture><source srcset="form_161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_135_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
        (M_{\text{diagonal}})_{ij} = \sum_K \sum_q \varphi_i(\mathbf x_q^K) \varphi_j(\mathbf x_q^K)
        |K| w_q,
-     \end{align*}" src="form_161.png"/></picture>
+     \end{align*}" src="form_135.png"/></picture>
 </p>
 <p> where we choose the quadrature points as the <em>nodes</em> at which the shape functions are defined. If we order the quadrature points in the same way as the shape functions, then  </p><p class="formulaDsp">
-<picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
        \varphi_i(\mathbf x_q^K) = \delta_{iq},
-     \end{align*}" src="form_162.png"/></picture>
+     \end{align*}" src="form_136.png"/></picture>
 </p>
 <p> and consequently  </p><p class="formulaDsp">
-<picture><source srcset="form_163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
        (M_{\text{diagonal}})_{ij} = \delta_{ij} \sum_{K, \text{supp}\varphi_i \cap K \neq \emptyset} |K| w_i,
-     \end{align*}" src="form_163.png"/></picture>
+     \end{align*}" src="form_137.png"/></picture>
 </p>
-<p> where the sum extends over those cells on which <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> is nonzero. The so-computed mass matrix is therefore diagonal.</p>
-<p class="interdd">Whether or not this particular choice of quadrature formula is sufficient to retain the convergence rate of the discretization is a separate question. For the usual <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_k$" src="form_165.png"/></picture> finite elements (implemented by <a class="el" href="classFE__Q.html">FE_Q</a> and <a class="el" href="classFE__DGQ.html">FE_DGQ</a>), the appropriate quadrature formulas are of <a class="el" href="classQGaussLobatto.html">QGaussLobatto</a> type. Mass lumping can also be done with <a class="el" href="classFE__SimplexP__Bubbles.html" title="Enriched version of FE_SimplexP that can be used with nodal quadrature.">FE_SimplexP_Bubbles</a>, for example, if appropriate quadrature rules are chosen.</p>
+<p> where the sum extends over those cells on which <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> is nonzero. The so-computed mass matrix is therefore diagonal.</p>
+<p class="interdd">Whether or not this particular choice of quadrature formula is sufficient to retain the convergence rate of the discretization is a separate question. For the usual <picture><source srcset="form_139_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_k$" src="form_139.png"/></picture> finite elements (implemented by <a class="el" href="classFE__Q.html">FE_Q</a> and <a class="el" href="classFE__DGQ.html">FE_DGQ</a>), the appropriate quadrature formulas are of <a class="el" href="classQGaussLobatto.html">QGaussLobatto</a> type. Mass lumping can also be done with <a class="el" href="classFE__SimplexP__Bubbles.html" title="Enriched version of FE_SimplexP that can be used with nodal quadrature.">FE_SimplexP_Bubbles</a>, for example, if appropriate quadrature rules are chosen.</p>
 <p class="interdd">For an example of where lumped mass matrices play a role, see <a class="el" href="step_69.html">step-69</a>. </p>
 <p class="enddd"></p>
 </dd>
 <dt class="glossary"><a class="anchor" id="GlossManifoldIndicator"></a><b>Manifold indicator</b>  </dt>
 <dd><p class="startdd">Every object that makes up a <a class="el" href="classTriangulation.html">Triangulation</a> (cells, faces, edges, etc.), is associated with a unique number (of type <a class="el" href="namespacetypes.html#href_anchor">types::manifold_id</a>) that is used to identify which manifold object is responsible to generate new points when the mesh is refined.</p>
-<p class="interdd">By default, all manifold indicators of a mesh are set to <a class="el" href="namespacenumbers.html#href_anchor">numbers::flat_manifold_id</a>. A typical piece of code that sets the manifold indicator on a object to something else would look like this, here setting the manifold indicator to 42 for all cells whose center has an <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> component less than zero:</p>
+<p class="interdd">By default, all manifold indicators of a mesh are set to <a class="el" href="namespacenumbers.html#href_anchor">numbers::flat_manifold_id</a>. A typical piece of code that sets the manifold indicator on a object to something else would look like this, here setting the manifold indicator to 42 for all cells whose center has an <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> component less than zero:</p>
 <div class="fragment"><div class="line"><span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;cell : <a class="code hl_variable" href="p4est__wrappers_8cc.html#href_anchor">triangulation</a>.active_cell_iterators())</div>
 <div class="line">  if (cell-&gt;<a class="code hl_variable" href="data__out__base_8cc.html#href_anchor">center</a>()[0] &lt; 0)</div>
 <div class="line">    cell-&gt;set_manifold_id (42);</div>
@@ -504,41 +504,41 @@
 </dd>
 <dt class="glossary"><a class="anchor" id="GlossMassMatrix"></a><b>Mass matrix</b> </dt>
 <dd><p class="startdd">The "mass matrix" is a matrix of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_152_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
        M_{ij} = \int_\Omega \varphi_i(\mathbf x) \varphi_j(\mathbf x)\; dx,
-     \end{align*}" src="form_152.png"/></picture>
+     \end{align*}" src="form_126.png"/></picture>
 </p>
-<p> possibly with a coefficient inside the integral, and where <picture><source srcset="form_166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i(\mathbf x)$" src="form_166.png"/></picture> are the shape functions of a finite element. The origin of the term refers to the fact that in structural mechanics (where the finite element method originated), one often starts from the elastodynamics (wave) equation  </p><p class="formulaDsp">
-<picture><source srcset="form_167_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> possibly with a coefficient inside the integral, and where <picture><source srcset="form_140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i(\mathbf x)$" src="form_140.png"/></picture> are the shape functions of a finite element. The origin of the term refers to the fact that in structural mechanics (where the finite element method originated), one often starts from the elastodynamics (wave) equation  </p><p class="formulaDsp">
+<picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
        \rho \frac{\partial^2 u}{\partial t^2}
        -\nabla \cdot C \nabla u = f.
-     \end{align*}" src="form_167.png"/></picture>
/usr/share/doc/packages/dealii/doxygen/deal.II/Tutorial.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/Tutorial.html	2024-03-17 21:57:16.899070340 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/Tutorial.html	2024-03-17 21:57:16.903070365 +0000
@@ -340,7 +340,7 @@
 <p class="endtd"></p>
 </td></tr>
 <tr valign="top">
-<td><a class="el" href="step_47.html">step-47</a> </td><td><p class="starttd">Solving the fourth-order biharmonic equation using the <picture><source srcset="form_1094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1094.png"/></picture> Interior Penalty (C0IP) method. <br  />
+<td><a class="el" href="step_47.html">step-47</a> </td><td><p class="starttd">Solving the fourth-order biharmonic equation using the <picture><source srcset="form_1087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1087.png"/></picture> Interior Penalty (C0IP) method. <br  />
  Keywords: <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> </p>
 <p class="endtd"></p>
 </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/_formulas.tex differs (LaTeX 2e document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/_formulas.tex	2023-10-24 08:03:04.000000000 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/_formulas.tex	2023-10-24 08:03:04.000000000 +0000
@@ -31,15 +31,6 @@
 
 \pagestyle{empty}
 \begin{document}
-$O(\text{dim}^3)$
-\pagebreak
-
-$u = u - P^{-1} (A u - v)$
-\pagebreak
-
-$u = u - P^{-T} (A u - v)$
-\pagebreak
-
 $F(u,\nabla u)=0$
 \pagebreak
 
@@ -113,104 +104,113 @@
 $\dfrac{d f_{i-1}}{d f_{i}}$
 \pagebreak
 
-$u|_{\partial\Omega}=g$
+$f(x,y) = [2x+1]^{y}$
 \pagebreak
 
-$x_{12}=42$
+$x$
 \pagebreak
 
-$g(\mathbf x)$
+$y$
 \pagebreak
 
-$u(\mathbf x)$
+$\dfrac{d f(x,y)}{d x} = 2y[2x+1]^{y-1}$
 \pagebreak
 
-$\mathbf n \cdot
-  \mathbf u=0$
+$\dfrac{d f(x,y)}{d y} = [2x+1]^{y} \ln(2x+1)$
 \pagebreak
 
-$\mathbf{n}\times\mathbf{u}=
-  \mathbf{n}\times\mathbf{f}$
+$\dfrac{d f(x, y)}{d x}$
 \pagebreak
 
-$\frac 1{\sqrt{14}}
-  (1,2,3)^T$
+$x=1, y=2.5$
 \pagebreak
 
-$x$
+$x=3.25, y=-6$
 \pagebreak
 
-$y$
+$g(x) = \dfrac{d f(x, y)}{d x} \vert_{y=1}$
 \pagebreak
 
-$z$
+$g(x)$
 \pagebreak
 
-$\frac 1{\sqrt{14}} (x_{12}+2x_{28}+3x_{40})=0$
+$y \rightarrow y(x) := 2x$
 \pagebreak
 
-$f(x,y) = [2x+1]^{y}$
+$\dfrac{d f(x, y)}{d x} \rightarrow \dfrac{\partial f(x, y(x))}{\partial x} = 2y(x) [2x+1]^{y(x)-1} = 4x[2x+1]^{2x-1}$
 \pagebreak
 
-$x_{12}$
+$\dfrac{d f(x, y)}{d y} \rightarrow \dfrac{\partial f(x, y(x))}{\partial y} = [2x+1]^{y(x)} \ln(2x+1) = [2x+1]^{2x} \ln(2x+1)$
 \pagebreak
 
-$\dfrac{d f(x,y)}{d x} = 2y[2x+1]^{y-1}$
+$\dfrac{d f(x, y(x))}{d x}$
 \pagebreak
 
-$x_{28}$
+$\dfrac{d f(x, y(x))}{d y}$
 \pagebreak
 
-$x_{40}$
+$O(\text{dim}^3)$
 \pagebreak
 
-$\dfrac{d f(x,y)}{d y} = [2x+1]^{y} \ln(2x+1)$
+$u = u - P^{-1} (A u - v)$
 \pagebreak
 
-$x_{12}=
-  \frac 12 (x_{28}+x_{40})$
+$u = u - P^{-T} (A u - v)$
 \pagebreak
 
-$x_2=\frac 12 x_0 + \frac 12 x_1$
+$u|_{\partial\Omega}=g$
 \pagebreak
 
-$x_4=\frac 14 x_0 + \frac 34 x_1$
+$x_{12}=42$
 \pagebreak
 
-$\dfrac{d f(x, y)}{d x}$
+$g(\mathbf x)$
 \pagebreak
 
-$x=1, y=2.5$
+$u(\mathbf x)$
 \pagebreak
 
-$x_3=x_1$
+$\mathbf n \cdot
+  \mathbf u=0$
 \pagebreak
 
-$x=3.25, y=-6$
+$\mathbf{n}\times\mathbf{u}=
+  \mathbf{n}\times\mathbf{f}$
 \pagebreak
 
-$g(x) = \dfrac{d f(x, y)}{d x} \vert_{y=1}$
+$\frac 1{\sqrt{14}}
+  (1,2,3)^T$
 \pagebreak
 
-$g(x)$
+$z$
 \pagebreak
 
-$x_{i_1} = \sum_{j=2}^M a_{i_j} x_{i_j} + b_i$
+$\frac 1{\sqrt{14}} (x_{12}+2x_{28}+3x_{40})=0$
 \pagebreak
 
-$y \rightarrow y(x) := 2x$
+$x_{12}$
 \pagebreak
 
-$\dfrac{d f(x, y)}{d x} \rightarrow \dfrac{\partial f(x, y(x))}{\partial x} = 2y(x) [2x+1]^{y(x)-1} = 4x[2x+1]^{2x-1}$
+$x_{28}$
 \pagebreak
 
-$\dfrac{d f(x, y)}{d y} \rightarrow \dfrac{\partial f(x, y(x))}{\partial y} = [2x+1]^{y(x)} \ln(2x+1) = [2x+1]^{2x} \ln(2x+1)$
+$x_{40}$
 \pagebreak
 
-$\dfrac{d f(x, y(x))}{d x}$
+$x_{12}=
+  \frac 12 (x_{28}+x_{40})$
 \pagebreak
 
-$\dfrac{d f(x, y(x))}{d y}$
+$x_2=\frac 12 x_0 + \frac 12 x_1$
+\pagebreak
+
+$x_4=\frac 14 x_0 + \frac 34 x_1$
+\pagebreak
+
+$x_3=x_1$
+\pagebreak
+
+$x_{i_1} = \sum_{j=2}^M a_{i_j} x_{i_j} + b_i$
 \pagebreak
 
 $x_{13}=42$
@@ -337,30 +337,6 @@
 $J_K$
 \pagebreak
 
-$Q_2$
-\pagebreak
-
-$p$
-\pagebreak
-
-$(A+k\,B)\,C$
-\pagebreak
-
-$B$
-\pagebreak
-
-$b-Ax$
-\pagebreak
-
-$V_h$
-\pagebreak
-
-$u_h(\mathbf x)= \sum_j U_j \varphi_i(\mathbf x)$
-\pagebreak
-
-$U_j$
-\pagebreak
-
 \begin{eqnarray*}
   \left(\begin{array}{cc}
     M & B^T \\ B & 0
@@ -381,6 +357,9 @@
/usr/share/doc/packages/dealii/doxygen/deal.II/_formulas_dark.tex differs (LaTeX 2e document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/_formulas_dark.tex	2023-10-24 08:03:04.000000000 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/_formulas_dark.tex	2023-10-24 08:03:04.000000000 +0000
@@ -33,15 +33,6 @@
 
 \pagestyle{empty}
 \begin{document}
-$O(\text{dim}^3)$
-\pagebreak
-
-$u = u - P^{-1} (A u - v)$
-\pagebreak
-
-$u = u - P^{-T} (A u - v)$
-\pagebreak
-
 $F(u,\nabla u)=0$
 \pagebreak
 
@@ -115,104 +106,113 @@
 $\dfrac{d f_{i-1}}{d f_{i}}$
 \pagebreak
 
-$u|_{\partial\Omega}=g$
+$f(x,y) = [2x+1]^{y}$
 \pagebreak
 
-$x_{12}=42$
+$x$
 \pagebreak
 
-$g(\mathbf x)$
+$y$
 \pagebreak
 
-$u(\mathbf x)$
+$\dfrac{d f(x,y)}{d x} = 2y[2x+1]^{y-1}$
 \pagebreak
 
-$\mathbf n \cdot
-  \mathbf u=0$
+$\dfrac{d f(x,y)}{d y} = [2x+1]^{y} \ln(2x+1)$
 \pagebreak
 
-$\mathbf{n}\times\mathbf{u}=
-  \mathbf{n}\times\mathbf{f}$
+$\dfrac{d f(x, y)}{d x}$
 \pagebreak
 
-$\frac 1{\sqrt{14}}
-  (1,2,3)^T$
+$x=1, y=2.5$
 \pagebreak
 
-$x$
+$x=3.25, y=-6$
 \pagebreak
 
-$y$
+$g(x) = \dfrac{d f(x, y)}{d x} \vert_{y=1}$
 \pagebreak
 
-$z$
+$g(x)$
 \pagebreak
 
-$\frac 1{\sqrt{14}} (x_{12}+2x_{28}+3x_{40})=0$
+$y \rightarrow y(x) := 2x$
 \pagebreak
 
-$f(x,y) = [2x+1]^{y}$
+$\dfrac{d f(x, y)}{d x} \rightarrow \dfrac{\partial f(x, y(x))}{\partial x} = 2y(x) [2x+1]^{y(x)-1} = 4x[2x+1]^{2x-1}$
 \pagebreak
 
-$x_{12}$
+$\dfrac{d f(x, y)}{d y} \rightarrow \dfrac{\partial f(x, y(x))}{\partial y} = [2x+1]^{y(x)} \ln(2x+1) = [2x+1]^{2x} \ln(2x+1)$
 \pagebreak
 
-$\dfrac{d f(x,y)}{d x} = 2y[2x+1]^{y-1}$
+$\dfrac{d f(x, y(x))}{d x}$
 \pagebreak
 
-$x_{28}$
+$\dfrac{d f(x, y(x))}{d y}$
 \pagebreak
 
-$x_{40}$
+$O(\text{dim}^3)$
 \pagebreak
 
-$\dfrac{d f(x,y)}{d y} = [2x+1]^{y} \ln(2x+1)$
+$u = u - P^{-1} (A u - v)$
 \pagebreak
 
-$x_{12}=
-  \frac 12 (x_{28}+x_{40})$
+$u = u - P^{-T} (A u - v)$
 \pagebreak
 
-$x_2=\frac 12 x_0 + \frac 12 x_1$
+$u|_{\partial\Omega}=g$
 \pagebreak
 
-$x_4=\frac 14 x_0 + \frac 34 x_1$
+$x_{12}=42$
 \pagebreak
 
-$\dfrac{d f(x, y)}{d x}$
+$g(\mathbf x)$
 \pagebreak
 
-$x=1, y=2.5$
+$u(\mathbf x)$
 \pagebreak
 
-$x_3=x_1$
+$\mathbf n \cdot
+  \mathbf u=0$
 \pagebreak
 
-$x=3.25, y=-6$
+$\mathbf{n}\times\mathbf{u}=
+  \mathbf{n}\times\mathbf{f}$
 \pagebreak
 
-$g(x) = \dfrac{d f(x, y)}{d x} \vert_{y=1}$
+$\frac 1{\sqrt{14}}
+  (1,2,3)^T$
 \pagebreak
 
-$g(x)$
+$z$
 \pagebreak
 
-$x_{i_1} = \sum_{j=2}^M a_{i_j} x_{i_j} + b_i$
+$\frac 1{\sqrt{14}} (x_{12}+2x_{28}+3x_{40})=0$
 \pagebreak
 
-$y \rightarrow y(x) := 2x$
+$x_{12}$
 \pagebreak
 
-$\dfrac{d f(x, y)}{d x} \rightarrow \dfrac{\partial f(x, y(x))}{\partial x} = 2y(x) [2x+1]^{y(x)-1} = 4x[2x+1]^{2x-1}$
+$x_{28}$
 \pagebreak
 
-$\dfrac{d f(x, y)}{d y} \rightarrow \dfrac{\partial f(x, y(x))}{\partial y} = [2x+1]^{y(x)} \ln(2x+1) = [2x+1]^{2x} \ln(2x+1)$
+$x_{40}$
 \pagebreak
 
-$\dfrac{d f(x, y(x))}{d x}$
+$x_{12}=
+  \frac 12 (x_{28}+x_{40})$
 \pagebreak
 
-$\dfrac{d f(x, y(x))}{d y}$
+$x_2=\frac 12 x_0 + \frac 12 x_1$
+\pagebreak
+
+$x_4=\frac 14 x_0 + \frac 34 x_1$
+\pagebreak
+
+$x_3=x_1$
+\pagebreak
+
+$x_{i_1} = \sum_{j=2}^M a_{i_j} x_{i_j} + b_i$
 \pagebreak
 
 $x_{13}=42$
@@ -339,30 +339,6 @@
 $J_K$
 \pagebreak
 
-$Q_2$
-\pagebreak
-
-$p$
-\pagebreak
-
-$(A+k\,B)\,C$
-\pagebreak
-
-$B$
-\pagebreak
-
-$b-Ax$
-\pagebreak
-
-$V_h$
-\pagebreak
-
-$u_h(\mathbf x)= \sum_j U_j \varphi_i(\mathbf x)$
-\pagebreak
-
-$U_j$
-\pagebreak
-
 \begin{eqnarray*}
   \left(\begin{array}{cc}
     M & B^T \\ B & 0
@@ -383,6 +359,9 @@
/usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_6_1_and_6_2.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_6_1_and_6_2.html	2024-03-17 21:57:17.367073231 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_6_1_and_6_2.html	2024-03-17 21:57:17.375073281 +0000
@@ -695,7 +695,7 @@
 </li>
 <li>
 <p class="startli"></p>
-<p class="interli">Improved: The <a class="el" href="namespaceFEValuesViews.html">FEValuesViews</a> objects that one gets when writing things like <code>fe_values[velocities]</code> (see <a class="el" href="group__vector__valued.html">Handling vector valued problems</a>) have become a lot smarter. They now compute a significant amount of data at creation time, rather than on the fly. This means that creating such objects becomes more expensive but using them is cheaper. To offset this cost, <a class="el" href="classFEValuesBase.html">FEValuesBase</a> objects now create all possible <a class="el" href="namespaceFEValuesViews.html">FEValuesViews</a> objects at creation time, rather than whenever you do things like <code>fe_values[velocities]</code>, and simply return a reference to a pre-generated object. This turns an <picture><source srcset="form_2426_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(N)$" src="form_2426.png"/></picture> effort into an <picture><source srcset="form_2726_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(1)$" src="form_2726.png"/></picture> effort, where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> is the number of cells. <br  />
+<p class="interli">Improved: The <a class="el" href="namespaceFEValuesViews.html">FEValuesViews</a> objects that one gets when writing things like <code>fe_values[velocities]</code> (see <a class="el" href="group__vector__valued.html">Handling vector valued problems</a>) have become a lot smarter. They now compute a significant amount of data at creation time, rather than on the fly. This means that creating such objects becomes more expensive but using them is cheaper. To offset this cost, <a class="el" href="classFEValuesBase.html">FEValuesBase</a> objects now create all possible <a class="el" href="namespaceFEValuesViews.html">FEValuesViews</a> objects at creation time, rather than whenever you do things like <code>fe_values[velocities]</code>, and simply return a reference to a pre-generated object. This turns an <picture><source srcset="form_2422_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(N)$" src="form_2422.png"/></picture> effort into an <picture><source srcset="form_2726_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(1)$" src="form_2726.png"/></picture> effort, where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> is the number of cells. <br  />
  (WB 2008/12/10) </p>
 <p class="interli"></p>
 <p class="endli"></p>
/usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_6_2_and_6_3.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_6_2_and_6_3.html	2024-03-17 21:57:17.411073503 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_6_2_and_6_3.html	2024-03-17 21:57:17.419073553 +0000
@@ -501,7 +501,7 @@
 </li>
 <li>
 <p class="startli"></p>
-<p class="interli">New: There are new functions <a class="el" href="classFullMatrix.html#href_anchor">FullMatrix::cholesky</a> and <a class="el" href="classFullMatrix.html#href_anchor">FullMatrix::outer_product</a>. <a class="el" href="classFullMatrix.html#href_anchor">FullMatrix::cholesky</a> finds the Cholesky decomposition of a matrix in lower triangular form. <a class="el" href="classFullMatrix.html#href_anchor">FullMatrix::outer_product</a> calculates <code>*this</code> <picture><source srcset="form_2730_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$= VW^T$" src="form_2730.png"/></picture> where <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> and <picture><source srcset="form_192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W$" src="form_192.png"/></picture> are vectors. <br  />
+<p class="interli">New: There are new functions <a class="el" href="classFullMatrix.html#href_anchor">FullMatrix::cholesky</a> and <a class="el" href="classFullMatrix.html#href_anchor">FullMatrix::outer_product</a>. <a class="el" href="classFullMatrix.html#href_anchor">FullMatrix::cholesky</a> finds the Cholesky decomposition of a matrix in lower triangular form. <a class="el" href="classFullMatrix.html#href_anchor">FullMatrix::outer_product</a> calculates <code>*this</code> <picture><source srcset="form_2730_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$= VW^T$" src="form_2730.png"/></picture> where <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> and <picture><source srcset="form_166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W$" src="form_166.png"/></picture> are vectors. <br  />
  (Jean Marie Linhart 2009/07/27) </p>
 <p class="interli"></p>
 <p class="endli"></p>
/usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_8_1_and_8_2.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_8_1_and_8_2.html	2024-03-17 21:57:17.451073751 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_8_1_and_8_2.html	2024-03-17 21:57:17.459073799 +0000
@@ -839,7 +839,7 @@
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">New: There is now a new class <a class="el" href="classFunctions_1_1InterpolatedTensorProductGridData.html">Functions::InterpolatedTensorProductGridData</a> that can be used to (bi-/tri-)linearly interpolate data given on a tensor product mesh of <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> (and <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> and <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>) values, for example to evaluate experimentally determined coefficients, or to assess the accuracy of a solution by comparing with a solution generated by a different code and written in gridded data. There is also a new class <a class="el" href="classFunctions_1_1InterpolatedUniformGridData.html">Functions::InterpolatedUniformGridData</a> that can perform the same task more efficiently if the data is stored on meshes that are uniform in each coordinate direction. <br  />
+<p class="startli">New: There is now a new class <a class="el" href="classFunctions_1_1InterpolatedTensorProductGridData.html">Functions::InterpolatedTensorProductGridData</a> that can be used to (bi-/tri-)linearly interpolate data given on a tensor product mesh of <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> (and <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> and <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>) values, for example to evaluate experimentally determined coefficients, or to assess the accuracy of a solution by comparing with a solution generated by a different code and written in gridded data. There is also a new class <a class="el" href="classFunctions_1_1InterpolatedUniformGridData.html">Functions::InterpolatedUniformGridData</a> that can perform the same task more efficiently if the data is stored on meshes that are uniform in each coordinate direction. <br  />
  (Wolfgang Bangerth, 2013/12/20) </p>
 <p class="endli"></p>
 </li>
/usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_8_4_2_and_8_5_0.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_8_4_2_and_8_5_0.html	2024-03-17 21:57:17.499074047 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_8_4_2_and_8_5_0.html	2024-03-17 21:57:17.507074096 +0000
@@ -518,7 +518,7 @@
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">Fixed: The <a class="el" href="classFE__ABF.html">FE_ABF</a> class reported the maximal polynomial degree (via <a class="el" href="classFiniteElementData.html#href_anchor">FiniteElement::degree</a>) for elements of order <picture><source srcset="form_414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_414.png"/></picture> as <picture><source srcset="form_2734_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r+1$" src="form_2734.png"/></picture>, but this is wrong. It should be <picture><source srcset="form_2735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r+2$" src="form_2735.png"/></picture> (see Section 5 of the original paper of Arnold, Boffi, and Falk). This is now fixed. <br  />
+<p class="startli">Fixed: The <a class="el" href="classFE__ABF.html">FE_ABF</a> class reported the maximal polynomial degree (via <a class="el" href="classFiniteElementData.html#href_anchor">FiniteElement::degree</a>) for elements of order <picture><source srcset="form_378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_378.png"/></picture> as <picture><source srcset="form_2734_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r+1$" src="form_2734.png"/></picture>, but this is wrong. It should be <picture><source srcset="form_2735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r+2$" src="form_2735.png"/></picture> (see Section 5 of the original paper of Arnold, Boffi, and Falk). This is now fixed. <br  />
  (Wolfgang Bangerth, 2017/01/13) </p>
 <p class="endli"></p>
 </li>
/usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_9_1_1_and_9_2_0.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_9_1_1_and_9_2_0.html	2024-03-17 21:57:17.555074392 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/changes_between_9_1_1_and_9_2_0.html	2024-03-17 21:57:17.563074442 +0000
@@ -608,7 +608,7 @@
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">Improved: <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_shell()</a> in 3d now supports more <code>n_cells</code> options. While previously only 6, 12, or 96 cells were possible, the function now supports any number of the kind <picture><source srcset="form_2737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$6 \times 2^m$" src="form_2737.png"/></picture> with <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> a non-negative integer. The new cases <picture><source srcset="form_2738_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=2,3$" src="form_2738.png"/></picture> and <picture><source srcset="form_2739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m\geq 5$" src="form_2739.png"/></picture> correspond to refinement in the azimuthal direction of the 6 or 12 cell case with a single mesh layer in radial direction, and are intended for shells that are thin and should be given more resolution in azimuthal direction. <br  />
+<p class="startli">Improved: <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_shell()</a> in 3d now supports more <code>n_cells</code> options. While previously only 6, 12, or 96 cells were possible, the function now supports any number of the kind <picture><source srcset="form_2737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$6 \times 2^m$" src="form_2737.png"/></picture> with <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> a non-negative integer. The new cases <picture><source srcset="form_2738_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=2,3$" src="form_2738.png"/></picture> and <picture><source srcset="form_2739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m\geq 5$" src="form_2739.png"/></picture> correspond to refinement in the azimuthal direction of the 6 or 12 cell case with a single mesh layer in radial direction, and are intended for shells that are thin and should be given more resolution in azimuthal direction. <br  />
  (Martin Kronbichler, 2020/04/07) </p>
 <p class="endli"></p>
 </li>
@@ -1562,7 +1562,7 @@
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">Improved: The additional roots of the HermiteLikeInterpolation with degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> greater than four have been switched to the roots of the Jacobi polynomial <picture><source srcset="form_2744_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^{(4,4)}_{p-3}$" src="form_2744.png"/></picture>, making the interior bubble functions <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> orthogonal and improving the conditioning of interpolation slightly. <br  />
+<p class="startli">Improved: The additional roots of the HermiteLikeInterpolation with degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> greater than four have been switched to the roots of the Jacobi polynomial <picture><source srcset="form_2744_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^{(4,4)}_{p-3}$" src="form_2744.png"/></picture>, making the interior bubble functions <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> orthogonal and improving the conditioning of interpolation slightly. <br  />
  (Martin Kronbichler, 2019/07/12) </p>
 <p class="endli"></p>
 </li>
/usr/share/doc/packages/dealii/doxygen/deal.II/classAffineConstraints.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classAffineConstraints.html	2024-03-17 21:57:17.639074911 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classAffineConstraints.html	2024-03-17 21:57:17.647074961 +0000
@@ -358,9 +358,9 @@
 <p>The algorithms used in the implementation of this class are described in some detail in the <a class="el" href="DEALGlossary.html#href_anchor">hp-paper</a>. There is also a significant amount of documentation on how to use this class in the <a class="el" href="group__constraints.html">Constraints on degrees of freedom</a> module.</p>
 <h3>Description of constraints</h3>
 <p>Each "line" in objects of this class corresponds to one constrained degree of freedom, with the number of the line being <em>i</em>, entered by using <a class="el" href="#href_anchor">add_line()</a> or <a class="el" href="#href_anchor">add_lines()</a>. The entries in this line are pairs of the form (<em>j</em>,<em>a<sub>ij</sub></em>), which are added by <a class="el" href="#href_anchor">add_entry()</a> or <a class="el" href="#href_anchor">add_entries()</a>. The organization is essentially a <a class="el" href="classSparsityPattern.html">SparsityPattern</a>, but with only a few lines containing nonzero elements, and therefore no data wasted on the others. For each line, which has been added by the mechanism above, an elimination of the constrained degree of freedom of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_1583_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1577_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  x_i = \sum_j a_{ij} x_j + b_i
-\]" src="form_1583.png"/></picture>
+\]" src="form_1577.png"/></picture>
 </p>
 <p> is performed, where <em>b<sub>i</sub></em> is optional and set by <a class="el" href="#href_anchor">set_inhomogeneity()</a>. Thus, if a constraint is formulated for instance as a zero mean value of several degrees of freedom, one of the degrees has to be chosen to be eliminated.</p>
 <p>Note that the constraints are linear in the <em>x<sub>i</sub></em>, and that there might be a constant (non-homogeneous) term in the constraint. This is exactly the form we need for hanging node constraints, where we need to constrain one degree of freedom in terms of others. There are other conditions of this form possible, for example for implementing mean value conditions as is done in the <a class="el" href="step_11.html">step-11</a> tutorial program. The name of the class stems from the fact that these constraints can be represented in matrix form as <b>X</b> <em>x</em> = <em>b</em>, and this object then describes the matrix <b>X</b> and the vector <em>b</em>. The most frequent way to create/fill objects of this type is using the <a class="el" href="group__constraints.html#href_anchor">DoFTools::make_hanging_node_constraints()</a> function. The use of these objects is first explained in <a class="el" href="step_6.html">step-6</a>.</p>
@@ -914,13 +914,13 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Add an entry to a given line. In other words, this function adds a term <picture><source srcset="form_1584_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ij} x_j$" src="form_1584.png"/></picture> to the constraints for the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th degree of freedom.</p>
+<p>Add an entry to a given line. In other words, this function adds a term <picture><source srcset="form_1578_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ij} x_j$" src="form_1578.png"/></picture> to the constraints for the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th degree of freedom.</p>
 <p>If an entry with the same indices as the one this function call denotes already exists, then this function simply returns provided that the value of the entry is the same. Thus, it does no harm to enter a constraint twice.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">constrained_dof_index</td><td>The index <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> of the degree of freedom that is being constrained. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">column</td><td>The index <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> of the degree of freedom being entered into the constraint for degree of freedom <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">weight</td><td>The factor <picture><source srcset="form_1011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ij}$" src="form_1011.png"/></picture> that multiplies <picture><source srcset="form_1585_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_j$" src="form_1585.png"/></picture>. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">constrained_dof_index</td><td>The index <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> of the degree of freedom that is being constrained. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">column</td><td>The index <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> of the degree of freedom being entered into the constraint for degree of freedom <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">weight</td><td>The factor <picture><source srcset="form_965_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ij}$" src="form_965.png"/></picture> that multiplies <picture><source srcset="form_1579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_j$" src="form_1579.png"/></picture>. </td></tr>
   </table>
   </dd>
 </dl>
@@ -981,11 +981,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set an inhomogeneity to the constraint for a degree of freedom. In other words, it adds a constant <picture><source srcset="form_1586_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_i$" src="form_1586.png"/></picture> to the constraint for degree of freedom <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>. For this to work, you need to call <a class="el" href="#href_anchor">add_line()</a> first for the given degree of freedom.</p>
+<p>Set an inhomogeneity to the constraint for a degree of freedom. In other words, it adds a constant <picture><source srcset="form_1580_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_i$" src="form_1580.png"/></picture> to the constraint for degree of freedom <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>. For this to work, you need to call <a class="el" href="#href_anchor">add_line()</a> first for the given degree of freedom.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">constrained_dof_index</td><td>The index <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> of the degree of freedom that is being constrained. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">value</td><td>The right hand side value <picture><source srcset="form_1586_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_i$" src="form_1586.png"/></picture> for the constraint on the degree of freedom <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">constrained_dof_index</td><td>The index <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> of the degree of freedom that is being constrained. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">value</td><td>The right hand side value <picture><source srcset="form_1580_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_i$" src="form_1580.png"/></picture> for the constraint on the degree of freedom <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>. </td></tr>
   </table>
   </dd>
 </dl>
@@ -1013,9 +1013,9 @@
 <p>Close the filling of entries. Since the lines of a matrix of this type are usually filled in an arbitrary order and since we do not want to use associative constrainers to store the lines, we need to sort the lines and within the lines the columns before usage of the matrix. This is done through this function.</p>
 <p>Also, zero entries are discarded, since they are not needed.</p>
 <p>After closing, no more entries are accepted. If the object was already closed, then this function returns immediately.</p>
-<p>This function also resolves chains of constraints. For example, degree of freedom 13 may be constrained to <picture><source srcset="form_1587_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_{13} = \frac{u_3}{2} + \frac{u_7}{2}$" src="form_1587.png"/></picture> while degree of freedom 7 is itself constrained as <picture><source srcset="form_1588_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_{7} = \frac{u_2}{2}
-+ \frac{u_4}{2}$" src="form_1588.png"/></picture>. Then, the resolution will be that <picture><source srcset="form_1589_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_{13} =
-\frac{u_3}{2} + \frac{u_2}{4} + \frac{u_4}{4}$" src="form_1589.png"/></picture>. Note, however, that cycles in this graph of constraints are not allowed, i.e., for example <picture><source srcset="form_1590_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_4$" src="form_1590.png"/></picture> may not itself be constrained, directly or indirectly, to <picture><source srcset="form_1591_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_{13}$" src="form_1591.png"/></picture> again. </p>
+<p>This function also resolves chains of constraints. For example, degree of freedom 13 may be constrained to <picture><source srcset="form_1581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_{13} = \frac{u_3}{2} + \frac{u_7}{2}$" src="form_1581.png"/></picture> while degree of freedom 7 is itself constrained as <picture><source srcset="form_1582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_{7} = \frac{u_2}{2}
++ \frac{u_4}{2}$" src="form_1582.png"/></picture>. Then, the resolution will be that <picture><source srcset="form_1583_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_{13} =
+\frac{u_3}{2} + \frac{u_2}{4} + \frac{u_4}{4}$" src="form_1583.png"/></picture>. Note, however, that cycles in this graph of constraints are not allowed, i.e., for example <picture><source srcset="form_1584_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_4$" src="form_1584.png"/></picture> may not itself be constrained, directly or indirectly, to <picture><source srcset="form_1585_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_{13}$" src="form_1585.png"/></picture> again. </p>
 
 </div>
 </div>
@@ -1445,9 +1445,9 @@
 </div><div class="memdoc">
 <p>Print the constraints represented by the current object to the given stream.</p>
 <p>For each constraint of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_1592_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1586_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  x_{42} = 0.5 x_2 + 0.25 x_{14} + 2.75
-\]" src="form_1592.png"/></picture>
+\]" src="form_1586.png"/></picture>
 </p>
 <p> this function will write a sequence of lines that look like this: </p><div class="fragment"><div class="line">42 2 : 0.5</div>
 <div class="line">42 14 : 0.25</div>
@@ -2025,7 +2025,7 @@
 </div><div class="memdoc">
 <p>This function takes a matrix of local contributions (<code>local_matrix</code>) corresponding to the degrees of freedom indices given in <code>local_dof_indices</code> and distributes them to the global matrix. In other words, this function implements a <a href="https://en.wikipedia.org/wiki/Gather-scatter_(vector_addressing)">scatter operation</a>. In most cases, these local contributions will be the result of an integration over a cell or face of a cell. However, as long as <code>local_matrix</code> and <code>local_dof_indices</code> have the same number of elements, this function is happy with whatever it is given.</p>
 <p>In contrast to the similar function in the <a class="el" href="classDoFAccessor.html">DoFAccessor</a> class, this function also takes care of constraints, i.e. if one of the elements of <code>local_dof_indices</code> belongs to a constrained node, then rather than writing the corresponding element of <code>local_matrix</code> into <code>global_matrix</code>, the element is distributed to the entries in the global matrix to which this particular degree of freedom is constrained.</p>
-<p>With this scheme, we never write into rows or columns of constrained degrees of freedom. In order to make sure that the resulting matrix can still be inverted, we need to do something with the diagonal elements corresponding to constrained nodes. Thus, if a degree of freedom in <code>local_dof_indices</code> is constrained, we distribute the corresponding entries in the matrix, but also add the absolute value of the diagonal entry of the local matrix to the corresponding entry in the global matrix. Assuming the discretized operator is positive definite, this guarantees that the diagonal entry is always non-zero, positive, and of the same order of magnitude as the other entries of the matrix. On the other hand, when solving a source problem <picture><source srcset="form_1593_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Au=f$" src="form_1593.png"/></picture> the exact value of the diagonal element is not important, since the value of the respective degree of freedom will be overwritten by the <a class="el" href="#href_anchor">distribute()</a> call later on anyway.</p>
+<p>With this scheme, we never write into rows or columns of constrained degrees of freedom. In order to make sure that the resulting matrix can still be inverted, we need to do something with the diagonal elements corresponding to constrained nodes. Thus, if a degree of freedom in <code>local_dof_indices</code> is constrained, we distribute the corresponding entries in the matrix, but also add the absolute value of the diagonal entry of the local matrix to the corresponding entry in the global matrix. Assuming the discretized operator is positive definite, this guarantees that the diagonal entry is always non-zero, positive, and of the same order of magnitude as the other entries of the matrix. On the other hand, when solving a source problem <picture><source srcset="form_1587_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Au=f$" src="form_1587.png"/></picture> the exact value of the diagonal element is not important, since the value of the respective degree of freedom will be overwritten by the <a class="el" href="#href_anchor">distribute()</a> call later on anyway.</p>
 <dl class="section note"><dt>Note</dt><dd>The procedure described above adds an unforeseeable number of artificial eigenvalues to the spectrum of the matrix. Therefore, it is recommended to use the equivalent function with two local index vectors in such a case.</dd></dl>
 <p>By using this function to distribute local contributions to the global object, one saves the call to the condense function after the vectors and matrices are fully assembled.</p>
 <dl class="section note"><dt>Note</dt><dd>This function in itself is thread-safe, i.e., it works properly also when several threads call it simultaneously. However, the function call is only thread-safe if the underlying global matrix allows for simultaneous access and the access is not to rows with the same global index at the same time. This needs to be made sure from the caller's site. There is no locking mechanism inside this method to prevent data races. </dd></dl>
@@ -2067,7 +2067,7 @@
       </table>
 </div><div class="memdoc">
 <p>This function does almost the same as the function above but can treat general rectangular matrices. The main difference to achieve this is that the diagonal entries in constrained rows are left untouched instead of being filled with arbitrary values.</p>
-<p>Since the diagonal entries corresponding to eliminated degrees of freedom are not set, the result may have a zero eigenvalue, if applied to a square matrix. This has to be considered when solving the resulting problems. For solving a source problem <picture><source srcset="form_1593_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Au=f$" src="form_1593.png"/></picture>, it is possible to set the diagonal entry after building the matrix by a piece of code of the form</p>
+<p>Since the diagonal entries corresponding to eliminated degrees of freedom are not set, the result may have a zero eigenvalue, if applied to a square matrix. This has to be considered when solving the resulting problems. For solving a source problem <picture><source srcset="form_1587_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Au=f$" src="form_1587.png"/></picture>, it is possible to set the diagonal entry after building the matrix by a piece of code of the form</p>
 <div class="fragment"><div class="line"><span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0;i&lt;matrix.m();++i)</div>
 <div class="line">  <span class="keywordflow">if</span> (constraints.is_constrained(i))</div>
 <div class="line">    matrix.diag_element(i) = 1.;</div>
@@ -2356,7 +2356,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Given a vector, set all constrained degrees of freedom to values so that the constraints are satisfied. For example, if the current object stores the constraint <picture><source srcset="form_1594_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_3=\frac 12 x_1 + \frac 12 x_2$" src="form_1594.png"/></picture>, then this function will read the values of <picture><source srcset="form_1467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_1$" src="form_1467.png"/></picture> and <picture><source srcset="form_60_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_2$" src="form_60.png"/></picture> from the given vector and set the element <picture><source srcset="form_62_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_3$" src="form_62.png"/></picture> according to this constraints. Similarly, if the current object stores the constraint <picture><source srcset="form_1595_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_{42}=208$" src="form_1595.png"/></picture>, then this function will set the 42nd element of the given vector to 208.</p>
+<p>Given a vector, set all constrained degrees of freedom to values so that the constraints are satisfied. For example, if the current object stores the constraint <picture><source srcset="form_1588_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_3=\frac 12 x_1 + \frac 12 x_2$" src="form_1588.png"/></picture>, then this function will read the values of <picture><source srcset="form_1393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_1$" src="form_1393.png"/></picture> and <picture><source srcset="form_60_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_2$" src="form_60.png"/></picture> from the given vector and set the element <picture><source srcset="form_62_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_3$" src="form_62.png"/></picture> according to this constraints. Similarly, if the current object stores the constraint <picture><source srcset="form_1589_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_{42}=208$" src="form_1589.png"/></picture>, then this function will set the 42nd element of the given vector to 208.</p>
 <dl class="section note"><dt>Note</dt><dd>If this function is called with a parallel vector <code>vec</code>, then the vector must not contain ghost elements. </dd></dl>
 
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classAlgorithms_1_1ThetaTimestepping.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classAlgorithms_1_1ThetaTimestepping.html	2024-03-17 21:57:17.699075283 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classAlgorithms_1_1ThetaTimestepping.html	2024-03-17 21:57:17.707075331 +0000
@@ -219,9 +219,9 @@
 <p>For fixed <a class="el" href="#href_anchor">theta</a>, the Crank-Nicolson scheme is the only second order scheme. Nevertheless, further stability may be achieved by choosing <a class="el" href="#href_anchor">theta</a> larger than ½, thereby introducing a first order error term. In order to avoid a loss of convergence order, the adaptive theta scheme can be used, where <em><a class="el" href="#href_anchor">theta</a>=½+c dt</em>.</p>
 <p>Assume that we want to solve the equation <em>u' + F(u) = 0</em> with a step size <em>k</em>. A step of the theta scheme can be written as</p>
 <p class="formulaDsp">
-<picture><source srcset="form_366_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_351_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   M u_{n+1} + \theta k F(u_{n+1})  = M u_n - (1-\theta)k F(u_n).
-\]" src="form_366.png"/></picture>
+\]" src="form_351.png"/></picture>
 </p>
 <p>Here, <em>M</em> is the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>. We see, that the right hand side amounts to an explicit Euler step with modified step size in weak form (up to inversion of M). The left hand side corresponds to an implicit Euler step with modified step size (right hand side given). Thus, the implementation of the theta scheme will use two Operator objects, one for the explicit, one for the implicit part. Each of these will use its own <a class="el" href="structAlgorithms_1_1TimestepData.html">TimestepData</a> to account for the modified step sizes (and different times if the problem is not autonomous). Note that once the explicit part has been computed, the left hand side actually constitutes a linear or nonlinear system which has to be solved.</p>
 <h3>Usage <a class="el" href="classAnyData.html">AnyData</a></h3>
@@ -301,8 +301,8 @@
 <div class="line">}</div>
 <div class="ttc" id="aclassFullMatrix_html_a4f94aa6df67b8da6a1a31c052ff74bcd"><div class="ttname"><a href="classFullMatrix.html#href_anchor">FullMatrix::n</a></div><div class="ttdeci">size_type n() const</div></div>
 <div class="ttc" id="aclassFullMatrix_html_ae353e09fdd66b9df250520434f9c9275"><div class="ttname"><a href="classFullMatrix.html#href_anchor">FullMatrix::m</a></div><div class="ttdeci">size_type m() const</div></div>
-</div><!-- fragment --><p>Now we need to study the application of the implicit and explicit operator. We assume that the pointer <code>matrix</code> points to the matrix created in the main program (the constructor did this for us). Here, we first get the time step size from the <a class="el" href="classAnyData.html">AnyData</a> object that was provided as input. Then, if we are in the first step or if the timestep has changed, we fill the local matrix <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture>, such that with the given matrix <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture>, it becomes </p><p class="formulaDsp">
-<picture><source srcset="form_368_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ m = I - \Delta t M. \]" src="form_368.png"/></picture>
+</div><!-- fragment --><p>Now we need to study the application of the implicit and explicit operator. We assume that the pointer <code>matrix</code> points to the matrix created in the main program (the constructor did this for us). Here, we first get the time step size from the <a class="el" href="classAnyData.html">AnyData</a> object that was provided as input. Then, if we are in the first step or if the timestep has changed, we fill the local matrix <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture>, such that with the given matrix <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture>, it becomes </p><p class="formulaDsp">
+<picture><source srcset="form_353_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ m = I - \Delta t M. \]" src="form_353.png"/></picture>
 </p>
 <p> After we have worked off the notifications, we clear them, such that the matrix is only generated when necessary.</p>
 <div class="fragment"><div class="line"><span class="keywordtype">void</span> Explicit::operator()(<a class="code hl_class" href="classAnyData.html">AnyData</a> &amp;out, <span class="keyword">const</span> <a class="code hl_class" href="classAnyData.html">AnyData</a> &amp;in)</div>
@@ -1142,7 +1142,7 @@
 </table>
 </div><div class="memdoc">
 <p>The operator computing the explicit part of the scheme. This will receive in its input data the value at the current time with name "Current time solution". It should obtain the current time and time step size from <a class="el" href="#href_anchor">explicit_data()</a>.</p>
-<p>Its return value is <picture><source srcset="form_369_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ Mu+cF(u) $" src="form_369.png"/></picture>, where <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> is the current state vector, <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>, <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> the operator in space and <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture> is the adjusted time step size <picture><source srcset="form_372_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1-\theta) \Delta t$" src="form_372.png"/></picture>. </p>
+<p>Its return value is <picture><source srcset="form_354_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ Mu+cF(u) $" src="form_354.png"/></picture>, where <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> is the current state vector, <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>, <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> the operator in space and <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture> is the adjusted time step size <picture><source srcset="form_357_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1-\theta) \Delta t$" src="form_357.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="theta__timestepping_8h_source.html#href_anchor">416</a> of file <a class="el" href="theta__timestepping_8h_source.html">theta_timestepping.h</a>.</p>
 
@@ -1170,7 +1170,7 @@
 </table>
 </div><div class="memdoc">
 <p>The operator solving the implicit part of the scheme. It will receive in its input data the vector "Previous time". Information on the timestep should be obtained from <a class="el" href="#href_anchor">implicit_data()</a>.</p>
-<p>Its return value is the solution <em>u</em> of <em>Mu-cF(u)=f</em>, where <em>f</em> is the dual space vector found in the "Previous time" entry of the input data, <em>M</em> the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>, <em>F</em> the operator in space and <em>c</em> is the adjusted time step size <picture><source srcset="form_373_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \theta \Delta t$" src="form_373.png"/></picture> </p>
+<p>Its return value is the solution <em>u</em> of <em>Mu-cF(u)=f</em>, where <em>f</em> is the dual space vector found in the "Previous time" entry of the input data, <em>M</em> the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>, <em>F</em> the operator in space and <em>c</em> is the adjusted time step size <picture><source srcset="form_358_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \theta \Delta t$" src="form_358.png"/></picture> </p>
 
 <p class="definition">Definition at line <a class="el" href="theta__timestepping_8h_source.html#href_anchor">428</a> of file <a class="el" href="theta__timestepping_8h_source.html">theta_timestepping.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classAnisotropicPolynomials.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classAnisotropicPolynomials.html	2024-03-17 21:57:17.747075579 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classAnisotropicPolynomials.html	2024-03-17 21:57:17.751075603 +0000
@@ -154,10 +154,10 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
 class AnisotropicPolynomials&lt; dim &gt;</div><p>Anisotropic tensor product of given polynomials.</p>
-<p>Given one-dimensional polynomials <picture><source srcset="form_869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^x_1(x), P^x_2(x), \ldots$" src="form_869.png"/></picture> in <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>-direction, <picture><source srcset="form_870_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^y_1(y), P^y_2(y), \ldots$" src="form_870.png"/></picture> in <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>-direction, and so on, this class generates polynomials of the form <picture><source srcset="form_871_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_{ijk}(x,y,z)
-= P^x_i(x)P^y_j(y)P^z_k(z)$" src="form_871.png"/></picture>. (With obvious generalization if <code>dim</code> is in fact only 2. If <code>dim</code> is in fact only 1, then the result is simply the same set of one-dimensional polynomials passed to the constructor.)</p>
-<p>If the elements of each set of base polynomials are mutually orthogonal on the interval <picture><source srcset="form_582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]$" src="form_582.png"/></picture> or <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture>, then the tensor product polynomials are orthogonal on <picture><source srcset="form_464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^d$" src="form_464.png"/></picture> or <picture><source srcset="form_872_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]^d$" src="form_872.png"/></picture>, respectively.</p>
-<p>The resulting <code>dim-dimensional</code> tensor product polynomials are ordered as follows: We iterate over the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> coordinates running fastest, then the <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> coordinate, etc. For example, for <code>dim==2</code>, the first few polynomials are thus <picture><source srcset="form_873_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^x_1(x)P^y_1(y)$" src="form_873.png"/></picture>, <picture><source srcset="form_874_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^x_2(x)P^y_1(y)$" src="form_874.png"/></picture>, <picture><source srcset="form_875_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^x_3(x)P^y_1(y)$" src="form_875.png"/></picture>, ..., <picture><source srcset="form_876_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^x_1(x)P^y_2(y)$" src="form_876.png"/></picture>, <picture><source srcset="form_877_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^x_2(x)P^y_2(y)$" src="form_877.png"/></picture>, <picture><source srcset="form_878_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^x_3(x)P^y_2(y)$" src="form_878.png"/></picture>, etc. </p>
+<p>Given one-dimensional polynomials <picture><source srcset="form_867_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^x_1(x), P^x_2(x), \ldots$" src="form_867.png"/></picture> in <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>-direction, <picture><source srcset="form_868_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^y_1(y), P^y_2(y), \ldots$" src="form_868.png"/></picture> in <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>-direction, and so on, this class generates polynomials of the form <picture><source srcset="form_869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_{ijk}(x,y,z)
+= P^x_i(x)P^y_j(y)P^z_k(z)$" src="form_869.png"/></picture>. (With obvious generalization if <code>dim</code> is in fact only 2. If <code>dim</code> is in fact only 1, then the result is simply the same set of one-dimensional polynomials passed to the constructor.)</p>
+<p>If the elements of each set of base polynomials are mutually orthogonal on the interval <picture><source srcset="form_582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]$" src="form_582.png"/></picture> or <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture>, then the tensor product polynomials are orthogonal on <picture><source srcset="form_464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^d$" src="form_464.png"/></picture> or <picture><source srcset="form_870_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]^d$" src="form_870.png"/></picture>, respectively.</p>
+<p>The resulting <code>dim-dimensional</code> tensor product polynomials are ordered as follows: We iterate over the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> coordinates running fastest, then the <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> coordinate, etc. For example, for <code>dim==2</code>, the first few polynomials are thus <picture><source srcset="form_871_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^x_1(x)P^y_1(y)$" src="form_871.png"/></picture>, <picture><source srcset="form_872_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^x_2(x)P^y_1(y)$" src="form_872.png"/></picture>, <picture><source srcset="form_873_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^x_3(x)P^y_1(y)$" src="form_873.png"/></picture>, ..., <picture><source srcset="form_874_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^x_1(x)P^y_2(y)$" src="form_874.png"/></picture>, <picture><source srcset="form_875_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^x_2(x)P^y_2(y)$" src="form_875.png"/></picture>, <picture><source srcset="form_876_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^x_3(x)P^y_2(y)$" src="form_876.png"/></picture>, etc. </p>
 
 <p class="definition">Definition at line <a class="el" href="tensor__product__polynomials_8h_source.html#href_anchor">322</a> of file <a class="el" href="tensor__product__polynomials_8h_source.html">tensor_product_polynomials.h</a>.</p>
 </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
@@ -590,7 +590,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Each tensor product polynomial <picture><source srcset="form_211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_i$" src="form_211.png"/></picture> is a product of one-dimensional polynomials in each space direction. Compute the indices of these one- dimensional polynomials for each space direction, given the index <code>i</code>. </p>
+<p>Each tensor product polynomial <picture><source srcset="form_185_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_i$" src="form_185.png"/></picture> is a product of one-dimensional polynomials in each space direction. Compute the indices of these one- dimensional polynomials for each space direction, given the index <code>i</code>. </p>
 
 <p class="definition">Definition at line <a class="el" href="tensor__product__polynomials_8cc_source.html#href_anchor">538</a> of file <a class="el" href="tensor__product__polynomials_8cc_source.html">tensor_product_polynomials.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classArpackSolver.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classArpackSolver.html	2024-03-17 21:57:17.787075826 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classArpackSolver.html	2024-03-17 21:57:17.791075851 +0000
@@ -230,14 +230,14 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>Interface for using ARPACK. ARPACK is a collection of Fortran77 subroutines designed to solve large scale eigenvalue problems. Here we interface to the routines <code>dnaupd</code> and <code>dneupd</code> of ARPACK. If the operator is specified to be symmetric we use the symmetric interface <code>dsaupd</code> and <code>dseupd</code> of ARPACK instead. The package is designed to compute a few eigenvalues and corresponding eigenvectors of a general n by n matrix A. It is most appropriate for large sparse matrices A.</p>
-<p>In this class we make use of the method applied to the generalized eigenspectrum problem <picture><source srcset="form_1577_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(A-\lambda B)x=0$" src="form_1577.png"/></picture>, for <picture><source srcset="form_1578_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x\neq0$" src="form_1578.png"/></picture>; where <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is a system matrix, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is a <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>, and <picture><source srcset="form_1579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda, x$" src="form_1579.png"/></picture> are a set of eigenvalues and eigenvectors respectively.</p>
+<p>In this class we make use of the method applied to the generalized eigenspectrum problem <picture><source srcset="form_1590_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(A-\lambda B)x=0$" src="form_1590.png"/></picture>, for <picture><source srcset="form_1591_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x\neq0$" src="form_1591.png"/></picture>; where <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is a system matrix, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is a <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>, and <picture><source srcset="form_1592_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda, x$" src="form_1592.png"/></picture> are a set of eigenvalues and eigenvectors respectively.</p>
 <p>The <a class="el" href="classArpackSolver.html">ArpackSolver</a> can be used in application codes with serial objects in the following way: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classSolverControl.html">SolverControl</a> <a class="code hl_variable" href="#href_anchor">solver_control</a>(1000, 1e-9);</div>
 <div class="line"><a class="code hl_class" href="classArpackSolver.html">ArpackSolver</a> solver(<a class="code hl_variable" href="#href_anchor">solver_control</a>);</div>
 <div class="line">solver.solve(A, B, OP, lambda, x, size_of_spectrum);</div>
 <div class="ttc" id="aclassArpackSolver_html"><div class="ttname"><a href="classArpackSolver.html">ArpackSolver</a></div><div class="ttdef"><b>Definition</b> <a href="arpack__solver_8h_source.html#href_anchor">arpack_solver.h:168</a></div></div>
 <div class="ttc" id="aclassArpackSolver_html_aa55ed3dd9b50c86e637be3d6159239b6"><div class="ttname"><a href="#href_anchor">ArpackSolver::solver_control</a></div><div class="ttdeci">SolverControl &amp; solver_control</div><div class="ttdef"><b>Definition</b> <a href="arpack__solver_8h_source.html#href_anchor">arpack_solver.h:349</a></div></div>
 <div class="ttc" id="aclassSolverControl_html"><div class="ttname"><a href="classSolverControl.html">SolverControl</a></div><div class="ttdef"><b>Definition</b> <a href="solver__control_8h_source.html#href_anchor">solver_control.h:68</a></div></div>
-</div><!-- fragment --><p> for the generalized eigenvalue problem <picture><source srcset="form_1580_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=B\lambda x$" src="form_1580.png"/></picture>, where the variable <code>size_of_spectrum</code> tells ARPACK the number of eigenvector/eigenvalue pairs to solve for. Here, <code>lambda</code> is a vector that will contain the eigenvalues computed, <code>x</code> a vector that will contain the eigenvectors computed, and <code>OP</code> is an inverse operation for the matrix <code>A</code>. Shift and invert transformation around zero is applied.</p>
+</div><!-- fragment --><p> for the generalized eigenvalue problem <picture><source srcset="form_1593_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=B\lambda x$" src="form_1593.png"/></picture>, where the variable <code>size_of_spectrum</code> tells ARPACK the number of eigenvector/eigenvalue pairs to solve for. Here, <code>lambda</code> is a vector that will contain the eigenvalues computed, <code>x</code> a vector that will contain the eigenvectors computed, and <code>OP</code> is an inverse operation for the matrix <code>A</code>. Shift and invert transformation around zero is applied.</p>
 <p>Through the <a class="el" href="structArpackSolver_1_1AdditionalData.html">AdditionalData</a> the user can specify some of the parameters to be set.</p>
 <p>For further information on how the ARPACK routines <code>dsaupd</code>, <code>dseupd</code>, <code>dnaupd</code> and <code>dneupd</code> work and also how to set the parameters appropriately please take a look into the ARPACK manual.</p>
 <dl class="section note"><dt>Note</dt><dd>Whenever you eliminate degrees of freedom using <a class="el" href="classAffineConstraints.html">AffineConstraints</a>, you generate spurious eigenvalues and eigenvectors. If you make sure that the diagonals of eliminated matrix rows are all equal to one, you get a single additional eigenvalue. But beware that some functions in deal.II set these diagonals to rather arbitrary (from the point of view of eigenvalue problems) values. See also <a class="el" href="step_36.html">step-36</a> for an example. </dd></dl>
@@ -510,7 +510,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Solve the generalized eigensprectrum problem <picture><source srcset="form_1582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A x=\lambda B x$" src="form_1582.png"/></picture> by calling the <code>dsaupd</code> and <code>dseupd</code> or <code>dnaupd</code> and <code>dneupd</code> functions of ARPACK.</p>
+<p>Solve the generalized eigensprectrum problem <picture><source srcset="form_1594_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A x=\lambda B x$" src="form_1594.png"/></picture> by calling the <code>dsaupd</code> and <code>dseupd</code> or <code>dnaupd</code> and <code>dneupd</code> functions of ARPACK.</p>
 <p>The function returns a vector of eigenvalues of length <em>n</em> and a vector of eigenvectors of length <em>n</em> in the symmetric case and of length <em>n+1</em> in the non-symmetric case. In the symmetric case all eigenvectors are real. In the non-symmetric case complex eigenvalues always occur as complex conjugate pairs. Therefore the eigenvector for an eigenvalue with nonzero complex part is stored by putting the real and the imaginary parts in consecutive real-valued vectors. The eigenvector of the complex conjugate eigenvalue does not need to be stored, since it is just the complex conjugate of the stored eigenvector. Thus, if the last n-th eigenvalue has a nonzero imaginary part, Arpack needs in total n+1 real-valued vectors to store real and imaginary parts of the eigenvectors.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
/usr/share/doc/packages/dealii/doxygen/deal.II/classArrayView.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classArrayView.html	2024-03-17 21:57:17.859076270 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classArrayView.html	2024-03-17 21:57:17.859076270 +0000
@@ -1025,7 +1025,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a reference to the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th element of the range represented by the current object.</p>
+<p>Return a reference to the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th element of the range represented by the current object.</p>
 <p>This function is marked as <code>const</code> because it does not change the <em>view object</em>. It may however return a reference to a non-<code>const</code> memory location depending on whether the template type of the class is <code>const</code> or not.</p>
 <p>This function is only allowed to be called if the underlying data is indeed stored in CPU memory. </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classAutoDerivativeFunction.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classAutoDerivativeFunction.html	2024-03-17 21:57:17.915076617 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classAutoDerivativeFunction.html	2024-03-17 21:57:17.915076617 +0000
@@ -353,27 +353,27 @@
 <p>Names of difference formulas. </p>
 <table class="fieldtable">
 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a8e3a3152c1a97076b961dcb35a3bb36babf0b91e6181d44127eb8d23ff080f286" name="a8e3a3152c1a97076b961dcb35a3bb36babf0b91e6181d44127eb8d23ff080f286"></a>Euler&#160;</td><td class="fielddoc"><p>The symmetric Euler formula of second order:  </p><p class="formulaDsp">
-<picture><source srcset="form_351_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_359_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u'(t) \approx
 \frac{u(t+h) -
 u(t-h)}{2h}.
-\]" src="form_351.png"/></picture>
+\]" src="form_359.png"/></picture>
 </p>
  </td></tr>
 <tr><td class="fieldname"><a id="a8e3a3152c1a97076b961dcb35a3bb36bab261116ff92510dff59a179b43fdb444" name="a8e3a3152c1a97076b961dcb35a3bb36bab261116ff92510dff59a179b43fdb444"></a>UpwindEuler&#160;</td><td class="fielddoc"><p>The upwind Euler formula of first order:  </p><p class="formulaDsp">
-<picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u'(t) \approx
 \frac{u(t) -
 u(t-h)}{h}.
-\]" src="form_352.png"/></picture>
+\]" src="form_360.png"/></picture>
 </p>
  </td></tr>
 <tr><td class="fieldname"><a id="a8e3a3152c1a97076b961dcb35a3bb36ba1d80de60e448c04501ec359c16b6c08d" name="a8e3a3152c1a97076b961dcb35a3bb36ba1d80de60e448c04501ec359c16b6c08d"></a>FourthOrder&#160;</td><td class="fielddoc"><p>The fourth order scheme  </p><p class="formulaDsp">
-<picture><source srcset="form_353_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_361_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u'(t) \approx
 \frac{u(t-2h) - 8u(t-h)
 +  8u(t+h) - u(t+2h)}{12h}.
-\]" src="form_353.png"/></picture>
+\]" src="form_361.png"/></picture>
 </p>
  </td></tr>
 </table>
/usr/share/doc/packages/dealii/doxygen/deal.II/classBarycentricPolynomial.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classBarycentricPolynomial.html	2024-03-17 21:57:17.951076839 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classBarycentricPolynomial.html	2024-03-17 21:57:17.955076863 +0000
@@ -153,7 +153,7 @@
   (x, y) = c_0 (x_0, y_0) + c_1 (x_1, y_1) + c_2 (x_2, y_2).
 \]" src="form_626.png"/></picture>
 </p>
-<p>where each value <picture><source srcset="form_519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_i$" src="form_519.png"/></picture> is the relative weight of each vertex (so the centroid is, in 2d, where each <picture><source srcset="form_627_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_i = 1/3$" src="form_627.png"/></picture>). Since we only consider convex combinations we can rewrite this equation as</p>
+<p>where each value <picture><source srcset="form_528_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_i$" src="form_528.png"/></picture> is the relative weight of each vertex (so the centroid is, in 2d, where each <picture><source srcset="form_627_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_i = 1/3$" src="form_627.png"/></picture>). Since we only consider convex combinations we can rewrite this equation as</p>
 <p class="formulaDsp">
 <picture><source srcset="form_628_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (x, y) = (1 - c_1 - c_2) (x_0, y_0) + c_1 (x_1, y_1) + c_2 (x_2, y_2).
/usr/share/doc/packages/dealii/doxygen/deal.II/classBaseQR.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classBaseQR.html	2024-03-17 21:57:17.987077061 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classBaseQR.html	2024-03-17 21:57:17.991077086 +0000
@@ -156,8 +156,8 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;typename VectorType&gt;<br />
 class BaseQR&lt; VectorType &gt;</div><p>A base class for thin <a class="el" href="classQR.html">QR</a> implementations.</p>
-<p>This class and classes derived from it are meant to build <picture><source srcset="form_1639_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q$" src="form_1639.png"/></picture> and <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> matrices one row/column at a time, i.e., by growing <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> matrix from an empty <picture><source srcset="form_1757_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0\times 0$" src="form_1757.png"/></picture> matrix to <picture><source srcset="form_1216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N\times N$" src="form_1216.png"/></picture>, where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> is the number of added column vectors.</p>
-<p>As a consequence, matrices which have the same number of rows as each vector (i.e. <picture><source srcset="form_1639_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q$" src="form_1639.png"/></picture> matrix) is stored as a collection of vectors of <code>VectorType</code>. </p>
+<p>This class and classes derived from it are meant to build <picture><source srcset="form_1642_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q$" src="form_1642.png"/></picture> and <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> matrices one row/column at a time, i.e., by growing <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> matrix from an empty <picture><source srcset="form_1756_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0\times 0$" src="form_1756.png"/></picture> matrix to <picture><source srcset="form_1216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N\times N$" src="form_1216.png"/></picture>, where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> is the number of added column vectors.</p>
+<p>As a consequence, matrices which have the same number of rows as each vector (i.e. <picture><source srcset="form_1642_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q$" src="form_1642.png"/></picture> matrix) is stored as a collection of vectors of <code>VectorType</code>. </p>
 
 <p class="definition">Definition at line <a class="el" href="qr_8h_source.html#href_anchor">44</a> of file <a class="el" href="qr_8h_source.html">qr.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
@@ -368,7 +368,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>transpose</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
-<p>Solve <picture><source srcset="form_1762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Rx=y$" src="form_1762.png"/></picture>. Vectors <code>x</code> and <code>y</code> should be consistent with the current size of the subspace. If <code>transpose</code> is <code>true</code>, <picture><source srcset="form_1763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^Tx=y$" src="form_1763.png"/></picture> is solved instead. </p>
+<p>Solve <picture><source srcset="form_1761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Rx=y$" src="form_1761.png"/></picture>. Vectors <code>x</code> and <code>y</code> should be consistent with the current size of the subspace. If <code>transpose</code> is <code>true</code>, <picture><source srcset="form_1762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^Tx=y$" src="form_1762.png"/></picture> is solved instead. </p>
 
 </div>
 </div>
@@ -400,7 +400,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set <picture><source srcset="form_1764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = Qx$" src="form_1764.png"/></picture>. The size of <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> should be consistent with the size of the R matrix. </p>
+<p>Set <picture><source srcset="form_1763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = Qx$" src="form_1763.png"/></picture>. The size of <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> should be consistent with the size of the R matrix. </p>
 
 <p>Implemented in <a class="el" href="classQR.html#href_anchor">QR&lt; VectorType &gt;</a>, and <a class="el" href="classImplicitQR.html#href_anchor">ImplicitQR&lt; VectorType &gt;</a>.</p>
 
@@ -434,7 +434,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set <picture><source srcset="form_1765_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = Q^Tx$" src="form_1765.png"/></picture>. The size of <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> should be consistent with the size of column vectors. </p>
+<p>Set <picture><source srcset="form_1764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = Q^Tx$" src="form_1764.png"/></picture>. The size of <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> should be consistent with the size of column vectors. </p>
 
 <p>Implemented in <a class="el" href="classQR.html#href_anchor">QR&lt; VectorType &gt;</a>, and <a class="el" href="classImplicitQR.html#href_anchor">ImplicitQR&lt; VectorType &gt;</a>.</p>
 
@@ -468,7 +468,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set <picture><source srcset="form_1766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = QRx$" src="form_1766.png"/></picture>. The size of <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> should be consistent with the size of the R matrix. </p>
+<p>Set <picture><source srcset="form_1765_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = QRx$" src="form_1765.png"/></picture>. The size of <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> should be consistent with the size of the R matrix. </p>
 
 <p>Implemented in <a class="el" href="classQR.html#href_anchor">QR&lt; VectorType &gt;</a>, and <a class="el" href="classImplicitQR.html#href_anchor">ImplicitQR&lt; VectorType &gt;</a>.</p>
 
@@ -502,7 +502,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set <picture><source srcset="form_1767_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = R^T Q^Tx$" src="form_1767.png"/></picture>. The size of <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> should be consistent with the size of column vectors. </p>
+<p>Set <picture><source srcset="form_1766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = R^T Q^Tx$" src="form_1766.png"/></picture>. The size of <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> should be consistent with the size of column vectors. </p>
 
 <p>Implemented in <a class="el" href="classQR.html#href_anchor">QR&lt; VectorType &gt;</a>, and <a class="el" href="classImplicitQR.html#href_anchor">ImplicitQR&lt; VectorType &gt;</a>.</p>
 
@@ -557,7 +557,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute <picture><source srcset="form_1768_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=Hx$" src="form_1768.png"/></picture> where <picture><source srcset="form_1769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H$" src="form_1769.png"/></picture> is the matrix formed by the column vectors stored by this object. </p>
+<p>Compute <picture><source srcset="form_1767_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=Hx$" src="form_1767.png"/></picture> where <picture><source srcset="form_1768_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H$" src="form_1768.png"/></picture> is the matrix formed by the column vectors stored by this object. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockIndices.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classBlockIndices.html	2024-03-17 21:57:18.031077333 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classBlockIndices.html	2024-03-17 21:57:18.039077383 +0000
@@ -210,7 +210,7 @@
 </td></tr>
 <tr class="memitem:adbc4eb912f3af63b72c45f008c64b60b" id="r_adbc4eb912f3af63b72c45f008c64b60b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#href_anchor">swap</a> (<a class="el" href="classBlockIndices.html">BlockIndices</a> &amp;u, <a class="el" href="classBlockIndices.html">BlockIndices</a> &amp;v)</td></tr>
 <tr class="separator:adbc4eb912f3af63b72c45f008c64b60b"><td class="memSeparator" colspan="2">&#href_anchor"details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p><a class="el" href="classBlockIndices.html">BlockIndices</a> represents a range of indices (such as the range <picture><source srcset="form_1581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,N)$" src="form_1581.png"/></picture> of valid indices for elements of a vector) and how this one range is broken down into smaller but contiguous "blocks" (such as the velocity and pressure parts of a solution vector). In particular, it provides the ability to translate between global indices and the indices <em>within</em> a block. This class is used, for example, in the <a class="el" href="classBlockVector.html">BlockVector</a>, <a class="el" href="classBlockSparsityPattern.html">BlockSparsityPattern</a>, and <a class="el" href="classBlockMatrixBase.html">BlockMatrixBase</a> classes.</p>
+<div class="textblock"><p><a class="el" href="classBlockIndices.html">BlockIndices</a> represents a range of indices (such as the range <picture><source srcset="form_1595_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,N)$" src="form_1595.png"/></picture> of valid indices for elements of a vector) and how this one range is broken down into smaller but contiguous "blocks" (such as the velocity and pressure parts of a solution vector). In particular, it provides the ability to translate between global indices and the indices <em>within</em> a block. This class is used, for example, in the <a class="el" href="classBlockVector.html">BlockVector</a>, <a class="el" href="classBlockSparsityPattern.html">BlockSparsityPattern</a>, and <a class="el" href="classBlockMatrixBase.html">BlockMatrixBase</a> classes.</p>
 <p>The information that can be obtained from this class falls into two groups. First, it is possible to query the global size of the index space (through the <a class="el" href="#href_anchor">total_size()</a> member function), and the number of blocks and their sizes (via <a class="el" href="#href_anchor">size()</a> and the <a class="el" href="#href_anchor">block_size()</a> functions).</p>
 <p>Secondly, this class manages the conversion of global indices to the local indices within this block, and the other way around. This is required, for example, when you address a global element in a block vector and want to know within which block this is, and which index within this block it corresponds to. It is also useful if a matrix is composed of several blocks, where you have to translate global row and column indices to local ones.</p>
 <dl class="section see"><dt>See also</dt><dd><a class="el" href="DEALGlossary.html#href_anchor">Block (linear algebra)</a> </dd></dl>
/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockLinearOperator.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classBlockLinearOperator.html	2024-03-17 21:57:18.095077729 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classBlockLinearOperator.html	2024-03-17 21:57:18.099077753 +0000
@@ -787,9 +787,9 @@
 <div class="ttc" id="agroup__constraints_html_ga814d426ef355ed315bb57cea21a7630a"><div class="ttname"><a href="group__constraints.html#href_anchor">LinearOperator&lt; Range, Domain, BlockPayload::BlockType &gt;::distribute_constraints_linear_operator</a></div><div class="ttdeci">LinearOperator&lt; Range, Domain, BlockPayload::BlockType &gt; distribute_constraints_linear_operator(const AffineConstraints&lt; typename Range::value_type &gt; &amp;constraints, const LinearOperator&lt; Range, Domain, BlockPayload::BlockType &gt; &amp;exemplar)</div><div class="ttdef"><b>Definition</b> <a href="constrained__linear__operator_8h_source.html#href_anchor">constrained_linear_operator.h:65</a></div></div>
 </div><!-- fragment --><p> and <code>Id_c</code> is the projection to the subspace consisting of all vector entries associated with constrained degrees of freedom.</p>
 <p>This <a class="el" href="classLinearOperator.html">LinearOperator</a> object is used together with <a class="el" href="group__constraints.html#href_anchor">constrained_right_hand_side()</a> to build up the following modified system of linear equations:  </p><p class="formulaDsp">
-<picture><source srcset="form_1612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (C^T A C + Id_c) x = C^T (b - A\,k)
-\]" src="form_1612.png"/></picture>
+\]" src="form_1616.png"/></picture>
 </p>
 <p> with a given (unconstrained) system matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture>, right hand side <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture>, and linear constraints <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> with inhomogeneities <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>.</p>
 <p>A detailed explanation of this approach is given in the <a class="el" href="group__constraints.html">Constraints on degrees of freedom</a> module.</p>
@@ -830,9 +830,9 @@
 </div><!-- fragment --><p> with </p><div class="fragment"><div class="line">C = <a class="code hl_function" href="group__constraints.html#href_anchor">distribute_constraints_linear_operator</a>(constraints, linop);</div>
 <div class="line">Ct = <a class="code hl_function" href="group__LAOperators.html#href_anchor">transpose_operator</a>(C);</div>
 </div><!-- fragment --><p>This <a class="el" href="classLinearOperator.html">LinearOperator</a> object is used together with <a class="el" href="group__constraints.html#href_anchor">constrained_right_hand_side()</a> to build up the following modified system of linear equations:  </p><p class="formulaDsp">
-<picture><source srcset="form_1612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (C^T A C + Id_c) x = C^T (b - A\,k)
-\]" src="form_1612.png"/></picture>
+\]" src="form_1616.png"/></picture>
 </p>
 <p> with a given (unconstrained) system matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture>, right hand side <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture>, and linear constraints <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> with inhomogeneities <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>.</p>
 <p>A detailed explanation of this approach is given in the <a class="el" href="group__constraints.html">Constraints on degrees of freedom</a> module.</p>
@@ -1530,7 +1530,7 @@
 <p>Return a <a class="el" href="classLinearOperator.html">LinearOperator</a> that performs the operations associated with the Schur complement. There are two additional helper functions, <a class="el" href="group__LAOperators.html#href_anchor">condense_schur_rhs()</a> and <a class="el" href="group__LAOperators.html#href_anchor">postprocess_schur_solution()</a>, that are likely necessary to be used in order to perform any useful tasks in linear algebra with this operator.</p>
 <p>We construct the definition of the Schur complement in the following way:</p>
 <p>Consider a general system of linear equations that can be decomposed into two major sets of equations:  </p><p class="formulaDsp">
-<picture><source srcset="form_1781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_1852_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \mathbf{K}\mathbf{d} = \mathbf{f}
 \quad \Rightarrow\quad
 \left(\begin{array}{cc}
@@ -1543,60 +1543,60 @@
 \left(\begin{array}{cc}
    f \\ g
 \end{array}\right),
-\end{eqnarray*}" src="form_1781.png"/></picture>
+\end{eqnarray*}" src="form_1852.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1782_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A,B,C,D $" src="form_1782.png"/></picture> represent general subblocks of the matrix <picture><source srcset="form_1783_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf{K} $" src="form_1783.png"/></picture> and, similarly, general subvectors of <picture><source srcset="form_1784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf{d},\mathbf{f} $" src="form_1784.png"/></picture> are given by <picture><source srcset="form_1785_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ x,y,f,g $" src="form_1785.png"/></picture> .</p>
+<p> where <picture><source srcset="form_1853_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A,B,C,D $" src="form_1853.png"/></picture> represent general subblocks of the matrix <picture><source srcset="form_1854_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf{K} $" src="form_1854.png"/></picture> and, similarly, general subvectors of <picture><source srcset="form_1855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf{d},\mathbf{f} $" src="form_1855.png"/></picture> are given by <picture><source srcset="form_1856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ x,y,f,g $" src="form_1856.png"/></picture> .</p>
 <p>This is equivalent to the following two statements:  </p><p class="formulaDsp">
-<picture><source srcset="form_1786_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_1857_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (1) \quad Ax + By &amp;=&amp; f \\
   (2) \quad Cx + Dy &amp;=&amp; g \quad .
-\end{eqnarray*}" src="form_1786.png"/></picture>
+\end{eqnarray*}" src="form_1857.png"/></picture>
 </p>
-<p>Assuming that <picture><source srcset="form_1787_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A,D $" src="form_1787.png"/></picture> are both square and invertible, we could then perform one of two possible substitutions,  </p><p class="formulaDsp">
-<picture><source srcset="form_1788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>Assuming that <picture><source srcset="form_1858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A,D $" src="form_1858.png"/></picture> are both square and invertible, we could then perform one of two possible substitutions,  </p><p class="formulaDsp">
+<picture><source srcset="form_1859_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (3) \quad x &amp;=&amp; A^{-1}(f - By) \quad \text{from} \quad (1) \\
   (4) \quad y &amp;=&amp; D^{-1}(g - Cx) \quad \text{from} \quad (2) ,
-\end{eqnarray*}" src="form_1788.png"/></picture>
+\end{eqnarray*}" src="form_1859.png"/></picture>
 </p>
 <p> which amount to performing block Gaussian elimination on this system of equations.</p>
 <p>For the purpose of the current implementation, we choose to substitute (3) into (2)  </p><p class="formulaDsp">
-<picture><source srcset="form_1789_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_1860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   C \: A^{-1}(f - By) + Dy &amp;=&amp; g \\
   -C \: A^{-1} \: By + Dy &amp;=&amp; g - C \: A^{-1} \: f \quad .
-\end{eqnarray*}" src="form_1789.png"/></picture>
+\end{eqnarray*}" src="form_1860.png"/></picture>
 </p>
 <p> This leads to the result  </p><p class="formulaDsp">
-<picture><source srcset="form_1790_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (5) \quad (D - C\: A^{-1} \:B)y  = g - C \: A^{-1} f
       \quad \Rightarrow \quad Sy = g'
-\]" src="form_1790.png"/></picture>
+\]" src="form_1861.png"/></picture>
 </p>
-<p> with <picture><source srcset="form_1791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S = (D - C\: A^{-1} \:B) $" src="form_1791.png"/></picture> being the Schur complement and the modified right-hand side vector <picture><source srcset="form_1792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ g' = g - C \: A^{-1} f $" src="form_1792.png"/></picture> arising from the condensation step. Note that for this choice of <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1793.png"/></picture>, submatrix <picture><source srcset="form_1794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1794.png"/></picture> need not be invertible and may thus be the null matrix. Ideally <picture><source srcset="form_1795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A $" src="form_1795.png"/></picture> should be well-conditioned.</p>
-<p>So for any arbitrary vector <picture><source srcset="form_1796_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ a $" src="form_1796.png"/></picture>, the Schur complement performs the following operation:  </p><p class="formulaDsp">
-<picture><source srcset="form_1797_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> with <picture><source srcset="form_1862_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S = (D - C\: A^{-1} \:B) $" src="form_1862.png"/></picture> being the Schur complement and the modified right-hand side vector <picture><source srcset="form_1863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ g' = g - C \: A^{-1} f $" src="form_1863.png"/></picture> arising from the condensation step. Note that for this choice of <picture><source srcset="form_1864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1864.png"/></picture>, submatrix <picture><source srcset="form_1865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1865.png"/></picture> need not be invertible and may thus be the null matrix. Ideally <picture><source srcset="form_1866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A $" src="form_1866.png"/></picture> should be well-conditioned.</p>
+<p>So for any arbitrary vector <picture><source srcset="form_1867_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ a $" src="form_1867.png"/></picture>, the Schur complement performs the following operation:  </p><p class="formulaDsp">
+<picture><source srcset="form_1868_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (6) \quad Sa = (D - C \: A^{-1} \: B)a
-\]" src="form_1797.png"/></picture>
+\]" src="form_1868.png"/></picture>
 </p>
 <p>A typical set of steps needed the solve a linear system (1),(2) would be:</p><ol type="1">
 <li>Define the inverse matrix <code>A_inv</code> (using <a class="el" href="group__LAOperators.html#href_anchor">inverse_operator()</a>).</li>
-<li>Define the Schur complement <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1793.png"/></picture> (using <a class="el" href="group__LAOperators.html#href_anchor">schur_complement()</a>).</li>
-<li>Define iterative inverse matrix <picture><source srcset="form_1798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1798.png"/></picture> such that (6) holds. It is necessary to use a solver with a preconditioner to compute the approximate inverse operation of <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1793.png"/></picture> since we never compute <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1793.png"/></picture> directly, but rather the result of its operation. To achieve this, one may again use the <a class="el" href="group__LAOperators.html#href_anchor">inverse_operator()</a> in conjunction with the Schur complement that we've just constructed. Observe that the both <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1793.png"/></picture> and its preconditioner operate over the same space as <picture><source srcset="form_1794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1794.png"/></picture>.</li>
+<li>Define the Schur complement <picture><source srcset="form_1864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1864.png"/></picture> (using <a class="el" href="group__LAOperators.html#href_anchor">schur_complement()</a>).</li>
+<li>Define iterative inverse matrix <picture><source srcset="form_1869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1869.png"/></picture> such that (6) holds. It is necessary to use a solver with a preconditioner to compute the approximate inverse operation of <picture><source srcset="form_1864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1864.png"/></picture> since we never compute <picture><source srcset="form_1864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1864.png"/></picture> directly, but rather the result of its operation. To achieve this, one may again use the <a class="el" href="group__LAOperators.html#href_anchor">inverse_operator()</a> in conjunction with the Schur complement that we've just constructed. Observe that the both <picture><source srcset="form_1864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1864.png"/></picture> and its preconditioner operate over the same space as <picture><source srcset="form_1865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1865.png"/></picture>.</li>
 <li>Perform pre-processing step on the RHS of (5) using <a class="el" href="group__LAOperators.html#href_anchor">condense_schur_rhs()</a>:  <p class="formulaDsp">
-<picture><source srcset="form_1799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1870_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
      g' = g - C \: A^{-1} \: f
-   \]" src="form_1799.png"/></picture>
+   \]" src="form_1870.png"/></picture>
 </p>
 </li>
-<li>Solve for <picture><source srcset="form_1800_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ y $" src="form_1800.png"/></picture> in (5):  <p class="formulaDsp">
-<picture><source srcset="form_1801_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<li>Solve for <picture><source srcset="form_1871_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ y $" src="form_1871.png"/></picture> in (5):  <p class="formulaDsp">
+<picture><source srcset="form_1872_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
      y =  S^{-1} g'
-   \]" src="form_1801.png"/></picture>
+   \]" src="form_1872.png"/></picture>
 </p>
 </li>
 <li>Perform the post-processing step from (3) using <a class="el" href="group__LAOperators.html#href_anchor">postprocess_schur_solution()</a>:  <p class="formulaDsp">
-<picture><source srcset="form_1802_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1873_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
      x =  A^{-1} (f - By)
-   \]" src="form_1802.png"/></picture>
+   \]" src="form_1873.png"/></picture>
 </p>
 </li>
 </ol>
@@ -1642,10 +1642,10 @@
 <div class="ttc" id="agroup__LAOperators_html_ga87e38fbde431397c069a88692bd24ae7"><div class="ttname"><a href="group__LAOperators.html#href_anchor">LinearOperator&lt; Range, Domain, BlockPayload::BlockType &gt;::inverse_operator</a></div><div class="ttdeci">LinearOperator&lt; Domain, Range, BlockPayload::BlockType &gt; inverse_operator(const LinearOperator&lt; Range, Domain, BlockPayload::BlockType &gt; &amp;op, Solver &amp;solver, const Preconditioner &amp;preconditioner)</div><div class="ttdef"><b>Definition</b> <a href="linear__operator_8h_source.html#href_anchor">linear_operator.h:701</a></div></div>
 <div class="ttc" id="agroup__LAOperators_html_gab965c40b54990bbcbc129a1cd218ee21"><div class="ttname"><a href="group__LAOperators.html#href_anchor">postprocess_schur_solution</a></div><div class="ttdeci">PackagedOperation&lt; Domain_1 &gt; postprocess_schur_solution(const LinearOperator&lt; Range_1, Domain_1, Payload &gt; &amp;A_inv, const LinearOperator&lt; Range_1, Domain_2, Payload &gt; &amp;B, const Domain_2 &amp;y, const Range_1 &amp;f)</div><div class="ttdef"><b>Definition</b> <a href="schur__complement_8h_source.html#href_anchor">schur_complement.h:336</a></div></div>
 <div class="ttc" id="aschur__complement_8h_html"><div class="ttname"><a href="schur__complement_8h.html">schur_complement.h</a></div></div>
-</div><!-- fragment --><p>In the above example, the preconditioner for <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1793.png"/></picture> was defined as the preconditioner for <picture><source srcset="form_1794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1794.png"/></picture>, which is valid since they operate on the same space. However, if <picture><source srcset="form_1794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1794.png"/></picture> and <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1793.png"/></picture> are too dissimilar, then this may lead to a large number of solver iterations as <picture><source srcset="form_1803_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \text{prec}(D) $" src="form_1803.png"/></picture> is not a good approximation for <picture><source srcset="form_1798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1798.png"/></picture>.</p>
-<p>A better preconditioner in such a case would be one that provides a more representative approximation for <picture><source srcset="form_1798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1798.png"/></picture>. One approach is shown in <a class="el" href="step_22.html">step-22</a>, where <picture><source srcset="form_1794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1794.png"/></picture> is the null matrix and the preconditioner for <picture><source srcset="form_1804_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1}
-$" src="form_1804.png"/></picture> is derived from the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> over this space.</p>
-<p>From another viewpoint, a similar result can be achieved by first constructing an object that represents an approximation for <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1793.png"/></picture> wherein expensive operation, namely <picture><source srcset="form_1805_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A^{-1} $" src="form_1805.png"/></picture>, is approximated. Thereafter we construct the approximate inverse operator <picture><source srcset="form_1806_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \tilde{S}^{-1} $" src="form_1806.png"/></picture> which is then used as the preconditioner for computing <picture><source srcset="form_1798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1798.png"/></picture>. </p><div class="fragment"><div class="line"><span class="comment">// Construction of approximate inverse of Schur complement</span></div>
+</div><!-- fragment --><p>In the above example, the preconditioner for <picture><source srcset="form_1864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1864.png"/></picture> was defined as the preconditioner for <picture><source srcset="form_1865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1865.png"/></picture>, which is valid since they operate on the same space. However, if <picture><source srcset="form_1865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1865.png"/></picture> and <picture><source srcset="form_1864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1864.png"/></picture> are too dissimilar, then this may lead to a large number of solver iterations as <picture><source srcset="form_1874_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \text{prec}(D) $" src="form_1874.png"/></picture> is not a good approximation for <picture><source srcset="form_1869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1869.png"/></picture>.</p>
+<p>A better preconditioner in such a case would be one that provides a more representative approximation for <picture><source srcset="form_1869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1869.png"/></picture>. One approach is shown in <a class="el" href="step_22.html">step-22</a>, where <picture><source srcset="form_1865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1865.png"/></picture> is the null matrix and the preconditioner for <picture><source srcset="form_1875_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1}
+$" src="form_1875.png"/></picture> is derived from the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> over this space.</p>
+<p>From another viewpoint, a similar result can be achieved by first constructing an object that represents an approximation for <picture><source srcset="form_1864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1864.png"/></picture> wherein expensive operation, namely <picture><source srcset="form_1876_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A^{-1} $" src="form_1876.png"/></picture>, is approximated. Thereafter we construct the approximate inverse operator <picture><source srcset="form_1877_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \tilde{S}^{-1} $" src="form_1877.png"/></picture> which is then used as the preconditioner for computing <picture><source srcset="form_1869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1869.png"/></picture>. </p><div class="fragment"><div class="line"><span class="comment">// Construction of approximate inverse of Schur complement</span></div>
 <div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> A_inv_approx = <a class="code hl_function" href="group__LAOperators.html#href_anchor">linear_operator</a>(preconditioner_A);</div>
 <div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> S_approx = <a class="code hl_function" href="group__LAOperators.html#href_anchor">schur_complement</a>(A_inv_approx,B,C,D);</div>
 <div class="line"> </div>
@@ -1668,8 +1668,8 @@
 <div class="line"><span class="comment">// Solve for y</span></div>
 <div class="line">y = S_inv * rhs;</div>
 <div class="line">x = <a class="code hl_function" href="group__LAOperators.html#href_anchor">postprocess_schur_solution</a> (A_inv,B,y,f);</div>
-</div><!-- fragment --><p> Note that due to the construction of <code>S_inv_approx</code> and subsequently <code>S_inv</code>, there are a pair of nested iterative solvers which could collectively consume a lot of resources. Therefore care should be taken in the choices leading to the construction of the iterative inverse_operators. One might consider the use of a <a class="el" href="classIterationNumberControl.html">IterationNumberControl</a> (or a similar mechanism) to limit the number of inner solver iterations. This controls the accuracy of the approximate inverse operation <picture><source srcset="form_1806_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \tilde{S}^{-1} $" src="form_1806.png"/></picture> which acts only as the preconditioner for <picture><source srcset="form_1798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1798.png"/></picture>. Furthermore, the preconditioner to <picture><source srcset="form_1806_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \tilde{S}^{-1} $" src="form_1806.png"/></picture>, which in this example is <picture><source srcset="form_1807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$
-\text{prec}(D) $" src="form_1807.png"/></picture>, should ideally be computationally inexpensive.</p>
+</div><!-- fragment --><p> Note that due to the construction of <code>S_inv_approx</code> and subsequently <code>S_inv</code>, there are a pair of nested iterative solvers which could collectively consume a lot of resources. Therefore care should be taken in the choices leading to the construction of the iterative inverse_operators. One might consider the use of a <a class="el" href="classIterationNumberControl.html">IterationNumberControl</a> (or a similar mechanism) to limit the number of inner solver iterations. This controls the accuracy of the approximate inverse operation <picture><source srcset="form_1877_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \tilde{S}^{-1} $" src="form_1877.png"/></picture> which acts only as the preconditioner for <picture><source srcset="form_1869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1869.png"/></picture>. Furthermore, the preconditioner to <picture><source srcset="form_1877_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \tilde{S}^{-1} $" src="form_1877.png"/></picture>, which in this example is <picture><source srcset="form_1878_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$
+\text{prec}(D) $" src="form_1878.png"/></picture>, should ideally be computationally inexpensive.</p>
 <p>However, if an iterative solver based on <a class="el" href="classIterationNumberControl.html">IterationNumberControl</a> is used as a preconditioner then the preconditioning operation is not a linear operation. Here a flexible solver like <a class="el" href="classSolverFGMRES.html">SolverFGMRES</a> (flexible GMRES) is best employed as an outer solver in order to deal with the variable behavior of the preconditioner. Otherwise the iterative solver can stagnate somewhere near the tolerance of the preconditioner or generally behave erratically. Alternatively, using a <a class="el" href="classReductionControl.html">ReductionControl</a> would ensure that the preconditioner always solves to the same tolerance, thereby rendering its behavior constant.</p>
 <p>Further examples of this functionality can be found in the test-suite, such as <code>tests/lac/schur_complement_01.cc</code> . The solution of a multi- component problem (namely <a class="el" href="step_22.html">step-22</a>) using the schur_complement can be found in <code>tests/lac/schur_complement_03.cc</code> .</p>
 <dl class="section see"><dt>See also</dt><dd><a class="el" href="DEALGlossary.html#href_anchor">Block (linear algebra)</a> </dd></dl>
@@ -1692,7 +1692,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the number of blocks in a column (i.e, the number of "block rows", or the number <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture>, if interpreted as a <picture><source srcset="form_966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m\times n$" src="form_966.png"/></picture> block system). </p>
+<p>Return the number of blocks in a column (i.e, the number of "block rows", or the number <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture>, if interpreted as a <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m\times n$" src="form_1000.png"/></picture> block system). </p>
 
 <p class="definition">Definition at line <a class="el" href="block__linear__operator_8h_source.html#href_anchor">297</a> of file <a class="el" href="block__linear__operator_8h_source.html">block_linear_operator.h</a>.</p>
 
@@ -1711,7 +1711,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the number of blocks in a row (i.e, the number of "block columns", or the number <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>, if interpreted as a <picture><source srcset="form_966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m\times n$" src="form_966.png"/></picture> block system). </p>
+<p>Return the number of blocks in a row (i.e, the number of "block columns", or the number <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>, if interpreted as a <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m\times n$" src="form_1000.png"/></picture> block system). </p>
 
 <p class="definition">Definition at line <a class="el" href="block__linear__operator_8h_source.html#href_anchor">303</a> of file <a class="el" href="block__linear__operator_8h_source.html">block_linear_operator.h</a>.</p>
 
@@ -1730,7 +1730,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Access the block with the given coordinates. This <code>std::function</code> object returns a <a class="el" href="classLinearOperator.html">LinearOperator</a> representing the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture>-th block of the <a class="el" href="classBlockLinearOperator.html">BlockLinearOperator</a>. </p>
+<p>Access the block with the given coordinates. This <code>std::function</code> object returns a <a class="el" href="classLinearOperator.html">LinearOperator</a> representing the <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture>-th block of the <a class="el" href="classBlockLinearOperator.html">BlockLinearOperator</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="block__linear__operator_8h_source.html#href_anchor">310</a> of file <a class="el" href="block__linear__operator_8h_source.html">block_linear_operator.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockMatrixBase.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classBlockMatrixBase.html	2024-03-17 21:57:18.159078124 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classBlockMatrixBase.html	2024-03-17 21:57:18.159078124 +0000
@@ -1296,7 +1296,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const BlockVectorType &amp;</td>          <td class="paramname"><span class="paramname"><em>src</em></span>&#href_anchor"memdoc">
-<p>Adding Matrix-vector multiplication. Add <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M*src$" src="form_1599.png"/></picture> on <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1600.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. </p>
+<p>Adding Matrix-vector multiplication. Add <picture><source srcset="form_1598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M*src$" src="form_1598.png"/></picture> on <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1599.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. </p>
 
 </div>
 </div>
@@ -1385,7 +1385,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const BlockVectorType &amp;</td>          <td class="paramname"><span class="paramname"><em>v</em></span>&#href_anchor"memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1601.png"/></picture>. </p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1600.png"/></picture>. </p>
 
 </div>
 </div>
@@ -1744,7 +1744,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1598.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix.</p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1601.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix.</p>
 <p>Due to problems with deriving template arguments between the block and non-block versions of the vmult/Tvmult functions, the actual functions are implemented in derived classes, with implementations forwarding the calls to the implementations provided here under a unique name for which template arguments can be derived by the compiler. </p>
 
 </div>
@@ -1868,7 +1868,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. This function does the same as vmult() but takes the transposed matrix.</p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. This function does the same as vmult() but takes the transposed matrix.</p>
 <p>Due to problems with deriving template arguments between the block and non-block versions of the vmult/Tvmult functions, the actual functions are implemented in derived classes, with implementations forwarding the calls to the implementations provided here under a unique name for which template arguments can be derived by the compiler. </p>
 
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockSparseMatrix.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classBlockSparseMatrix.html	2024-03-17 21:57:18.235078593 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classBlockSparseMatrix.html	2024-03-17 21:57:18.235078593 +0000
@@ -941,7 +941,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1598.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. </p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1601.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. </p>
 
 <p class="definition">Definition at line <a class="el" href="block__sparse__matrix_8h_source.html#href_anchor">396</a> of file <a class="el" href="block__sparse__matrix_8h_source.html">block_sparse_matrix.h</a>.</p>
 
@@ -1069,7 +1069,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult()</a> but takes the transposed matrix. </p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult()</a> but takes the transposed matrix. </p>
 
 <p class="definition">Definition at line <a class="el" href="block__sparse__matrix_8h_source.html#href_anchor">440</a> of file <a class="el" href="block__sparse__matrix_8h_source.html">block_sparse_matrix.h</a>.</p>
 
@@ -2061,7 +2061,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Adding Matrix-vector multiplication. Add <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M*src$" src="form_1599.png"/></picture> on <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1600.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. </p>
+<p>Adding Matrix-vector multiplication. Add <picture><source srcset="form_1598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M*src$" src="form_1598.png"/></picture> on <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1599.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. </p>
 
 </div>
 </div>
@@ -2166,7 +2166,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1601.png"/></picture>. </p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1600.png"/></picture>. </p>
 
 </div>
 </div>
@@ -2609,7 +2609,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1598.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix.</p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1601.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix.</p>
 <p>Due to problems with deriving template arguments between the block and non-block versions of the vmult/Tvmult functions, the actual functions are implemented in derived classes, with implementations forwarding the calls to the implementations provided here under a unique name for which template arguments can be derived by the compiler. </p>
 
 </div>
@@ -2717,7 +2717,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult()</a> but takes the transposed matrix.</p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult()</a> but takes the transposed matrix.</p>
 <p>Due to problems with deriving template arguments between the block and non-block versions of the vmult/Tvmult functions, the actual functions are implemented in derived classes, with implementations forwarding the calls to the implementations provided here under a unique name for which template arguments can be derived by the compiler. </p>
 
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockSparseMatrixEZ.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classBlockSparseMatrixEZ.html	2024-03-17 21:57:18.283078890 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classBlockSparseMatrixEZ.html	2024-03-17 21:57:18.291078940 +0000
@@ -754,7 +754,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classBlockVector.html">BlockVector</a>&lt; somenumber &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>src</em></span>&#href_anchor"memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1598.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. </p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1601.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. </p>
 
 <p class="definition">Definition at line <a class="el" href="block__sparse__matrix__ez_8h_source.html#href_anchor">371</a> of file <a class="el" href="block__sparse__matrix__ez_8h_source.html">block_sparse_matrix_ez.h</a>.</p>
 
@@ -779,7 +779,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classBlockVector.html">BlockVector</a>&lt; somenumber &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>src</em></span>&#href_anchor"memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult()</a> but takes the transposed matrix. </p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult()</a> but takes the transposed matrix. </p>
 
 <p class="definition">Definition at line <a class="el" href="block__sparse__matrix__ez_8h_source.html#href_anchor">409</a> of file <a class="el" href="block__sparse__matrix__ez_8h_source.html">block_sparse_matrix_ez.h</a>.</p>
 
@@ -804,7 +804,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classBlockVector.html">BlockVector</a>&lt; somenumber &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>src</em></span>&#href_anchor"memdoc">
-<p>Adding Matrix-vector multiplication. Add <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M*src$" src="form_1599.png"/></picture> on <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1600.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. </p>
+<p>Adding Matrix-vector multiplication. Add <picture><source srcset="form_1598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M*src$" src="form_1598.png"/></picture> on <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1599.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. </p>
 
 <p class="definition">Definition at line <a class="el" href="block__sparse__matrix__ez_8h_source.html#href_anchor">391</a> of file <a class="el" href="block__sparse__matrix__ez_8h_source.html">block_sparse_matrix_ez.h</a>.</p>
 
@@ -829,7 +829,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classBlockVector.html">BlockVector</a>&lt; somenumber &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>src</em></span>&#href_anchor"memdoc">
-<p>Adding Matrix-vector multiplication. Add <picture><source srcset="form_1603_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^T*src$" src="form_1603.png"/></picture> to <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1600.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult_add()</a> but takes the transposed matrix. </p>
+<p>Adding Matrix-vector multiplication. Add <picture><source srcset="form_1603_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^T*src$" src="form_1603.png"/></picture> to <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1599.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult_add()</a> but takes the transposed matrix. </p>
 
 <p class="definition">Definition at line <a class="el" href="block__sparse__matrix__ez_8h_source.html#href_anchor">429</a> of file <a class="el" href="block__sparse__matrix__ez_8h_source.html">block_sparse_matrix_ez.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockVector.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classBlockVector.html	2024-03-17 21:57:18.359079359 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classBlockVector.html	2024-03-17 21:57:18.367079409 +0000
@@ -1768,7 +1768,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the square of the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm. </p>
+<p>Return the square of the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm. </p>
 
 </div>
 </div>
@@ -1820,7 +1820,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm of the vector, i.e. the sum of the absolute values. </p>
+<p>Return the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm of the vector, i.e. the sum of the absolute values. </p>
 
 </div>
 </div>
@@ -1846,7 +1846,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm of the vector, i.e. the square root of the sum of the squares of the elements. </p>
+<p>Return the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm of the vector, i.e. the square root of the sum of the squares of the elements. </p>
 
 </div>
 </div>
@@ -1872,7 +1872,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the maximum absolute value of the elements of this vector, which is the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of a vector. </p>
+<p>Return the maximum absolute value of the elements of this vector, which is the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of a vector. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classBlockVectorBase.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classBlockVectorBase.html	2024-03-17 21:57:18.427079779 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classBlockVectorBase.html	2024-03-17 21:57:18.431079804 +0000
@@ -1218,7 +1218,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the square of the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm. </p>
+<p>Return the square of the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm. </p>
 
 </div>
 </div>
@@ -1258,7 +1258,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm of the vector, i.e. the sum of the absolute values. </p>
+<p>Return the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm of the vector, i.e. the sum of the absolute values. </p>
 
 </div>
 </div>
@@ -1278,7 +1278,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm of the vector, i.e. the square root of the sum of the squares of the elements. </p>
+<p>Return the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm of the vector, i.e. the square root of the sum of the squares of the elements. </p>
 
 </div>
 </div>
@@ -1298,7 +1298,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the maximum absolute value of the elements of this vector, which is the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of a vector. </p>
+<p>Return the maximum absolute value of the elements of this vector, which is the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of a vector. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classBoundingBox.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classBoundingBox.html	2024-03-17 21:57:18.475080077 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classBoundingBox.html	2024-03-17 21:57:18.475080077 +0000
@@ -166,11 +166,11 @@
 <tr class="separator:a057ce1a0b2bbcd36756b53dc601cbb36"><td class="memSeparator" colspan="2">&#href_anchor"details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> spacedim, typename Number = double&gt;<br />
 class BoundingBox&lt; spacedim, Number &gt;</div><p>A class that represents a box of arbitrary dimension <code>spacedim</code> and with sides parallel to the coordinate axes, that is, a region  </p><p class="formulaDsp">
-<picture><source srcset="form_354_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_362_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 [x_0^L, x_0^U] \times ... \times [x_{spacedim-1}^L, x_{spacedim-1}^U],
-\]" src="form_354.png"/></picture>
+\]" src="form_362.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_0^L , ..., x_{spacedim-1}^L)$" src="form_355.png"/></picture> and <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_0^U , ..., x_{spacedim-1}^U)$" src="form_356.png"/></picture> denote the two vertices (bottom left and top right) which are used to represent the box. The quantities <picture><source srcset="form_357_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_k^L$" src="form_357.png"/></picture> and <picture><source srcset="form_358_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_k^U$" src="form_358.png"/></picture> denote the "lower" and "upper" bounds of values that are within the box for each coordinate direction <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>.</p>
+<p> where <picture><source srcset="form_363_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_0^L , ..., x_{spacedim-1}^L)$" src="form_363.png"/></picture> and <picture><source srcset="form_364_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_0^U , ..., x_{spacedim-1}^U)$" src="form_364.png"/></picture> denote the two vertices (bottom left and top right) which are used to represent the box. The quantities <picture><source srcset="form_365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_k^L$" src="form_365.png"/></picture> and <picture><source srcset="form_366_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_k^U$" src="form_366.png"/></picture> denote the "lower" and "upper" bounds of values that are within the box for each coordinate direction <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>.</p>
 <p>Geometrically, a bounding box is thus:</p><ul>
 <li>1d: a segment (represented by its vertices in the proper order)</li>
 <li>2d: a rectangle (represented by the vertices V at bottom left, top right) <div class="fragment"><div class="line">.--------V</div>
@@ -186,7 +186,7 @@
 </div><!-- fragment --></li>
 </ul>
 <p>Bounding boxes are, for example, useful in parallel distributed meshes to give a general description of the owners of each portion of the mesh. More generally, bounding boxes are often used to roughly describe a region of space in which an object is contained; if a candidate point is not within the bounding box (a test that is cheap to execute), then it is not necessary to perform an expensive test whether the candidate point is in fact inside the object itself. Bounding boxes are therefore often used as a first, cheap rejection test before more detailed checks. As such, bounding boxes serve many of the same purposes as the <a href="https://en.wikipedia.org/wiki/Convex_hull">convex hull</a>, for which it is also relatively straightforward to compute whether a point is inside or outside, though not quite as cheap as for the bounding box.</p>
-<p>Taking the cross section of a BoundingBox&lt;spacedim&gt; orthogonal to a given direction gives a box in one dimension lower: <a class="el" href="classBoundingBox.html">BoundingBox</a>&lt;spacedim - 1&gt;. In 3d, the 2 coordinates of the cross section of BoundingBox&lt;3&gt; can be ordered in 2 different ways. That is, if we take the cross section orthogonal to the y direction we could either order a 3d-coordinate into a 2d-coordinate as <picture><source srcset="form_359_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x,z)$" src="form_359.png"/></picture> or as <picture><source srcset="form_360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(z,x)$" src="form_360.png"/></picture>. This class uses the second convention, corresponding to the coordinates being ordered cyclicly <picture><source srcset="form_361_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x \rightarrow y \rightarrow z \rightarrow x \rightarrow ... $" src="form_361.png"/></picture> To be precise, if we take a cross section:</p>
+<p>Taking the cross section of a BoundingBox&lt;spacedim&gt; orthogonal to a given direction gives a box in one dimension lower: <a class="el" href="classBoundingBox.html">BoundingBox</a>&lt;spacedim - 1&gt;. In 3d, the 2 coordinates of the cross section of BoundingBox&lt;3&gt; can be ordered in 2 different ways. That is, if we take the cross section orthogonal to the y direction we could either order a 3d-coordinate into a 2d-coordinate as <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x,z)$" src="form_367.png"/></picture> or as <picture><source srcset="form_368_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(z,x)$" src="form_368.png"/></picture>. This class uses the second convention, corresponding to the coordinates being ordered cyclicly <picture><source srcset="form_369_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x \rightarrow y \rightarrow z \rightarrow x \rightarrow ... $" src="form_369.png"/></picture> To be precise, if we take a cross section:</p>
 <table class="markdownTable">
 <tr class="markdownTableHead">
 <th class="markdownTableHeadCenter">Orthogonal to   </th><th class="markdownTableHeadCenter">Cross section coordinates ordered as    </th></tr>
@@ -731,7 +731,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Returns the indexth vertex of the box. Vertex is meant in the same way as for a cell, so that <code>index</code> <picture><source srcset="form_362_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\in [0, 2^{\text{dim}} - 1]$" src="form_362.png"/></picture>. </p>
+<p>Returns the indexth vertex of the box. Vertex is meant in the same way as for a cell, so that <code>index</code> <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\in [0, 2^{\text{dim}} - 1]$" src="form_370.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="bounding__box_8cc_source.html#href_anchor">233</a> of file <a class="el" href="bounding__box_8cc_source.html">bounding_box.cc</a>.</p>
 
@@ -799,7 +799,7 @@
       </table>
 </div><div class="memdoc">
 <p>Apply the affine transformation that transforms this <a class="el" href="classBoundingBox.html">BoundingBox</a> to a unit <a class="el" href="classBoundingBox.html">BoundingBox</a> object.</p>
-<p>If <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is this bounding box, and <picture><source srcset="form_363_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{B}$" src="form_363.png"/></picture> is the unit bounding box, compute the affine mapping that satisfies <picture><source srcset="form_364_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G(B) = \hat{B}$" src="form_364.png"/></picture> and apply it to <code>point</code>. </p>
+<p>If <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is this bounding box, and <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{B}$" src="form_371.png"/></picture> is the unit bounding box, compute the affine mapping that satisfies <picture><source srcset="form_372_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G(B) = \hat{B}$" src="form_372.png"/></picture> and apply it to <code>point</code>. </p>
 
 <p class="definition">Definition at line <a class="el" href="bounding__box_8cc_source.html#href_anchor">312</a> of file <a class="el" href="bounding__box_8cc_source.html">bounding_box.cc</a>.</p>
 
@@ -822,7 +822,7 @@
       </table>
 </div><div class="memdoc">
 <p>Apply the affine transformation that transforms the unit <a class="el" href="classBoundingBox.html">BoundingBox</a> object to this object.</p>
-<p>If <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is this bounding box, and <picture><source srcset="form_363_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{B}$" src="form_363.png"/></picture> is the unit bounding box, compute the affine mapping that satisfies <picture><source srcset="form_365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(\hat{B}) = B$" src="form_365.png"/></picture> and apply it to <code>point</code>. </p>
+<p>If <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is this bounding box, and <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{B}$" src="form_371.png"/></picture> is the unit bounding box, compute the affine mapping that satisfies <picture><source srcset="form_373_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(\hat{B}) = B$" src="form_373.png"/></picture> and apply it to <code>point</code>. </p>
 
 <p class="definition">Definition at line <a class="el" href="bounding__box_8cc_source.html#href_anchor">327</a> of file <a class="el" href="bounding__box_8cc_source.html">bounding_box.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classCUDAWrappers_1_1PreconditionIC.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classCUDAWrappers_1_1PreconditionIC.html	2024-03-17 21:57:18.511080298 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classCUDAWrappers_1_1PreconditionIC.html	2024-03-17 21:57:18.515080323 +0000
@@ -480,7 +480,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>cuSPARSE description of the lower triangular matrix <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>. </p>
+<p>cuSPARSE description of the lower triangular matrix <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="cuda__precondition_8h_source.html#href_anchor">176</a> of file <a class="el" href="cuda__precondition_8h_source.html">cuda_precondition.h</a>.</p>
 
@@ -534,7 +534,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Solve and analysis structure for the lower triangular matrix <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>. </p>
+<p>Solve and analysis structure for the lower triangular matrix <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="cuda__precondition_8h_source.html#href_anchor">186</a> of file <a class="el" href="cuda__precondition_8h_source.html">cuda_precondition.h</a>.</p>
 
@@ -750,7 +750,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Determine if level information should be generated for the lower triangular matrix <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>. This value can be modified through an <a class="el" href="structCUDAWrappers_1_1PreconditionIC_1_1AdditionalData.html">AdditionalData</a> object. </p>
+<p>Determine if level information should be generated for the lower triangular matrix <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>. This value can be modified through an <a class="el" href="structCUDAWrappers_1_1PreconditionIC_1_1AdditionalData.html">AdditionalData</a> object. </p>
 
 <p class="definition">Definition at line <a class="el" href="cuda__precondition_8h_source.html#href_anchor">233</a> of file <a class="el" href="cuda__precondition_8h_source.html">cuda_precondition.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classCUDAWrappers_1_1PreconditionILU.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classCUDAWrappers_1_1PreconditionILU.html	2024-03-17 21:57:18.551080545 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classCUDAWrappers_1_1PreconditionILU.html	2024-03-17 21:57:18.555080570 +0000
@@ -482,7 +482,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>cuSPARSE description of the lower triangular matrix <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>. </p>
+<p>cuSPARSE description of the lower triangular matrix <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="cuda__precondition_8h_source.html#href_anchor">388</a> of file <a class="el" href="cuda__precondition_8h_source.html">cuda_precondition.h</a>.</p>
 
@@ -563,7 +563,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Solve and analysis structure for the lower triangular matrix <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>. </p>
+<p>Solve and analysis structure for the lower triangular matrix <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="cuda__precondition_8h_source.html#href_anchor">403</a> of file <a class="el" href="cuda__precondition_8h_source.html">cuda_precondition.h</a>.</p>
 
@@ -779,7 +779,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Determine if level information should be generated for the lower triangular matrix <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>. This value can be modified through an <a class="el" href="structCUDAWrappers_1_1PreconditionILU_1_1AdditionalData.html">AdditionalData</a> object. </p>
+<p>Determine if level information should be generated for the lower triangular matrix <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>. This value can be modified through an <a class="el" href="structCUDAWrappers_1_1PreconditionILU_1_1AdditionalData.html">AdditionalData</a> object. </p>
 
 <p class="definition">Definition at line <a class="el" href="cuda__precondition_8h_source.html#href_anchor">450</a> of file <a class="el" href="cuda__precondition_8h_source.html">cuda_precondition.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classCUDAWrappers_1_1SparseMatrix.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classCUDAWrappers_1_1SparseMatrix.html	2024-03-17 21:57:18.603080866 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classCUDAWrappers_1_1SparseMatrix.html	2024-03-17 21:57:18.611080916 +0000
@@ -775,7 +775,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classLinearAlgebra_1_1CUDAWrappers_1_1Vector.html">LinearAlgebra::CUDAWrappers::Vector</a>&lt; Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>src</em></span>&#href_anchor"memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1622_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M \cdot src$" src="form_1622.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. </p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1622_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M \cdot src$" src="form_1622.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. </p>
 
 <p class="definition">Definition at line <a class="el" href="cuda__sparse__matrix_8cc_source.html#href_anchor">512</a> of file <a class="el" href="cuda__sparse__matrix_8cc_source.html">cuda_sparse_matrix.cc</a>.</p>
 
@@ -798,7 +798,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classLinearAlgebra_1_1CUDAWrappers_1_1Vector.html">LinearAlgebra::CUDAWrappers::Vector</a>&lt; Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>src</em></span>&#href_anchor"memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1623_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T \cdot src$" src="form_1623.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult()</a> but takes this transposed matrix. </p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1623_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T \cdot src$" src="form_1623.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult()</a> but takes this transposed matrix. </p>
 
 <p class="definition">Definition at line <a class="el" href="cuda__sparse__matrix_8cc_source.html#href_anchor">530</a> of file <a class="el" href="cuda__sparse__matrix_8cc_source.html">cuda_sparse_matrix.cc</a>.</p>
 
@@ -821,7 +821,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classLinearAlgebra_1_1CUDAWrappers_1_1Vector.html">LinearAlgebra::CUDAWrappers::Vector</a>&lt; Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>src</em></span>&#href_anchor"memdoc">
-<p>Adding matrix-vector multiplication. Add <picture><source srcset="form_1624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M \cdot src$" src="form_1624.png"/></picture> on <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1600.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. </p>
+<p>Adding matrix-vector multiplication. Add <picture><source srcset="form_1624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M \cdot src$" src="form_1624.png"/></picture> on <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1599.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. </p>
 
 <p class="definition">Definition at line <a class="el" href="cuda__sparse__matrix_8cc_source.html#href_anchor">548</a> of file <a class="el" href="cuda__sparse__matrix_8cc_source.html">cuda_sparse_matrix.cc</a>.</p>
 
@@ -844,7 +844,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classLinearAlgebra_1_1CUDAWrappers_1_1Vector.html">LinearAlgebra::CUDAWrappers::Vector</a>&lt; Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>src</em></span>&#href_anchor"memdoc">
-<p>Adding matrix-vector multiplication. Add <picture><source srcset="form_1625_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^T \cdot src$" src="form_1625.png"/></picture> to <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1600.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. This function foes the same as <a class="el" href="#href_anchor">vmult_add()</a> but takes the transposed matrix. </p>
+<p>Adding matrix-vector multiplication. Add <picture><source srcset="form_1625_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^T \cdot src$" src="form_1625.png"/></picture> to <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1599.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. This function foes the same as <a class="el" href="#href_anchor">vmult_add()</a> but takes the transposed matrix. </p>
 
 <p class="definition">Definition at line <a class="el" href="cuda__sparse__matrix_8cc_source.html#href_anchor">566</a> of file <a class="el" href="cuda__sparse__matrix_8cc_source.html">cuda_sparse_matrix.cc</a>.</p>
 
@@ -866,7 +866,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the square of the norm of the vector <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> with respect to the norm induced by this matrix, i.e., <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1611.png"/></picture>. This is useful, e.g., in the finite context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
+<p>Return the square of the norm of the vector <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> with respect to the norm induced by this matrix, i.e., <picture><source srcset="form_1608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1608.png"/></picture>. This is useful, e.g., in the finite context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
 <p>Obviously, the matrix needs to be quadratic for this operation. </p>
 
 <p class="definition">Definition at line <a class="el" href="cuda__sparse__matrix_8cc_source.html#href_anchor">584</a> of file <a class="el" href="cuda__sparse__matrix_8cc_source.html">cuda_sparse_matrix.cc</a>.</p>
@@ -890,7 +890,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classLinearAlgebra_1_1CUDAWrappers_1_1Vector.html">LinearAlgebra::CUDAWrappers::Vector</a>&lt; Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>v</em></span>&#href_anchor"memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1601.png"/></picture>. </p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1600.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="cuda__sparse__matrix_8cc_source.html#href_anchor">597</a> of file <a class="el" href="cuda__sparse__matrix_8cc_source.html">cuda_sparse_matrix.cc</a>.</p>
 
@@ -918,8 +918,8 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classLinearAlgebra_1_1CUDAWrappers_1_1Vector.html">LinearAlgebra::CUDAWrappers::Vector</a>&lt; Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>b</em></span>&#href_anchor"memdoc">
-<p>Compute the residual of an equation <picture><source srcset="form_1626_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M \cdot x=b$" src="form_1626.png"/></picture>, where the residual is defined to be <picture><source srcset="form_1627_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r=b-M \cdot x$" src="form_1627.png"/></picture>. Write the residual into <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1600.png"/></picture>. The <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture> norm of the residual vector is returned.</p>
-<p>Source <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> and destination <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1600.png"/></picture> must not be the same vector. </p>
+<p>Compute the residual of an equation <picture><source srcset="form_1626_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M \cdot x=b$" src="form_1626.png"/></picture>, where the residual is defined to be <picture><source srcset="form_1627_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r=b-M \cdot x$" src="form_1627.png"/></picture>. Write the residual into <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1599.png"/></picture>. The <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture> norm of the residual vector is returned.</p>
+<p>Source <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> and destination <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1599.png"/></picture> must not be the same vector. </p>
 
 <p class="definition">Definition at line <a class="el" href="cuda__sparse__matrix_8cc_source.html#href_anchor">611</a> of file <a class="el" href="cuda__sparse__matrix_8cc_source.html">cuda_sparse_matrix.cc</a>.</p>
 
@@ -941,8 +941,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm of the matrix, that is <picture><source srcset="form_1628_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=\max_{\mathrm{all\
-columns\ }j}\sum_{\mathrm{all\ rows\ }i} |M_{ij}|$" src="form_1628.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm for vectors, i.e., <picture><source srcset="form_1614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1614.png"/></picture>. </p>
+<p>Return the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm of the matrix, that is <picture><source srcset="form_1628_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=\max_{\mathrm{all\
+columns\ }j}\sum_{\mathrm{all\ rows\ }i} |M_{ij}|$" src="form_1628.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm for vectors, i.e., <picture><source srcset="form_1610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1610.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="cuda__sparse__matrix_8cc_source.html#href_anchor">626</a> of file <a class="el" href="cuda__sparse__matrix_8cc_source.html">cuda_sparse_matrix.cc</a>.</p>
 
@@ -964,8 +964,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of the matrix, that is  <picture><source srcset="form_1629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_\infty=\max_{\mathrm{all\ rows\ }i}\sum_{\mathrm{all\ columns\ }j}
-|M_{ij}|$" src="form_1629.png"/></picture>, (max. sum of rows). This is the natural norm that is compatible to the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of vectors, i.e., <picture><source srcset="form_1630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_\infty \leq
+<p>Return the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of the matrix, that is  <picture><source srcset="form_1629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_\infty=\max_{\mathrm{all\ rows\ }i}\sum_{\mathrm{all\ columns\ }j}
+|M_{ij}|$" src="form_1629.png"/></picture>, (max. sum of rows). This is the natural norm that is compatible to the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of vectors, i.e., <picture><source srcset="form_1630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_\infty \leq
 |M|_\infty |v|_\infty$" src="form_1630.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="cuda__sparse__matrix_8cc_source.html#href_anchor">645</a> of file <a class="el" href="cuda__sparse__matrix_8cc_source.html">cuda_sparse_matrix.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classCellAccessor.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classCellAccessor.html	2024-03-17 21:57:18.727081632 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classCellAccessor.html	2024-03-17 21:57:18.731081657 +0000
@@ -4150,7 +4150,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function computes a fast approximate transformation from the real to the unit cell by inversion of an affine approximation of the <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-linear function from the reference <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-dimensional cell.</p>
-<p>The affine approximation of the unit to real cell mapping is found by a least squares fit of an affine function to the <picture><source srcset="form_1376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^d$" src="form_1376.png"/></picture> vertices of the present object. For any valid mesh cell whose geometry is not degenerate, this operation results in a unique affine mapping. Thus, this function will return a finite result for all given input points, even in cases where the actual transformation by an actual bi-/trilinear or higher order mapping might be singular. Besides only approximating the mapping from the vertex points, this function also ignores the attached manifold descriptions. The result is only exact in case the transformation from the unit to the real cell is indeed affine, such as in one dimension or for Cartesian and affine (parallelogram) meshes in 2d/3d.</p>
+<p>The affine approximation of the unit to real cell mapping is found by a least squares fit of an affine function to the <picture><source srcset="form_1377_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^d$" src="form_1377.png"/></picture> vertices of the present object. For any valid mesh cell whose geometry is not degenerate, this operation results in a unique affine mapping. Thus, this function will return a finite result for all given input points, even in cases where the actual transformation by an actual bi-/trilinear or higher order mapping might be singular. Besides only approximating the mapping from the vertex points, this function also ignores the attached manifold descriptions. The result is only exact in case the transformation from the unit to the real cell is indeed affine, such as in one dimension or for Cartesian and affine (parallelogram) meshes in 2d/3d.</p>
 <p>For exact transformations to the unit cell, use <a class="el" href="classMapping.html#href_anchor">Mapping::transform_real_to_unit_cell()</a>.</p>
 <dl class="section note"><dt>Note</dt><dd>If dim&lt;spacedim we first project p onto the plane. </dd></dl>
 
@@ -4213,15 +4213,15 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the barycenter (also called centroid) of the object. The barycenter for an object <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> of dimension <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> in <picture><source srcset="form_1479_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1479.png"/></picture> space dimensions is given by the <picture><source srcset="form_1479_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1479.png"/></picture>-dimensional vector <picture><source srcset="form_1480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_K$" src="form_1480.png"/></picture> defined by  </p><p class="formulaDsp">
-<picture><source srcset="form_1481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Return the barycenter (also called centroid) of the object. The barycenter for an object <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> of dimension <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> in <picture><source srcset="form_1480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1480.png"/></picture> space dimensions is given by the <picture><source srcset="form_1480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1480.png"/></picture>-dimensional vector <picture><source srcset="form_1481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_K$" src="form_1481.png"/></picture> defined by  </p><p class="formulaDsp">
+<picture><source srcset="form_1482_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf x_K = \frac{1}{|K|} \int_K \mathbf x \; \textrm{d}x
-\]" src="form_1481.png"/></picture>
+\]" src="form_1482.png"/></picture>
 </p>
 <p> where the measure of the object is given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1482_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1483_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   |K| = \int_K \mathbf 1 \; \textrm{d}x.
-\]" src="form_1482.png"/></picture>
+\]" src="form_1483.png"/></picture>
 </p>
 <p> This function assumes that <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is mapped by a <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-linear function from the reference <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-dimensional cell. Then the integrals above can be pulled back to the reference cell and evaluated exactly (if through lengthy and, compared to the <a class="el" href="data__out__base_8cc.html#href_anchor">center()</a> function, expensive computations). </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classChartManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classChartManifold.html	2024-03-17 21:57:18.779081954 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classChartManifold.html	2024-03-17 21:57:18.783081979 +0000
@@ -206,37 +206,37 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim, <a class="el" href="classint.html">int</a> chartdim = dim&gt;<br />
 class ChartManifold&lt; dim, spacedim, chartdim &gt;</div><p>This class describes mappings that can be expressed in terms of charts. Specifically, this class with its template arguments describes a chart of dimension chartdim, which is part of a <a class="el" href="classManifold.html">Manifold&lt;dim,spacedim&gt;</a> and is used in an object of type <a class="el" href="classTriangulation.html">Triangulation&lt;dim,spacedim&gt;</a>: It specializes a <a class="el" href="classManifold.html">Manifold</a> of dimension chartdim embedded in a manifold of dimension spacedim, for which you have explicit <a class="el" href="#href_anchor">pull_back()</a> and <a class="el" href="#href_anchor">push_forward()</a> transformations. Its use is explained in great detail in <a class="el" href="step_53.html">step-53</a>.</p>
-<p>This is a helper class which is useful when you have an explicit map from an Euclidean space of dimension chartdim to an Euclidean space of dimension spacedim which represents your manifold, i.e., when your manifold <picture><source srcset="form_1400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{M}$" src="form_1400.png"/></picture> can be represented by a map </p><p class="formulaDsp">
-<picture><source srcset="form_1401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ F: \mathcal{B} \subset
-R^{\text{chartdim}} \mapsto \mathcal{M} \subset R^{\text{spacedim}} \]" src="form_1401.png"/></picture>
+<p>This is a helper class which is useful when you have an explicit map from an Euclidean space of dimension chartdim to an Euclidean space of dimension spacedim which represents your manifold, i.e., when your manifold <picture><source srcset="form_1418_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{M}$" src="form_1418.png"/></picture> can be represented by a map </p><p class="formulaDsp">
+<picture><source srcset="form_1419_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ F: \mathcal{B} \subset
+R^{\text{chartdim}} \mapsto \mathcal{M} \subset R^{\text{spacedim}} \]" src="form_1419.png"/></picture>
 </p>
 <p> (the <a class="el" href="#href_anchor">push_forward()</a> function) and that admits the inverse transformation  </p><p class="formulaDsp">
-<picture><source srcset="form_1402_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ F^{-1}: \mathcal{M} \subset R^{\text{spacedim}} \mapsto \mathcal{B}
-\subset R^{\text{chartdim}} \]" src="form_1402.png"/></picture>
+<picture><source srcset="form_1420_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ F^{-1}: \mathcal{M} \subset R^{\text{spacedim}} \mapsto \mathcal{B}
+\subset R^{\text{chartdim}} \]" src="form_1420.png"/></picture>
 </p>
 <p> (the <a class="el" href="#href_anchor">pull_back()</a> function).</p>
 <p>The <a class="el" href="#href_anchor">get_new_point()</a> function of the <a class="el" href="classChartManifold.html">ChartManifold</a> class is implemented by calling the <a class="el" href="#href_anchor">pull_back()</a> method for all <code>surrounding_points</code>, computing their weighted average in the chartdim Euclidean space, and calling the <a class="el" href="#href_anchor">push_forward()</a> method with the resulting point, i.e., </p><p class="formulaDsp">
-<picture><source srcset="form_1403_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
-\mathbf x^{\text{new}} = F(\sum_i w_i F^{-1}(\mathbf x_i)).  \]" src="form_1403.png"/></picture>
+<picture><source srcset="form_1421_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+\mathbf x^{\text{new}} = F(\sum_i w_i F^{-1}(\mathbf x_i)).  \]" src="form_1421.png"/></picture>
 </p>
 <p>Derived classes are required to implement the <a class="el" href="#href_anchor">push_forward()</a> and the <a class="el" href="#href_anchor">pull_back()</a> methods. All other functions (with the exception of the <a class="el" href="#href_anchor">push_forward_gradient()</a> function, see below) that are required by mappings will then be provided by this class.</p>
 <h3>Providing function gradients</h3>
-<p>In order to compute vectors that are tangent to the manifold (for example, tangent to a surface embedded in higher dimensional space, or simply the three unit vectors of <picture><source srcset="form_1404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^3$" src="form_1404.png"/></picture>), one needs to also have access to the <em>gradient</em> of the push-forward function <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture>. The gradient is the matrix <picture><source srcset="form_1405_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\nabla F)_{ij}=\partial_j F_i$" src="form_1405.png"/></picture>, where we take the derivative with regard to the chartdim reference coordinates on the flat Euclidean space in which <picture><source srcset="form_1406_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal B$" src="form_1406.png"/></picture> is located. In other words, at a point <picture><source srcset="form_216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_216.png"/></picture>, <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla F(\mathbf x)$" src="form_1407.png"/></picture> is a matrix of size <code>spacedim</code> times <code>chartdim</code>.</p>
+<p>In order to compute vectors that are tangent to the manifold (for example, tangent to a surface embedded in higher dimensional space, or simply the three unit vectors of <picture><source srcset="form_1422_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^3$" src="form_1422.png"/></picture>), one needs to also have access to the <em>gradient</em> of the push-forward function <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture>. The gradient is the matrix <picture><source srcset="form_1423_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\nabla F)_{ij}=\partial_j F_i$" src="form_1423.png"/></picture>, where we take the derivative with regard to the chartdim reference coordinates on the flat Euclidean space in which <picture><source srcset="form_1424_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal B$" src="form_1424.png"/></picture> is located. In other words, at a point <picture><source srcset="form_190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_190.png"/></picture>, <picture><source srcset="form_1425_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla F(\mathbf x)$" src="form_1425.png"/></picture> is a matrix of size <code>spacedim</code> times <code>chartdim</code>.</p>
 <p>Only the <a class="el" href="#href_anchor">ChartManifold::get_tangent_vector()</a> function uses the gradient of the push-forward, but only a subset of all finite element codes actually require the computation of tangent vectors. Consequently, while derived classes need to implement the abstract virtual <a class="el" href="#href_anchor">push_forward()</a> and <a class="el" href="#href_anchor">pull_back()</a> functions of this class, they do not need to implement the virtual <a class="el" href="#href_anchor">push_forward_gradient()</a> function. Rather, that function has a default implementation (and consequently is not abstract, therefore not forcing derived classes to overload it), but the default implementation clearly can not compute anything useful and therefore simply triggers and exception.</p>
 <h3>A note on the template arguments</h3>
 <p>The dimension arguments <code>chartdim</code>, <code>dim</code> and <code>spacedim</code> must satisfy the following relationships: </p><div class="fragment"><div class="line">dim &lt;= spacedim</div>
 <div class="line">chartdim &lt;= spacedim</div>
 </div><!-- fragment --><p> However, there is no a priori relationship between <code>dim</code> and <code>chartdim</code>. For example, if you want to describe a mapping for an edge (a 1d object) in a 2d triangulation embedded in 3d space, you could do so by parameterizing it via a line  </p><p class="formulaDsp">
-<picture><source srcset="form_1408_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1426_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
      F: [0,1] \rightarrow {\mathbb R}^3
-  \]" src="form_1408.png"/></picture>
+  \]" src="form_1426.png"/></picture>
 </p>
 <p> in which case <code>chartdim</code> is 1. On the other hand, there is no reason why one can't describe this as a mapping  </p><p class="formulaDsp">
-<picture><source srcset="form_1409_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
      F: {\mathbb R}^3 \rightarrow {\mathbb R}^3
-  \]" src="form_1409.png"/></picture>
+  \]" src="form_1427.png"/></picture>
 </p>
-<p> in such a way that the line <picture><source srcset="form_1410_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]\times \{0\}\times \{0\}$" src="form_1410.png"/></picture> happens to be mapped onto the edge in question. Here, <code>chartdim</code> is 3. This may seem cumbersome but satisfies the requirements of an invertible function <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> just fine as long as it is possible to get from the edge to the pull-back space and then back again. Finally, given that we are dealing with a 2d triangulation in 3d, one will often have a mapping from, say, the 2d unit square or unit disk to the domain in 3d space, and the edge in question may simply be the mapped edge of the unit domain in 2d space. In this case, <code>chartdim</code> is 2. </p>
+<p> in such a way that the line <picture><source srcset="form_1428_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]\times \{0\}\times \{0\}$" src="form_1428.png"/></picture> happens to be mapped onto the edge in question. Here, <code>chartdim</code> is 3. This may seem cumbersome but satisfies the requirements of an invertible function <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> just fine as long as it is possible to get from the edge to the pull-back space and then back again. Finally, given that we are dealing with a 2d triangulation in 3d, one will often have a mapping from, say, the 2d unit square or unit disk to the domain in 3d space, and the edge in question may simply be the mapped edge of the unit domain in 2d space. In this case, <code>chartdim</code> is 2. </p>
 
 <p class="definition">Definition at line <a class="el" href="include_2deal_8II_2grid_2manifold_8h_source.html#href_anchor">902</a> of file <a class="el" href="include_2deal_8II_2grid_2manifold_8h_source.html">manifold.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
@@ -566,7 +566,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
+<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
 <p>This function is used in the computations required by the <a class="el" href="#href_anchor">get_tangent_vector()</a> function. Since not all users of the <a class="el" href="classManifold.html">Manifold</a> class interface will require calling that function, the current function is implemented but will trigger an exception whenever called. This allows derived classes to avoid implementing the push_forward_gradient function if this functionality is not needed in the user program.</p>
 <p>Refer to the general documentation of this class for more information. </p>
 
@@ -600,24 +600,24 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a vector that, at <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1427.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
-<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1442.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
-<picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>Return a vector that, at <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1429.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
+<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1439.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
+<picture><source srcset="form_1440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \zeta(t) &amp;= \xi_1 +  t (\xi_2-\xi_1)
  \\          &amp;= F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                             -F^{-1}(\mathbf x_1)\right]
-\end{align*}" src="form_1443.png"/></picture>
+\end{align*}" src="form_1440.png"/></picture>
 </p>
 <p> In image space, i.e., in the space in which we operate, this leads to the curve  </p><p class="formulaDsp">
-<picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_1441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s(t) &amp;= F(\zeta(t))
  \\          &amp;= F(\xi_1 +  t (\xi_2-\xi_1))
  \\          &amp;= F\left(F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                     -F^{-1}(\mathbf x_1)\right]\right).
-\end{align*}" src="form_1444.png"/></picture>
+\end{align*}" src="form_1441.png"/></picture>
 </p>
-<p> What the current function is supposed to return is <picture><source srcset="form_1431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1431.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
-<picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> What the current function is supposed to return is <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1433.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
+<picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s'(0) &amp;=
     \frac{d}{dt}\left. F\left(F^{-1}(\mathbf x_1)
                        + t\left[F^{-1}(\mathbf x_2)
@@ -626,11 +626,11 @@
 \\ &amp;= \nabla_\xi F\left(F^{-1}(\mathbf x_1)\right)
                    \left[F^{-1}(\mathbf x_2)
                                 -F^{-1}(\mathbf x_1)\right].
-\end{align*}" src="form_1445.png"/></picture>
+\end{align*}" src="form_1442.png"/></picture>
 </p>
 <p> This formula may then have to be slightly modified by considering any periodicity that was assumed in the call to the constructor.</p>
-<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1446.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1447.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
-x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1448.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
+<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1443.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1444.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
+x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1445.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">x1</td><td>The first point that describes the geodesic, and the one at which the "direction" is to be evaluated. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classChunkSparseMatrix.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classChunkSparseMatrix.html	2024-03-17 21:57:18.843082349 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classChunkSparseMatrix.html	2024-03-17 21:57:18.847082374 +0000
@@ -1036,7 +1036,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Symmetrize the matrix by forming the mean value between the existing matrix and its transpose, <picture><source srcset="form_1610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A = \frac 12(A+A^T)$" src="form_1610.png"/></picture>.</p>
+<p>Symmetrize the matrix by forming the mean value between the existing matrix and its transpose, <picture><source srcset="form_1607_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A = \frac 12(A+A^T)$" src="form_1607.png"/></picture>.</p>
 <p>This operation assumes that the underlying sparsity pattern represents a symmetric object. If this is not the case, then the result of this operation will not be a symmetric matrix, since it only explicitly symmetrizes by looping over the lower left triangular part for efficiency reasons; if there are entries in the upper right triangle, then these elements are missed in the symmetrization. Symmetrization of the sparsity pattern can be obtain by <a class="el" href="classChunkSparsityPattern.html#href_anchor">ChunkSparsityPattern::symmetrize()</a>. </p>
 
 </div>
@@ -1367,7 +1367,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the square of the norm of the vector <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1611.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
+<p>Return the square of the norm of the vector <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1608.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
 <p>Obviously, the matrix needs to be quadratic for this operation, and for the result to actually be a norm it also needs to be either real symmetric or complex hermitian.</p>
 <p>The underlying template types of both this matrix and the given vector should either both be real or complex-valued, but not mixed, for this function to make sense. </p>
 
@@ -1392,7 +1392,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classVector.html">Vector</a>&lt; somenumber &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>v</em></span>&#href_anchor"memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1601.png"/></picture>. </p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1600.png"/></picture>. </p>
 
 </div>
 </div>
@@ -1441,8 +1441,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the l1-norm of the matrix, that is <picture><source srcset="form_1613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=max_{all columns
-j}\sum_{all rows i} |M_ij|$" src="form_1613.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e. <picture><source srcset="form_1614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1614.png"/></picture>. (cf. Haemmerlin-Hoffmann : Numerische Mathematik) </p>
+<p>Return the l1-norm of the matrix, that is <picture><source srcset="form_1609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=max_{all columns
+j}\sum_{all rows i} |M_ij|$" src="form_1609.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e. <picture><source srcset="form_1610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1610.png"/></picture>. (cf. Haemmerlin-Hoffmann : Numerische Mathematik) </p>
 
 </div>
 </div>
@@ -1462,8 +1462,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the linfty-norm of the matrix, that is <picture><source srcset="form_1615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_infty=max_{all rows
-i}\sum_{all columns j} |M_ij|$" src="form_1615.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e. <picture><source srcset="form_1616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_infty \leq |M|_infty |v|_infty$" src="form_1616.png"/></picture>. (cf. Haemmerlin-Hoffmann : Numerische Mathematik) </p>
+<p>Return the linfty-norm of the matrix, that is <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_infty=max_{all rows
+i}\sum_{all columns j} |M_ij|$" src="form_1611.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e. <picture><source srcset="form_1612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_infty \leq |M|_infty |v|_infty$" src="form_1612.png"/></picture>. (cf. Haemmerlin-Hoffmann : Numerische Mathematik) </p>
 
 </div>
 </div>
@@ -2157,7 +2157,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the location of entry <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> within the val array. </p>
+<p>Return the location of entry <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> within the val array. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classChunkSparsityPattern.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classChunkSparsityPattern.html	2024-03-17 21:57:18.907082745 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classChunkSparsityPattern.html	2024-03-17 21:57:18.907082745 +0000
@@ -1123,7 +1123,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Compute the bandwidth of the matrix represented by this structure. The bandwidth is the maximum of <picture><source srcset="form_1607_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|i-j|$" src="form_1607.png"/></picture> for which the index pair <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> represents a nonzero entry of the matrix. Consequently, the maximum bandwidth a <picture><source srcset="form_1608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n\times m$" src="form_1608.png"/></picture> matrix can have is <picture><source srcset="form_1609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\max\{n-1,m-1\}$" src="form_1609.png"/></picture>. </p>
+<p>Compute the bandwidth of the matrix represented by this structure. The bandwidth is the maximum of <picture><source srcset="form_1613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|i-j|$" src="form_1613.png"/></picture> for which the index pair <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> represents a nonzero entry of the matrix. Consequently, the maximum bandwidth a <picture><source srcset="form_1614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n\times m$" src="form_1614.png"/></picture> matrix can have is <picture><source srcset="form_1615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\max\{n-1,m-1\}$" src="form_1615.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="chunk__sparsity__pattern_8cc_source.html#href_anchor">520</a> of file <a class="el" href="chunk__sparsity__pattern_8cc_source.html">chunk_sparsity_pattern.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classCompositionManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classCompositionManifold.html	2024-03-17 21:57:18.959083066 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classCompositionManifold.html	2024-03-17 21:57:18.963083090 +0000
@@ -594,24 +594,24 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a vector that, at <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1427.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
-<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1442.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
-<picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>Return a vector that, at <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1429.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
+<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1439.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
+<picture><source srcset="form_1440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \zeta(t) &amp;= \xi_1 +  t (\xi_2-\xi_1)
  \\          &amp;= F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                             -F^{-1}(\mathbf x_1)\right]
-\end{align*}" src="form_1443.png"/></picture>
+\end{align*}" src="form_1440.png"/></picture>
 </p>
 <p> In image space, i.e., in the space in which we operate, this leads to the curve  </p><p class="formulaDsp">
-<picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_1441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s(t) &amp;= F(\zeta(t))
  \\          &amp;= F(\xi_1 +  t (\xi_2-\xi_1))
  \\          &amp;= F\left(F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                     -F^{-1}(\mathbf x_1)\right]\right).
-\end{align*}" src="form_1444.png"/></picture>
+\end{align*}" src="form_1441.png"/></picture>
 </p>
-<p> What the current function is supposed to return is <picture><source srcset="form_1431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1431.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
-<picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> What the current function is supposed to return is <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1433.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
+<picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s'(0) &amp;=
     \frac{d}{dt}\left. F\left(F^{-1}(\mathbf x_1)
                        + t\left[F^{-1}(\mathbf x_2)
@@ -620,11 +620,11 @@
 \\ &amp;= \nabla_\xi F\left(F^{-1}(\mathbf x_1)\right)
                    \left[F^{-1}(\mathbf x_2)
                                 -F^{-1}(\mathbf x_1)\right].
-\end{align*}" src="form_1445.png"/></picture>
+\end{align*}" src="form_1442.png"/></picture>
 </p>
 <p> This formula may then have to be slightly modified by considering any periodicity that was assumed in the call to the constructor.</p>
-<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1446.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1447.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
-x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1448.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
+<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1443.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1444.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
+x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1445.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">x1</td><td>The first point that describes the geodesic, and the one at which the "direction" is to be evaluated. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classConvergenceTable.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classConvergenceTable.html	2024-03-17 21:57:19.003083338 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classConvergenceTable.html	2024-03-17 21:57:19.007083362 +0000
@@ -362,14 +362,14 @@
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>dim</em><span class="paramdefsep"> = </span><span class="paramdefval">2</span></span>&#href_anchor"memdoc">
 <p>Evaluate the convergence rates of the data column <code>data_column_key</code> due to the <a class="el" href="#href_anchor">RateMode</a> in relation to the reference column <code>reference_column_key</code>. Be sure that the value types of the table entries of the data column and the reference data column is a number, i.e. double, float, (unsigned) int, and so on.</p>
-<p>As this class has no information on the space dimension upon which the reference column vs. the value column is based upon, it needs to be passed as last argument to this method. The <em>default dimension for the reference column</em> is 2, which is appropriate for the number of cells in 2d. If you work in 3d, set the number to 3. If the reference column is <picture><source srcset="form_410_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/h$" src="form_410.png"/></picture>, remember to set the dimension to 1 also when working in 3d to get correct rates.</p>
+<p>As this class has no information on the space dimension upon which the reference column vs. the value column is based upon, it needs to be passed as last argument to this method. The <em>default dimension for the reference column</em> is 2, which is appropriate for the number of cells in 2d. If you work in 3d, set the number to 3. If the reference column is <picture><source srcset="form_374_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/h$" src="form_374.png"/></picture>, remember to set the dimension to 1 also when working in 3d to get correct rates.</p>
 <p>The new rate column and the data column will be merged to a supercolumn. The tex caption of the supercolumn will be (by default) the same as the one of the data column. This may be changed by using the <code>set_tex_supercaption (...)</code> function of the base class <a class="el" href="classTableHandler.html">TableHandler</a>.</p>
 <p>This method behaves in the following way:</p>
-<p>If RateMode is reduction_rate, then the computed output is <picture><source srcset="form_411_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$
-\frac{e_{n-1}/k_{n-1}}{e_n/k_n}, $" src="form_411.png"/></picture> where <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> is the reference column (no dimension dependence!).</p>
-<p>If RateMode is reduction_rate_log2, then the computed output is <picture><source srcset="form_412_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ dim
-\frac{\log |e_{n-1}/e_{n}|}{\log |k_n/k_{n-1}|} $" src="form_412.png"/></picture>.</p>
-<p>This is useful, for example, if we use as reference key the number of degrees of freedom or better, the number of cells. Assuming that the error is proportional to <picture><source srcset="form_413_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ C (1/\sqrt{k})^r $" src="form_413.png"/></picture> in 2d, then this method will produce the rate <picture><source srcset="form_414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_414.png"/></picture> as a result. For general dimension, as described by the last parameter of this function, the formula needs to be <picture><source srcset="form_415_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ C (1/\sqrt[dim]{k})^r $" src="form_415.png"/></picture>.</p>
+<p>If RateMode is reduction_rate, then the computed output is <picture><source srcset="form_375_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$
+\frac{e_{n-1}/k_{n-1}}{e_n/k_n}, $" src="form_375.png"/></picture> where <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> is the reference column (no dimension dependence!).</p>
+<p>If RateMode is reduction_rate_log2, then the computed output is <picture><source srcset="form_376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ dim
+\frac{\log |e_{n-1}/e_{n}|}{\log |k_n/k_{n-1}|} $" src="form_376.png"/></picture>.</p>
+<p>This is useful, for example, if we use as reference key the number of degrees of freedom or better, the number of cells. Assuming that the error is proportional to <picture><source srcset="form_377_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ C (1/\sqrt{k})^r $" src="form_377.png"/></picture> in 2d, then this method will produce the rate <picture><source srcset="form_378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_378.png"/></picture> as a result. For general dimension, as described by the last parameter of this function, the formula needs to be <picture><source srcset="form_379_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ C (1/\sqrt[dim]{k})^r $" src="form_379.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>Since this function adds columns to the table after several rows have already been filled, it switches off the auto fill mode of the <a class="el" href="classTableHandler.html">TableHandler</a> base class. If you intend to add further data with auto fill, you will have to re-enable it after calling this function. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="convergence__table_8cc_source.html#href_anchor">23</a> of file <a class="el" href="convergence__table_8cc_source.html">convergence_table.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classCylindricalManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classCylindricalManifold.html	2024-03-17 21:57:19.055083659 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classCylindricalManifold.html	2024-03-17 21:57:19.059083684 +0000
@@ -413,7 +413,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the cylindrical coordinates <picture><source srcset="form_1437_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(r, \phi, \lambda)$" src="form_1437.png"/></picture> for the given space point where <picture><source srcset="form_414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_414.png"/></picture> denotes the distance from the axis, <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> the angle between the given point and the computed normal direction, and <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> the axial position. </p>
+<p>Compute the cylindrical coordinates <picture><source srcset="form_1463_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(r, \phi, \lambda)$" src="form_1463.png"/></picture> for the given space point where <picture><source srcset="form_378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_378.png"/></picture> denotes the distance from the axis, <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> the angle between the given point and the computed normal direction, and <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> the axial position. </p>
 
 <p>Implements <a class="el" href="classChartManifold.html#href_anchor">ChartManifold&lt; dim, spacedim, chartdim &gt;</a>.</p>
 
@@ -445,7 +445,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the Cartesian coordinates for a chart point given in cylindrical coordinates <picture><source srcset="form_1437_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(r, \phi, \lambda)$" src="form_1437.png"/></picture>, where <picture><source srcset="form_414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_414.png"/></picture> denotes the distance from the axis, <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> the angle between the given point and the computed normal direction, and <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> the axial position. </p>
+<p>Compute the Cartesian coordinates for a chart point given in cylindrical coordinates <picture><source srcset="form_1463_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(r, \phi, \lambda)$" src="form_1463.png"/></picture>, where <picture><source srcset="form_378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_378.png"/></picture> denotes the distance from the axis, <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> the angle between the given point and the computed normal direction, and <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> the axial position. </p>
 
 <p class="definition">Definition at line <a class="el" href="grid_2manifold__lib_8cc_source.html#href_anchor">1144</a> of file <a class="el" href="grid_2manifold__lib_8cc_source.html">manifold_lib.cc</a>.</p>
 
@@ -475,7 +475,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the derivatives of the mapping from cylindrical coordinates <picture><source srcset="form_1437_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(r, \phi, \lambda)$" src="form_1437.png"/></picture> to cartesian coordinates where <picture><source srcset="form_414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_414.png"/></picture> denotes the distance from the axis, <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> the angle between the given point and the computed normal direction, and <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> the axial position. </p>
+<p>Compute the derivatives of the mapping from cylindrical coordinates <picture><source srcset="form_1463_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(r, \phi, \lambda)$" src="form_1463.png"/></picture> to cartesian coordinates where <picture><source srcset="form_378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_378.png"/></picture> denotes the distance from the axis, <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> the angle between the given point and the computed normal direction, and <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> the axial position. </p>
 
 <p class="definition">Definition at line <a class="el" href="grid_2manifold__lib_8cc_source.html#href_anchor">1164</a> of file <a class="el" href="grid_2manifold__lib_8cc_source.html">manifold_lib.cc</a>.</p>
 
@@ -644,7 +644,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
+<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
 <p>This function is used in the computations required by the <a class="el" href="classChartManifold.html#href_anchor">get_tangent_vector()</a> function. Since not all users of the <a class="el" href="classManifold.html">Manifold</a> class interface will require calling that function, the current function is implemented but will trigger an exception whenever called. This allows derived classes to avoid implementing the push_forward_gradient function if this functionality is not needed in the user program.</p>
 <p>Refer to the general documentation of this class for more information. </p>
 
@@ -678,24 +678,24 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a vector that, at <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1427.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
-<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1442.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
-<picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>Return a vector that, at <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1429.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
+<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1439.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
+<picture><source srcset="form_1440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \zeta(t) &amp;= \xi_1 +  t (\xi_2-\xi_1)
  \\          &amp;= F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                             -F^{-1}(\mathbf x_1)\right]
-\end{align*}" src="form_1443.png"/></picture>
+\end{align*}" src="form_1440.png"/></picture>
 </p>
 <p> In image space, i.e., in the space in which we operate, this leads to the curve  </p><p class="formulaDsp">
-<picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_1441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s(t) &amp;= F(\zeta(t))
  \\          &amp;= F(\xi_1 +  t (\xi_2-\xi_1))
  \\          &amp;= F\left(F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                     -F^{-1}(\mathbf x_1)\right]\right).
-\end{align*}" src="form_1444.png"/></picture>
+\end{align*}" src="form_1441.png"/></picture>
 </p>
-<p> What the current function is supposed to return is <picture><source srcset="form_1431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1431.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
-<picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> What the current function is supposed to return is <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1433.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
+<picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s'(0) &amp;=
     \frac{d}{dt}\left. F\left(F^{-1}(\mathbf x_1)
                        + t\left[F^{-1}(\mathbf x_2)
@@ -704,11 +704,11 @@
 \\ &amp;= \nabla_\xi F\left(F^{-1}(\mathbf x_1)\right)
                    \left[F^{-1}(\mathbf x_2)
                                 -F^{-1}(\mathbf x_1)\right].
-\end{align*}" src="form_1445.png"/></picture>
+\end{align*}" src="form_1442.png"/></picture>
 </p>
 <p> This formula may then have to be slightly modified by considering any periodicity that was assumed in the call to the constructor.</p>
-<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1446.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1447.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
-x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1448.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
+<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1443.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1444.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
+x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1445.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">x1</td><td>The first point that describes the geodesic, and the one at which the "direction" is to be evaluated. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classDataPostprocessor.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classDataPostprocessor.html	2024-03-17 21:57:19.099083930 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classDataPostprocessor.html	2024-03-17 21:57:19.103083955 +0000
@@ -183,7 +183,7 @@
 <p>As a consequence, <a class="el" href="classDataOut.html">DataOut</a> is forced to take things apart into their real and imaginary parts, and both are output as separate quantities. This is the case for data that is written directly to a file by <a class="el" href="classDataOut.html">DataOut</a>, but it is also the case for data that is first routed through <a class="el" href="classDataPostprocessor.html">DataPostprocessor</a> objects (or objects of their derived classes): All these objects see is a collection of real values, even if the underlying solution vector was complex-valued.</p>
 <p>All of this has two implications:</p><ul>
 <li>If a solution vector is complex-valued, then this results in at least two input components at each evaluation point. As a consequence, the <a class="el" href="#href_anchor">DataPostprocessor::evaluate_scalar_field()</a> function is never called, even if the underlying finite element had only a single solution component. Instead, <a class="el" href="classDataOut.html">DataOut</a> will <em>always</em> call <a class="el" href="#href_anchor">DataPostprocessor::evaluate_vector_field()</a>.</li>
-<li>Implementations of the <a class="el" href="#href_anchor">DataPostprocessor::evaluate_vector_field()</a> in derived classes must understand how the solution values are arranged in the <a class="el" href="structDataPostprocessorInputs_1_1Vector.html">DataPostprocessorInputs::Vector</a> objects they receive as input. The rule here is: If the finite element has <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> vector components (including the case <picture><source srcset="form_2175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N=1$" src="form_2175.png"/></picture>, i.e., a scalar element), then the inputs for complex-valued solution vectors will have <picture><source srcset="form_2176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2N$" src="form_2176.png"/></picture> components. These first contain the values (or gradients, or Hessians) of the real parts of all solution components, and then the values (or gradients, or Hessians) of the imaginary parts of all solution components.</li>
+<li>Implementations of the <a class="el" href="#href_anchor">DataPostprocessor::evaluate_vector_field()</a> in derived classes must understand how the solution values are arranged in the <a class="el" href="structDataPostprocessorInputs_1_1Vector.html">DataPostprocessorInputs::Vector</a> objects they receive as input. The rule here is: If the finite element has <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> vector components (including the case <picture><source srcset="form_2155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N=1$" src="form_2155.png"/></picture>, i.e., a scalar element), then the inputs for complex-valued solution vectors will have <picture><source srcset="form_2156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2N$" src="form_2156.png"/></picture> components. These first contain the values (or gradients, or Hessians) of the real parts of all solution components, and then the values (or gradients, or Hessians) of the imaginary parts of all solution components.</li>
 </ul>
 <p><a class="el" href="step_58.html">step-58</a> provides an example of how this class (or, rather, the derived <a class="el" href="classDataPostprocessorScalar.html">DataPostprocessorScalar</a> class) is used in a complex-valued situation. </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classDataPostprocessorTensor.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classDataPostprocessorTensor.html	2024-03-17 21:57:19.139084177 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classDataPostprocessorTensor.html	2024-03-17 21:57:19.143084202 +0000
@@ -255,7 +255,7 @@
 <img src="data_postprocessor_tensor_1.png" alt=""/>
 </div>
 <p>These pictures show an ellipse representing the gradient tensor at, on average, every tenth mesh point. You may want to read through the documentation of the VisIt visualization program (see <a href="https://wci.llnl.gov/simulation/computer-codes/visit/">https://wci.llnl.gov/simulation/computer-codes/visit/</a>) for an interpretation of how exactly tensors are visualizated.</p>
-<p>In elasticity, one is often interested not in the gradient of the displacement, but in the "strain", i.e., the symmetrized version of the gradient <picture><source srcset="form_2180_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon=\frac 12 (\nabla u + \nabla u^T)$" src="form_2180.png"/></picture>. This is easily facilitated with the following minor modification: </p><div class="fragment"><div class="line"><span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
+<p>In elasticity, one is often interested not in the gradient of the displacement, but in the "strain", i.e., the symmetrized version of the gradient <picture><source srcset="form_2160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon=\frac 12 (\nabla u + \nabla u^T)$" src="form_2160.png"/></picture>. This is easily facilitated with the following minor modification: </p><div class="fragment"><div class="line"><span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line"><span class="keyword">class </span>StrainPostprocessor : <span class="keyword">public</span> <a class="code hl_class" href="classDataPostprocessorTensor.html">DataPostprocessorTensor</a>&lt;dim&gt;</div>
 <div class="line">{</div>
 <div class="line"><span class="keyword">public</span>:</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classDataPostprocessorVector.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classDataPostprocessorVector.html	2024-03-17 21:57:19.179084425 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classDataPostprocessorVector.html	2024-03-17 21:57:19.187084474 +0000
@@ -246,7 +246,7 @@
 <img src="data_postprocessor_vector_1.png" alt=""/>
 </div>
 <p>In the second image, the background color corresponds to the magnitude of the gradient vector and the vector glyphs to the gradient itself. It may be surprising at first to see that from each vertex, multiple vectors originate, going in different directions. But that is because the solution is only continuous: in general, the gradient is discontinuous across edges, and so the multiple vectors originating from each vertex simply represent the differing gradients of the solution at each adjacent cell.</p>
-<p>The output above &ndash; namely, the gradient <picture><source srcset="form_2177_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u$" src="form_2177.png"/></picture> of the solution &ndash; corresponds to the temperature gradient if one interpreted <a class="el" href="step_6.html">step-6</a> as solving a steady-state heat transfer problem. It is very small in the central part of the domain because in <a class="el" href="step_6.html">step-6</a> we are solving an equation that has a coefficient <picture><source srcset="form_2178_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)$" src="form_2178.png"/></picture> that is large in the central part and small on the outside. This can be thought as a material that conducts heat well, and consequently the temperature gradient is small. On the other hand, the "heat flux" corresponds to the quantity <picture><source srcset="form_2179_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x) \nabla u(\mathbf x)$" src="form_2179.png"/></picture>. For the solution of that equation, the flux should be continuous across the interface. This is easily verified by the following modification of the postprocessor: </p><div class="fragment"><div class="line"><span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
+<p>The output above &ndash; namely, the gradient <picture><source srcset="form_2157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u$" src="form_2157.png"/></picture> of the solution &ndash; corresponds to the temperature gradient if one interpreted <a class="el" href="step_6.html">step-6</a> as solving a steady-state heat transfer problem. It is very small in the central part of the domain because in <a class="el" href="step_6.html">step-6</a> we are solving an equation that has a coefficient <picture><source srcset="form_2158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)$" src="form_2158.png"/></picture> that is large in the central part and small on the outside. This can be thought as a material that conducts heat well, and consequently the temperature gradient is small. On the other hand, the "heat flux" corresponds to the quantity <picture><source srcset="form_2159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x) \nabla u(\mathbf x)$" src="form_2159.png"/></picture>. For the solution of that equation, the flux should be continuous across the interface. This is easily verified by the following modification of the postprocessor: </p><div class="fragment"><div class="line"><span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line"><span class="keyword">class </span>HeatFluxPostprocessor : <span class="keyword">public</span> <a class="code hl_class" href="classDataPostprocessorVector.html">DataPostprocessorVector</a>&lt;dim&gt;</div>
 <div class="line">{</div>
 <div class="line"><span class="keyword">public</span>:</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classDerivativeApproximation_1_1internal_1_1SecondDerivative.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classDerivativeApproximation_1_1internal_1_1SecondDerivative.html	2024-03-17 21:57:19.215084647 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classDerivativeApproximation_1_1internal_1_1SecondDerivative.html	2024-03-17 21:57:19.219084672 +0000
@@ -235,7 +235,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the norm of the derivative object. Here, for the (symmetric) tensor of second derivatives, we choose the absolute value of the largest eigenvalue, which is the matrix norm associated to the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture> norm of vectors. It is also the largest value of the curvature of the solution. </p>
+<p>Return the norm of the derivative object. Here, for the (symmetric) tensor of second derivatives, we choose the absolute value of the largest eigenvalue, which is the matrix norm associated to the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture> norm of vectors. It is also the largest value of the curvature of the solution. </p>
 
 <p class="definition">Definition at line <a class="el" href="derivative__approximation_8cc_source.html#href_anchor">492</a> of file <a class="el" href="derivative__approximation_8cc_source.html">derivative_approximation.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classDerivativeApproximation_1_1internal_1_1ThirdDerivative.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classDerivativeApproximation_1_1internal_1_1ThirdDerivative.html	2024-03-17 21:57:19.239084795 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classDerivativeApproximation_1_1internal_1_1ThirdDerivative.html	2024-03-17 21:57:19.243084820 +0000
@@ -230,7 +230,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the norm of the derivative object. Here, for the (symmetric) tensor of second derivatives, we choose the absolute value of the largest eigenvalue, which is the matrix norm associated to the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture> norm of vectors. It is also the largest value of the curvature of the solution. </p>
+<p>Return the norm of the derivative object. Here, for the (symmetric) tensor of second derivatives, we choose the absolute value of the largest eigenvalue, which is the matrix norm associated to the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture> norm of vectors. It is also the largest value of the curvature of the solution. </p>
 
 <p class="definition">Definition at line <a class="el" href="derivative__approximation_8cc_source.html#href_anchor">631</a> of file <a class="el" href="derivative__approximation_8cc_source.html">derivative_approximation.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classDerivativeForm.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classDerivativeForm.html	2024-03-17 21:57:19.279085043 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classDerivativeForm.html	2024-03-17 21:57:19.287085092 +0000
@@ -164,24 +164,24 @@
 <tr class="memitem:a3c201452e8dd28e4f5be4a316cb9305f"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classDerivativeForm.html">DerivativeForm</a>&lt; 1, spacedim, dim, Number &gt;&#href_anchor"memTemplItemRight" valign="bottom"><a class="el" href="#href_anchor">transpose</a> (const <a class="el" href="classDerivativeForm.html">DerivativeForm</a>&lt; 1, dim, spacedim, Number &gt; &amp;DF)</td></tr>
 <tr class="separator:a3c201452e8dd28e4f5be4a316cb9305f"><td class="memSeparator" colspan="2">&#href_anchor"details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> order, <a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim, typename Number = double&gt;<br />
-class DerivativeForm&lt; order, dim, spacedim, Number &gt;</div><p>This class represents the (tangential) derivatives of a function <picture><source srcset="form_374_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf F:
-{\mathbb R}^{\text{dim}} \rightarrow {\mathbb R}^{\text{spacedim}}$" src="form_374.png"/></picture>. Such functions are always used to map the reference dim-dimensional cell into spacedim-dimensional space. For such objects, the first derivative of the function is a linear map from <picture><source srcset="form_375_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^{\text{dim}}$" src="form_375.png"/></picture> to <picture><source srcset="form_376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb
-R}^{\text{spacedim}}$" src="form_376.png"/></picture>, i.e., it can be represented as a matrix in <picture><source srcset="form_377_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb
-R}^{\text{spacedim}\times \text{dim}}$" src="form_377.png"/></picture>. This makes sense since one would represent the first derivative, <picture><source srcset="form_378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \mathbf F(\mathbf x)$" src="form_378.png"/></picture> with <picture><source srcset="form_379_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf
+class DerivativeForm&lt; order, dim, spacedim, Number &gt;</div><p>This class represents the (tangential) derivatives of a function <picture><source srcset="form_380_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf F:
+{\mathbb R}^{\text{dim}} \rightarrow {\mathbb R}^{\text{spacedim}}$" src="form_380.png"/></picture>. Such functions are always used to map the reference dim-dimensional cell into spacedim-dimensional space. For such objects, the first derivative of the function is a linear map from <picture><source srcset="form_381_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^{\text{dim}}$" src="form_381.png"/></picture> to <picture><source srcset="form_382_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb
+R}^{\text{spacedim}}$" src="form_382.png"/></picture>, i.e., it can be represented as a matrix in <picture><source srcset="form_383_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb
+R}^{\text{spacedim}\times \text{dim}}$" src="form_383.png"/></picture>. This makes sense since one would represent the first derivative, <picture><source srcset="form_384_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \mathbf F(\mathbf x)$" src="form_384.png"/></picture> with <picture><source srcset="form_385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf
 x\in
-{\mathbb R}^{\text{dim}}$" src="form_379.png"/></picture>, in such a way that the directional derivative in direction <picture><source srcset="form_380_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf d\in {\mathbb R}^{\text{dim}}$" src="form_380.png"/></picture> so that  </p><p class="formulaDsp">
-<picture><source srcset="form_381_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+{\mathbb R}^{\text{dim}}$" src="form_385.png"/></picture>, in such a way that the directional derivative in direction <picture><source srcset="form_386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf d\in {\mathbb R}^{\text{dim}}$" src="form_386.png"/></picture> so that  </p><p class="formulaDsp">
+<picture><source srcset="form_387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \nabla \mathbf F(\mathbf x) \mathbf d
   = \lim_{\varepsilon\rightarrow 0}
     \frac{\mathbf F(\mathbf x + \varepsilon \mathbf d) - \mathbf F(\mathbf
 x)}{\varepsilon},
-\end{align*}" src="form_381.png"/></picture>
+\end{align*}" src="form_387.png"/></picture>
 </p>
-<p> i.e., one needs to be able to multiply the matrix <picture><source srcset="form_382_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \mathbf F(\mathbf
-x)$" src="form_382.png"/></picture> by a vector in <picture><source srcset="form_375_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^{\text{dim}}$" src="form_375.png"/></picture>, and the result is a difference of function values, which are in <picture><source srcset="form_383_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^{\text{spacedim}}$" src="form_383.png"/></picture>. Consequently, the matrix must be of size <picture><source srcset="form_384_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{dim}$" src="form_384.png"/></picture>.</p>
-<p>Similarly, the second derivative is a bilinear map from <picture><source srcset="form_385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb
-R}^{\text{dim}} \times  {\mathbb R}^{\text{dim}}$" src="form_385.png"/></picture> to <picture><source srcset="form_376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb
-R}^{\text{spacedim}}$" src="form_376.png"/></picture>, which one can think of a rank-3 object of size <picture><source srcset="form_386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{dim}\times\text{dim}$" src="form_386.png"/></picture>.</p>
+<p> i.e., one needs to be able to multiply the matrix <picture><source srcset="form_388_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \mathbf F(\mathbf
+x)$" src="form_388.png"/></picture> by a vector in <picture><source srcset="form_381_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^{\text{dim}}$" src="form_381.png"/></picture>, and the result is a difference of function values, which are in <picture><source srcset="form_389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^{\text{spacedim}}$" src="form_389.png"/></picture>. Consequently, the matrix must be of size <picture><source srcset="form_390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{dim}$" src="form_390.png"/></picture>.</p>
+<p>Similarly, the second derivative is a bilinear map from <picture><source srcset="form_391_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb
+R}^{\text{dim}} \times  {\mathbb R}^{\text{dim}}$" src="form_391.png"/></picture> to <picture><source srcset="form_382_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb
+R}^{\text{spacedim}}$" src="form_382.png"/></picture>, which one can think of a rank-3 object of size <picture><source srcset="form_392_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{dim}\times\text{dim}$" src="form_392.png"/></picture>.</p>
 <p>In deal.II we represent these derivatives using objects of type <a class="el" href="classDerivativeForm.html">DerivativeForm</a>&lt;1,dim,spacedim,Number&gt;, <a class="el" href="classDerivativeForm.html">DerivativeForm</a>&lt;2,dim,spacedim,Number&gt; and so on. </p>
 
 <p class="definition">Definition at line <a class="el" href="derivative__form_8h_source.html#href_anchor">58</a> of file <a class="el" href="derivative__form_8h_source.html">derivative_form.h</a>.</p>
@@ -393,7 +393,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Converts a <a class="el" href="classDerivativeForm.html">DerivativeForm</a> &lt;order, dim, dim, Number&gt; to <a class="el" href="classTensor.html">Tensor</a>&lt;order+1, dim, Number&gt;. In particular, if order == 1 and the derivative is the Jacobian of <picture><source srcset="form_388_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F(\mathbf x)$" src="form_388.png"/></picture>, then <a class="el" href="classTensor.html">Tensor</a>[i] = <picture><source srcset="form_399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla F_i(\mathbf x)$" src="form_399.png"/></picture>. </p>
+<p>Converts a <a class="el" href="classDerivativeForm.html">DerivativeForm</a> &lt;order, dim, dim, Number&gt; to <a class="el" href="classTensor.html">Tensor</a>&lt;order+1, dim, Number&gt;. In particular, if order == 1 and the derivative is the Jacobian of <picture><source srcset="form_394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F(\mathbf x)$" src="form_394.png"/></picture>, then <a class="el" href="classTensor.html">Tensor</a>[i] = <picture><source srcset="form_405_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla F_i(\mathbf x)$" src="form_405.png"/></picture>. </p>
 
 </div>
 </div>
@@ -453,8 +453,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Compute the Frobenius norm of this form, i.e., the expression  <picture><source srcset="form_400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{\sum_{ij} |DF_{ij}|^2} =
-\sqrt{\sum_{ij} |\frac{\partial F_i}{\partial x_j}|^2}$" src="form_400.png"/></picture>. </p>
+<p>Compute the Frobenius norm of this form, i.e., the expression  <picture><source srcset="form_406_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{\sum_{ij} |DF_{ij}|^2} =
+\sqrt{\sum_{ij} |\frac{\partial F_i}{\partial x_j}|^2}$" src="form_406.png"/></picture>. </p>
 
 </div>
 </div>
@@ -474,7 +474,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Compute the volume element associated with the jacobian of the transformation <picture><source srcset="form_224_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F$" src="form_224.png"/></picture>. That is to say if <picture><source srcset="form_401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DF$" src="form_401.png"/></picture> is square, it computes <picture><source srcset="form_402_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\det(DF)$" src="form_402.png"/></picture>, in case DF is not square returns <picture><source srcset="form_403_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{\det(DF^T \,DF)}$" src="form_403.png"/></picture>. </p>
+<p>Compute the volume element associated with the jacobian of the transformation <picture><source srcset="form_198_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F$" src="form_198.png"/></picture>. That is to say if <picture><source srcset="form_407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DF$" src="form_407.png"/></picture> is square, it computes <picture><source srcset="form_408_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\det(DF)$" src="form_408.png"/></picture>, in case DF is not square returns <picture><source srcset="form_409_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{\det(DF^T \,DF)}$" src="form_409.png"/></picture>. </p>
 
 </div>
 </div>
@@ -494,9 +494,9 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Assuming that the current object stores the Jacobian of a mapping <picture><source srcset="form_224_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F$" src="form_224.png"/></picture>, then the current function computes the <em>covariant</em> form of the derivative, namely <picture><source srcset="form_404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\nabla \mathbf F) {\mathbf G}^{-1}$" src="form_404.png"/></picture>, where <picture><source srcset="form_405_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf G = (\nabla \mathbf F)^{T}(\nabla \mathbf F)$" src="form_405.png"/></picture>. If <picture><source srcset="form_406_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \mathbf
-F$" src="form_406.png"/></picture> is a square matrix (i.e., <picture><source srcset="form_407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F:
-{\mathbb R}^n \mapsto {\mathbb R}^n$" src="form_407.png"/></picture>), then this function simplifies to computing <picture><source srcset="form_408_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla {\mathbf F}^{-T}$" src="form_408.png"/></picture>. </p>
+<p>Assuming that the current object stores the Jacobian of a mapping <picture><source srcset="form_198_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F$" src="form_198.png"/></picture>, then the current function computes the <em>covariant</em> form of the derivative, namely <picture><source srcset="form_410_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\nabla \mathbf F) {\mathbf G}^{-1}$" src="form_410.png"/></picture>, where <picture><source srcset="form_411_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf G = (\nabla \mathbf F)^{T}(\nabla \mathbf F)$" src="form_411.png"/></picture>. If <picture><source srcset="form_412_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \mathbf
+F$" src="form_412.png"/></picture> is a square matrix (i.e., <picture><source srcset="form_413_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F:
+{\mathbb R}^n \mapsto {\mathbb R}^n$" src="form_413.png"/></picture>), then this function simplifies to computing <picture><source srcset="form_414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla {\mathbf F}^{-T}$" src="form_414.png"/></picture>. </p>
 
 </div>
 </div>
@@ -552,7 +552,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Auxiliary function that computes <picture><source srcset="form_409_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A T^{T}$" src="form_409.png"/></picture> where A represents the current object. </p>
+<p>Auxiliary function that computes <picture><source srcset="form_415_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A T^{T}$" src="form_415.png"/></picture> where A represents the current object. </p>
 
 </div>
 </div>
@@ -581,21 +581,21 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>One of the uses of <a class="el" href="classDerivativeForm.html">DerivativeForm</a> is to apply it as a linear transformation. This function returns <picture><source srcset="form_387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \mathbf F(\mathbf x) \Delta \mathbf x$" src="form_387.png"/></picture>, which approximates the change in <picture><source srcset="form_388_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F(\mathbf x)$" src="form_388.png"/></picture> when <picture><source srcset="form_216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_216.png"/></picture> is changed by the amount <picture><source srcset="form_389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta \mathbf x$" src="form_389.png"/></picture>  </p><p class="formulaDsp">
-<picture><source srcset="form_390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>One of the uses of <a class="el" href="classDerivativeForm.html">DerivativeForm</a> is to apply it as a linear transformation. This function returns <picture><source srcset="form_393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \mathbf F(\mathbf x) \Delta \mathbf x$" src="form_393.png"/></picture>, which approximates the change in <picture><source srcset="form_394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F(\mathbf x)$" src="form_394.png"/></picture> when <picture><source srcset="form_190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_190.png"/></picture> is changed by the amount <picture><source srcset="form_395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta \mathbf x$" src="form_395.png"/></picture>  </p><p class="formulaDsp">
+<picture><source srcset="form_396_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \nabla \mathbf F(\mathbf x) \; \Delta \mathbf x
   \approx
   \mathbf F(\mathbf x + \Delta \mathbf x) - \mathbf F(\mathbf x).
-\]" src="form_390.png"/></picture>
+\]" src="form_396.png"/></picture>
 </p>
 <p> The transformation corresponds to  </p><p class="formulaDsp">
-<picture><source srcset="form_391_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   [\text{result}]_{i_1,\dots,i_k} = i\sum_{j}
   \left[\nabla \mathbf F(\mathbf x)\right]_{i_1,\dots,i_k, j}
   \Delta x_j
-\]" src="form_391.png"/></picture>
+\]" src="form_397.png"/></picture>
 </p>
-<p> in index notation and corresponds to <picture><source srcset="form_392_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\Delta \mathbf x] [\nabla \mathbf F(\mathbf x)]^T$" src="form_392.png"/></picture> in matrix notation. </p>
+<p> in index notation and corresponds to <picture><source srcset="form_398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\Delta \mathbf x] [\nabla \mathbf F(\mathbf x)]^T$" src="form_398.png"/></picture> in matrix notation. </p>
 
 <p class="definition">Definition at line <a class="el" href="derivative__form_8h_source.html#href_anchor">454</a> of file <a class="el" href="derivative__form_8h_source.html">derivative_form.h</a>.</p>
 
@@ -625,7 +625,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Similar to the previous <a class="el" href="#href_anchor">apply_transformation()</a>. Each row of the result corresponds to one of the rows of <code>D_X</code> transformed by <code>grad_F</code>, equivalent to <picture><source srcset="form_393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{D\_X} \, \mathrm{grad\_F}^T$" src="form_393.png"/></picture> in matrix notation. </p>
+<p>Similar to the previous <a class="el" href="#href_anchor">apply_transformation()</a>. Each row of the result corresponds to one of the rows of <code>D_X</code> transformed by <code>grad_F</code>, equivalent to <picture><source srcset="form_399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{D\_X} \, \mathrm{grad\_F}^T$" src="form_399.png"/></picture> in matrix notation. </p>
 
 <p class="definition">Definition at line <a class="el" href="derivative__form_8h_source.html#href_anchor">479</a> of file <a class="el" href="derivative__form_8h_source.html">derivative_form.h</a>.</p>
 
@@ -655,7 +655,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Similar to the previous <a class="el" href="#href_anchor">apply_transformation()</a>, specialized for the case <code>dim == spacedim</code> where we can return a rank-2 tensor instead of the more general <code><a class="el" href="classDerivativeForm.html">DerivativeForm</a></code>. Each row of the result corresponds to one of the rows of <code>D_X</code> transformed by <code>grad_F</code>, equivalent to <picture><source srcset="form_393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{D\_X} \, \mathrm{grad\_F}^T$" src="form_393.png"/></picture> in matrix notation. </p>
+<p>Similar to the previous <a class="el" href="#href_anchor">apply_transformation()</a>, specialized for the case <code>dim == spacedim</code> where we can return a rank-2 tensor instead of the more general <code><a class="el" href="classDerivativeForm.html">DerivativeForm</a></code>. Each row of the result corresponds to one of the rows of <code>D_X</code> transformed by <code>grad_F</code>, equivalent to <picture><source srcset="form_399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{D\_X} \, \mathrm{grad\_F}^T$" src="form_399.png"/></picture> in matrix notation. </p>
 
 <p class="definition">Definition at line <a class="el" href="derivative__form_8h_source.html#href_anchor">505</a> of file <a class="el" href="derivative__form_8h_source.html">derivative_form.h</a>.</p>
 
@@ -715,11 +715,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Similar to the previous <a class="el" href="#href_anchor">apply_transformation()</a>. In matrix notation, it computes <picture><source srcset="form_394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DF2 \, DF1^{T}$" src="form_394.png"/></picture>. Moreover, the result of this operation <picture><source srcset="form_395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_395.png"/></picture> can be interpreted as a metric tensor in <picture><source srcset="form_396_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^\text{spacedim}$" src="form_396.png"/></picture> which corresponds to the Euclidean metric tensor in <picture><source srcset="form_106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^\text{dim}$" src="form_106.png"/></picture>. For every pair of vectors <picture><source srcset="form_397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u, \mathbf v \in {\mathbb R}^\text{spacedim}$" src="form_397.png"/></picture>, we have:  </p><p class="formulaDsp">
-<picture><source srcset="form_398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Similar to the previous <a class="el" href="#href_anchor">apply_transformation()</a>. In matrix notation, it computes <picture><source srcset="form_400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DF2 \, DF1^{T}$" src="form_400.png"/></picture>. Moreover, the result of this operation <picture><source srcset="form_401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_401.png"/></picture> can be interpreted as a metric tensor in <picture><source srcset="form_402_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^\text{spacedim}$" src="form_402.png"/></picture> which corresponds to the Euclidean metric tensor in <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^\text{dim}$" src="form_99.png"/></picture>. For every pair of vectors <picture><source srcset="form_403_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u, \mathbf v \in {\mathbb R}^\text{spacedim}$" src="form_403.png"/></picture>, we have:  </p><p class="formulaDsp">
+<picture><source srcset="form_404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf u \cdot \mathbf A \mathbf v =
   \text{DF2}^{-1}(\mathbf u) \cdot \text{DF1}^{-1}(\mathbf v)
-\]" src="form_398.png"/></picture>
+\]" src="form_404.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="derivative__form_8h_source.html#href_anchor">565</a> of file <a class="el" href="derivative__form_8h_source.html">derivative_form.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1CellLevelBase.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1CellLevelBase.html	2024-03-17 21:57:19.339085413 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1CellLevelBase.html	2024-03-17 21:57:19.339085413 +0000
@@ -514,7 +514,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the value of the residual vector field <picture><source srcset="form_904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{r}(\mathbf{X})$" src="form_904.png"/></picture>.</p>
+<p>Compute the value of the residual vector field <picture><source srcset="form_903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{r}(\mathbf{X})$" src="form_903.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[out]</td><td class="paramname">residual</td><td>A <a class="el" href="classVector.html">Vector</a> object with the value for each component of the vector field evaluated at the point defined by the independent variable values.</td></tr>
@@ -552,9 +552,9 @@
 </table>
 </div><div class="memdoc">
 <p>Compute the gradient (first derivative) of the residual vector field with respect to all independent variables, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_905_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \frac{\partial\mathbf{r}(\mathbf{X})}{\partial\mathbf{X}}
-\]" src="form_905.png"/></picture>
+\]" src="form_904.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -1295,7 +1295,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set the actual value of the independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Set the actual value of the independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index in the vector of independent variables. </td></tr>
@@ -1336,7 +1336,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Initialize an independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture> such that subsequent operations performed with it are tracked.</p>
+<p>Initialize an independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture> such that subsequent operations performed with it are tracked.</p>
 <dl class="section note"><dt>Note</dt><dd>Care must be taken to mark each independent variable only once.</dd>
 <dd>
 The order in which the independent variables are marked defines the order of all future internal operations. They must be manipulated in the same order as that in which they are first marked. If not then, for example, ADOL-C won't throw an error, but rather it might complain nonsensically during later computations or produce garbage results.</dd></dl>
@@ -1411,7 +1411,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Initialize an independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Initialize an independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>An auto-differentiable number that is ready for use in standard computations. The operations that are performed with it are not recorded on the tape, and so should only be used when not in recording mode. </td></tr>
@@ -1542,7 +1542,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Register the definition of the index'th dependent variable <picture><source srcset="form_903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf{X})$" src="form_903.png"/></picture>.</p>
+<p>Register the definition of the index'th dependent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf{X})$" src="form_902.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index of the entry in the global list of dependent variables that this function belongs to. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1EnergyFunctional.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1EnergyFunctional.html	2024-03-17 21:57:19.403085809 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1EnergyFunctional.html	2024-03-17 21:57:19.411085858 +0000
@@ -440,11 +440,11 @@
 <p>The constructor for the class.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">n_independent_variables</td><td>The number of independent variables that will be used in the definition of the functions that it is desired to compute the sensitivities of. In the computation of <picture><source srcset="form_906_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi(\mathbf{X})$" src="form_906.png"/></picture>, this will be the number of inputs <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture>, i.e., the dimension of the domain space.</td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">n_independent_variables</td><td>The number of independent variables that will be used in the definition of the functions that it is desired to compute the sensitivities of. In the computation of <picture><source srcset="form_905_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi(\mathbf{X})$" src="form_905.png"/></picture>, this will be the number of inputs <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture>, i.e., the dimension of the domain space.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section note"><dt>Note</dt><dd>There is only one dependent variable associated with the total energy attributed to the local finite element. That is to say, this class assumes that the (local) right hand side and matrix contribution is computed from the first and second derivatives of a scalar function <picture><source srcset="form_906_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi(\mathbf{X})$" src="form_906.png"/></picture>. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>There is only one dependent variable associated with the total energy attributed to the local finite element. That is to say, this class assumes that the (local) right hand side and matrix contribution is computed from the first and second derivatives of a scalar function <picture><source srcset="form_905_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi(\mathbf{X})$" src="form_905.png"/></picture>. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="ad__helpers_8cc_source.html#href_anchor">793</a> of file <a class="el" href="ad__helpers_8cc_source.html">ad_helpers.cc</a>.</p>
 
@@ -495,7 +495,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Register the definition of the total cell energy <picture><source srcset="form_906_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi(\mathbf{X})$" src="form_906.png"/></picture>.</p>
+<p>Register the definition of the total cell energy <picture><source srcset="form_905_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi(\mathbf{X})$" src="form_905.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">energy</td><td>A recorded function that defines the total cell energy. This represents the single dependent variable from which both the residual and its linearization are to be computed.</td></tr>
@@ -527,9 +527,9 @@
       </table>
 </div><div class="memdoc">
 <p>Evaluation of the total scalar energy functional for a chosen set of degree of freedom values, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_906_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \Psi(\mathbf{X}) \vert_{\mathbf{X}}
-\]" src="form_907.png"/></picture>
+\]" src="form_906.png"/></picture>
 </p>
 <p>The values at the evaluation point <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture> are obtained by calling <a class="el" href="classDifferentiation_1_1AD_1_1CellLevelBase.html#href_anchor">CellLevelBase::set_dof_values()</a>.</p>
 <dl class="section return"><dt>Returns</dt><dd>The value of the energy functional at the evaluation point corresponding to a chosen set of local degree of freedom values. </dd></dl>
@@ -562,12 +562,12 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Evaluation of the residual for a chosen set of degree of freedom values. Underlying this is the computation of the gradient (first derivative) of the scalar function <picture><source srcset="form_176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi$" src="form_176.png"/></picture> with respect to all independent variables, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_908_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Evaluation of the residual for a chosen set of degree of freedom values. Underlying this is the computation of the gradient (first derivative) of the scalar function <picture><source srcset="form_150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi$" src="form_150.png"/></picture> with respect to all independent variables, i.e.  </p><p class="formulaDsp">
+<picture><source srcset="form_907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf{r}(\mathbf{X}) =
 \frac{\partial\Psi(\mathbf{X})}{\partial\mathbf{X}}
 \Big\vert_{\mathbf{X}}
-\]" src="form_908.png"/></picture>
+\]" src="form_907.png"/></picture>
 </p>
 <p>The values at the evaluation point <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture> are obtained by calling <a class="el" href="classDifferentiation_1_1AD_1_1CellLevelBase.html#href_anchor">CellLevelBase::set_dof_values()</a>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
@@ -607,13 +607,13 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the linearization of the residual vector around a chosen set of degree of freedom values. Underlying this is the computation of the Hessian (second derivative) of the scalar function <picture><source srcset="form_176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi$" src="form_176.png"/></picture> with respect to all independent variables, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_909_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Compute the linearization of the residual vector around a chosen set of degree of freedom values. Underlying this is the computation of the Hessian (second derivative) of the scalar function <picture><source srcset="form_150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi$" src="form_150.png"/></picture> with respect to all independent variables, i.e.  </p><p class="formulaDsp">
+<picture><source srcset="form_908_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \frac{\partial\mathbf{r}(\mathbf{X})}{\partial\mathbf{X}}
     =
 \frac{\partial^{2}\Psi(\mathbf{X})}{\partial\mathbf{X}
 \otimes \partial\mathbf{X}} \Big\vert_{\mathbf{X}}
-\]" src="form_909.png"/></picture>
+\]" src="form_908.png"/></picture>
 </p>
 <p>The values at the evaluation point <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture> are obtained by calling <a class="el" href="classDifferentiation_1_1AD_1_1CellLevelBase.html#href_anchor">CellLevelBase::set_dof_values()</a>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
@@ -1551,7 +1551,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set the actual value of the independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Set the actual value of the independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index in the vector of independent variables. </td></tr>
@@ -1592,7 +1592,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Initialize an independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture> such that subsequent operations performed with it are tracked.</p>
+<p>Initialize an independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture> such that subsequent operations performed with it are tracked.</p>
 <dl class="section note"><dt>Note</dt><dd>Care must be taken to mark each independent variable only once.</dd>
 <dd>
 The order in which the independent variables are marked defines the order of all future internal operations. They must be manipulated in the same order as that in which they are first marked. If not then, for example, ADOL-C won't throw an error, but rather it might complain nonsensically during later computations or produce garbage results.</dd></dl>
@@ -1667,7 +1667,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Initialize an independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Initialize an independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>An auto-differentiable number that is ready for use in standard computations. The operations that are performed with it are not recorded on the tape, and so should only be used when not in recording mode. </td></tr>
@@ -1798,7 +1798,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Register the definition of the index'th dependent variable <picture><source srcset="form_903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf{X})$" src="form_903.png"/></picture>.</p>
+<p>Register the definition of the index'th dependent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf{X})$" src="form_902.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index of the entry in the global list of dependent variables that this function belongs to. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1HelperBase.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1HelperBase.html	2024-03-17 21:57:19.463086179 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1HelperBase.html	2024-03-17 21:57:19.463086179 +0000
@@ -991,7 +991,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set the actual value of the independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Set the actual value of the independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index in the vector of independent variables. </td></tr>
@@ -1032,7 +1032,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Initialize an independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture> such that subsequent operations performed with it are tracked.</p>
+<p>Initialize an independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture> such that subsequent operations performed with it are tracked.</p>
 <dl class="section note"><dt>Note</dt><dd>Care must be taken to mark each independent variable only once.</dd>
 <dd>
 The order in which the independent variables are marked defines the order of all future internal operations. They must be manipulated in the same order as that in which they are first marked. If not then, for example, ADOL-C won't throw an error, but rather it might complain nonsensically during later computations or produce garbage results.</dd></dl>
@@ -1107,7 +1107,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Initialize an independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Initialize an independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>An auto-differentiable number that is ready for use in standard computations. The operations that are performed with it are not recorded on the tape, and so should only be used when not in recording mode. </td></tr>
@@ -1238,7 +1238,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Register the definition of the index'th dependent variable <picture><source srcset="form_903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf{X})$" src="form_903.png"/></picture>.</p>
+<p>Register the definition of the index'th dependent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf{X})$" src="form_902.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index of the entry in the global list of dependent variables that this function belongs to. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1PointLevelFunctionsBase.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1PointLevelFunctionsBase.html	2024-03-17 21:57:19.523086550 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1PointLevelFunctionsBase.html	2024-03-17 21:57:19.527086575 +0000
@@ -437,7 +437,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const ExtractorType &amp;</td>          <td class="paramname"><span class="paramname"><em>extractor</em></span>&#href_anchor"memdoc">
-<p>Register the subset of independent variables <picture><source srcset="form_912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_912.png"/></picture>.</p>
+<p>Register the subset of independent variables <picture><source srcset="form_911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_911.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">value</td><td>A field that defines a number of independent variables. When considering taped <a class="el" href="namespaceDifferentiation_1_1AD.html">AD</a> numbers with branching functions, to avoid potential issues with branch switching it may be a good idea to choose these values close or equal to those that will be later evaluated and differentiated around. </td></tr>
@@ -551,7 +551,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const ExtractorType &amp;</td>          <td class="paramname"><span class="paramname"><em>extractor</em></span>&#href_anchor"memdoc">
-<p>Set the values for a subset of independent variables <picture><source srcset="form_912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_912.png"/></picture>.</p>
+<p>Set the values for a subset of independent variables <picture><source srcset="form_911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_911.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">value</td><td>A field that defines the values of a number of independent variables. </td></tr>
@@ -600,7 +600,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set the actual value of the independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Set the actual value of the independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index in the vector of independent variables. </td></tr>
@@ -1353,7 +1353,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set the actual value of the independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Set the actual value of the independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index in the vector of independent variables. </td></tr>
@@ -1394,7 +1394,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Initialize an independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture> such that subsequent operations performed with it are tracked.</p>
+<p>Initialize an independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture> such that subsequent operations performed with it are tracked.</p>
 <dl class="section note"><dt>Note</dt><dd>Care must be taken to mark each independent variable only once.</dd>
 <dd>
 The order in which the independent variables are marked defines the order of all future internal operations. They must be manipulated in the same order as that in which they are first marked. If not then, for example, ADOL-C won't throw an error, but rather it might complain nonsensically during later computations or produce garbage results.</dd></dl>
@@ -1469,7 +1469,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Initialize an independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Initialize an independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>An auto-differentiable number that is ready for use in standard computations. The operations that are performed with it are not recorded on the tape, and so should only be used when not in recording mode. </td></tr>
@@ -1600,7 +1600,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Register the definition of the index'th dependent variable <picture><source srcset="form_903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf{X})$" src="form_903.png"/></picture>.</p>
+<p>Register the definition of the index'th dependent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf{X})$" src="form_902.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index of the entry in the global list of dependent variables that this function belongs to. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1ResidualLinearization.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1ResidualLinearization.html	2024-03-17 21:57:19.591086970 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1ResidualLinearization.html	2024-03-17 21:57:19.599087019 +0000
@@ -454,8 +454,8 @@
 <p>The constructor for the class.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">n_independent_variables</td><td>The number of independent variables that will be used in the definition of the functions that it is desired to compute the sensitivities of. In the computation of <picture><source srcset="form_904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{r}(\mathbf{X})$" src="form_904.png"/></picture>, this will be the number of inputs <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture>, i.e., the dimension of the domain space. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">n_dependent_variables</td><td>The number of scalar functions to be defined that will have a sensitivity to the given independent variables. In the computation of <picture><source srcset="form_904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{r}(\mathbf{X})$" src="form_904.png"/></picture>, this will be the number of outputs <picture><source srcset="form_910_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{r}$" src="form_910.png"/></picture>, i.e., the dimension of the image space. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">n_independent_variables</td><td>The number of independent variables that will be used in the definition of the functions that it is desired to compute the sensitivities of. In the computation of <picture><source srcset="form_903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{r}(\mathbf{X})$" src="form_903.png"/></picture>, this will be the number of inputs <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture>, i.e., the dimension of the domain space. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">n_dependent_variables</td><td>The number of scalar functions to be defined that will have a sensitivity to the given independent variables. In the computation of <picture><source srcset="form_903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{r}(\mathbf{X})$" src="form_903.png"/></picture>, this will be the number of outputs <picture><source srcset="form_909_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{r}$" src="form_909.png"/></picture>, i.e., the dimension of the image space. </td></tr>
   </table>
   </dd>
 </dl>
@@ -509,7 +509,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Register the definition of the cell residual vector <picture><source srcset="form_904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{r}(\mathbf{X})$" src="form_904.png"/></picture>.</p>
+<p>Register the definition of the cell residual vector <picture><source srcset="form_903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{r}(\mathbf{X})$" src="form_903.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">residual</td><td>A vector of recorded functions that defines the residual. The components of this vector represents the dependent variables.</td></tr>
@@ -549,9 +549,9 @@
 </table>
 </div><div class="memdoc">
 <p>Evaluation of the residual for a chosen set of degree of freedom values. This corresponds to the computation of the residual vector, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_910_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf{r}(\mathbf{X}) \vert_{\mathbf{X}}
-\]" src="form_911.png"/></picture>
+\]" src="form_910.png"/></picture>
 </p>
 <p>The values at the evaluation point <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture> are obtained by calling <a class="el" href="classDifferentiation_1_1AD_1_1CellLevelBase.html#href_anchor">CellLevelBase::set_dof_values()</a>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
@@ -591,10 +591,10 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the linearization of the residual vector around a chosen set of degree of freedom values. Underlying this is the computation of the gradient (first derivative) of the residual vector <picture><source srcset="form_910_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{r}$" src="form_910.png"/></picture> with respect to all independent variables, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_905_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Compute the linearization of the residual vector around a chosen set of degree of freedom values. Underlying this is the computation of the gradient (first derivative) of the residual vector <picture><source srcset="form_909_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{r}$" src="form_909.png"/></picture> with respect to all independent variables, i.e.  </p><p class="formulaDsp">
+<picture><source srcset="form_904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \frac{\partial\mathbf{r}(\mathbf{X})}{\partial\mathbf{X}}
-\]" src="form_905.png"/></picture>
+\]" src="form_904.png"/></picture>
 </p>
 <p>The values at the evaluation point <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture> are obtained by calling <a class="el" href="classDifferentiation_1_1AD_1_1CellLevelBase.html#href_anchor">CellLevelBase::set_dof_values()</a>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
@@ -1532,7 +1532,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set the actual value of the independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Set the actual value of the independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index in the vector of independent variables. </td></tr>
@@ -1573,7 +1573,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Initialize an independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture> such that subsequent operations performed with it are tracked.</p>
+<p>Initialize an independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture> such that subsequent operations performed with it are tracked.</p>
 <dl class="section note"><dt>Note</dt><dd>Care must be taken to mark each independent variable only once.</dd>
 <dd>
 The order in which the independent variables are marked defines the order of all future internal operations. They must be manipulated in the same order as that in which they are first marked. If not then, for example, ADOL-C won't throw an error, but rather it might complain nonsensically during later computations or produce garbage results.</dd></dl>
@@ -1648,7 +1648,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Initialize an independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Initialize an independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>An auto-differentiable number that is ready for use in standard computations. The operations that are performed with it are not recorded on the tape, and so should only be used when not in recording mode. </td></tr>
@@ -1779,7 +1779,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Register the definition of the index'th dependent variable <picture><source srcset="form_903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf{X})$" src="form_903.png"/></picture>.</p>
+<p>Register the definition of the index'th dependent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf{X})$" src="form_902.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index of the entry in the global list of dependent variables that this function belongs to. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1ScalarFunction.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1ScalarFunction.html	2024-03-17 21:57:19.667087439 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1ScalarFunction.html	2024-03-17 21:57:19.667087439 +0000
@@ -520,7 +520,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Register the definition of the scalar field <picture><source srcset="form_906_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi(\mathbf{X})$" src="form_906.png"/></picture>.</p>
+<p>Register the definition of the scalar field <picture><source srcset="form_905_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi(\mathbf{X})$" src="form_905.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">func</td><td>The recorded function that defines a dependent variable.</td></tr>
@@ -551,7 +551,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Compute the value of the scalar field <picture><source srcset="form_906_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi(\mathbf{X})$" src="form_906.png"/></picture> using the tape as opposed to executing the source code.</p>
+<p>Compute the value of the scalar field <picture><source srcset="form_905_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi(\mathbf{X})$" src="form_905.png"/></picture> using the tape as opposed to executing the source code.</p>
 <dl class="section return"><dt>Returns</dt><dd>A scalar object with the value for the scalar field evaluated at the point defined by the independent variable values. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="ad__helpers_8cc_source.html#href_anchor">1348</a> of file <a class="el" href="ad__helpers_8cc_source.html">ad_helpers.cc</a>.</p>
@@ -575,9 +575,9 @@
       </table>
 </div><div class="memdoc">
 <p>Compute the gradient (first derivative) of the scalar field with respect to all independent variables, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_913_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \frac{\partial\Psi(\mathbf{X})}{\partial\mathbf{X}}
-\]" src="form_913.png"/></picture>
+\]" src="form_912.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -607,10 +607,10 @@
       </table>
 </div><div class="memdoc">
 <p>Compute the Hessian (second derivative) of the scalar field with respect to all independent variables, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_914_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_913_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \frac{\partial^{2}\Psi(\mathbf{X})}{\partial\mathbf{X} \otimes
 \partial\mathbf{X}}
-\]" src="form_914.png"/></picture>
+\]" src="form_913.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -653,10 +653,10 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Extract the function gradient for a subset of independent variables <picture><source srcset="form_912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_912.png"/></picture>, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_915_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Extract the function gradient for a subset of independent variables <picture><source srcset="form_911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_911.png"/></picture>, i.e.  </p><p class="formulaDsp">
+<picture><source srcset="form_914_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \frac{\partial\Psi(\mathbf{X})}{\partial\mathbf{A}}
-\]" src="form_915.png"/></picture>
+\]" src="form_914.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -704,13 +704,13 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Extract the function Hessian for a subset of independent variables <picture><source srcset="form_916_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A},\mathbf{B} \subset \mathbf{X}$" src="form_916.png"/></picture>, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_917_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Extract the function Hessian for a subset of independent variables <picture><source srcset="form_915_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A},\mathbf{B} \subset \mathbf{X}$" src="form_915.png"/></picture>, i.e.  </p><p class="formulaDsp">
+<picture><source srcset="form_916_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \frac{}{\partial\mathbf{B}} \left[
 \frac{\partial\Psi(\mathbf{X})}{\partial\mathbf{A}} \right] =
 \frac{\partial^{2}\Psi(\mathbf{X})}{\partial\mathbf{B} \otimes
 \partial\mathbf{A}}
-\]" src="form_917.png"/></picture>
+\]" src="form_916.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -753,11 +753,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Extract the function Hessian for a subset of independent variables <picture><source srcset="form_916_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A},\mathbf{B} \subset \mathbf{X}$" src="form_916.png"/></picture>, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_918_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Extract the function Hessian for a subset of independent variables <picture><source srcset="form_915_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A},\mathbf{B} \subset \mathbf{X}$" src="form_915.png"/></picture>, i.e.  </p><p class="formulaDsp">
+<picture><source srcset="form_917_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \frac{}{\partial\mathbf{B}} \left[
 \frac{\partial\Psi(\mathbf{X})}{\partial\mathbf{A}} \right]
-\]" src="form_918.png"/></picture>
+\]" src="form_917.png"/></picture>
 </p>
 <p>This function is a specialization of the above for rank-0 tensors (scalars). This corresponds to extracting a single entry of the Hessian matrix because both extractors imply selection of just a single row or column of the matrix. </p>
 
@@ -794,11 +794,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Extract the function Hessian for a subset of independent variables <picture><source srcset="form_916_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A},\mathbf{B} \subset \mathbf{X}$" src="form_916.png"/></picture>, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_918_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Extract the function Hessian for a subset of independent variables <picture><source srcset="form_915_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A},\mathbf{B} \subset \mathbf{X}$" src="form_915.png"/></picture>, i.e.  </p><p class="formulaDsp">
+<picture><source srcset="form_917_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \frac{}{\partial\mathbf{B}} \left[
 \frac{\partial\Psi(\mathbf{X})}{\partial\mathbf{A}} \right]
-\]" src="form_918.png"/></picture>
+\]" src="form_917.png"/></picture>
 </p>
 <p>This function is a specialization of the above for rank-4 symmetric tensors. </p>
 
@@ -919,7 +919,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Register the subset of independent variables <picture><source srcset="form_912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_912.png"/></picture>.</p>
+<p>Register the subset of independent variables <picture><source srcset="form_911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_911.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">value</td><td>A field that defines a number of independent variables. When considering taped <a class="el" href="namespaceDifferentiation_1_1AD.html">AD</a> numbers with branching functions, to avoid potential issues with branch switching it may be a good idea to choose these values close or equal to those that will be later evaluated and differentiated around. </td></tr>
@@ -1064,7 +1064,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set the values for a subset of independent variables <picture><source srcset="form_912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_912.png"/></picture>.</p>
+<p>Set the values for a subset of independent variables <picture><source srcset="form_911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_911.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">value</td><td>A field that defines the values of a number of independent variables. </td></tr>
@@ -1113,7 +1113,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set the actual value of the independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Set the actual value of the independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index in the vector of independent variables. </td></tr>
@@ -1155,7 +1155,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set the actual value of the independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Set the actual value of the independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index in the vector of independent variables. </td></tr>
@@ -1907,7 +1907,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Initialize an independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture> such that subsequent operations performed with it are tracked.</p>
+<p>Initialize an independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture> such that subsequent operations performed with it are tracked.</p>
 <dl class="section note"><dt>Note</dt><dd>Care must be taken to mark each independent variable only once.</dd>
 <dd>
 The order in which the independent variables are marked defines the order of all future internal operations. They must be manipulated in the same order as that in which they are first marked. If not then, for example, ADOL-C won't throw an error, but rather it might complain nonsensically during later computations or produce garbage results.</dd></dl>
@@ -1982,7 +1982,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Initialize an independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Initialize an independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>An auto-differentiable number that is ready for use in standard computations. The operations that are performed with it are not recorded on the tape, and so should only be used when not in recording mode. </td></tr>
@@ -2113,7 +2113,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Register the definition of the index'th dependent variable <picture><source srcset="form_903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf{X})$" src="form_903.png"/></picture>.</p>
+<p>Register the definition of the index'th dependent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf{X})$" src="form_902.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index of the entry in the global list of dependent variables that this function belongs to. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1VectorFunction.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1VectorFunction.html	2024-03-17 21:57:19.735087859 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classDifferentiation_1_1AD_1_1VectorFunction.html	2024-03-17 21:57:19.743087909 +0000
@@ -524,7 +524,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Register the definition of the vector field <picture><source srcset="form_919_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\Psi}(\mathbf{X})$" src="form_919.png"/></picture>.</p>
+<p>Register the definition of the vector field <picture><source srcset="form_918_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\Psi}(\mathbf{X})$" src="form_918.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">funcs</td><td>A vector of recorded functions that defines the dependent variables.</td></tr>
@@ -558,7 +558,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const ExtractorType &amp;</td>          <td class="paramname"><span class="paramname"><em>extractor</em></span>&#href_anchor"memdoc">
-<p>Register the definition of the vector field <picture><source srcset="form_920_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf{g}}(\mathbf{X}) \subset \boldsymbol{\Psi}(\mathbf{X})$" src="form_920.png"/></picture> that may represent a subset of the dependent variables.</p>
+<p>Register the definition of the vector field <picture><source srcset="form_919_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf{g}}(\mathbf{X}) \subset \boldsymbol{\Psi}(\mathbf{X})$" src="form_919.png"/></picture> that may represent a subset of the dependent variables.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">funcs</td><td>The recorded functions that define a set of dependent variables. </td></tr>
@@ -588,7 +588,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Compute the value of the vector field <picture><source srcset="form_919_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\Psi}(\mathbf{X})$" src="form_919.png"/></picture>.</p>
+<p>Compute the value of the vector field <picture><source srcset="form_918_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\Psi}(\mathbf{X})$" src="form_918.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[out]</td><td class="paramname">values</td><td>A <a class="el" href="classVector.html">Vector</a> object with the value for each component of the vector field evaluated at the point defined by the independent variable values. The output <code>values</code> vector has a length corresponding to <code>n_dependent_variables</code>. </td></tr>
@@ -617,10 +617,10 @@
       </table>
 </div><div class="memdoc">
 <p>Compute the Jacobian (first derivative) of the vector field with respect to all independent variables, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_921_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_920_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf{J}(\boldsymbol{\Psi})
      = \frac{\partial\boldsymbol{\Psi}(\mathbf{X})}{\partial\mathbf{X}}
-\]" src="form_921.png"/></picture>
+\]" src="form_920.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -663,7 +663,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Extract the set of functions' values for a subset of dependent variables <picture><source srcset="form_922_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{g} \subset \boldsymbol{\Psi}(\mathbf{X})$" src="form_922.png"/></picture>.</p>
+<p>Extract the set of functions' values for a subset of dependent variables <picture><source srcset="form_921_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{g} \subset \boldsymbol{\Psi}(\mathbf{X})$" src="form_921.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">values</td><td>A <a class="el" href="classVector.html">Vector</a> object with the value for each component of the vector field evaluated at the point defined by the independent variable values. </td></tr>
@@ -709,13 +709,13 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Extract the Jacobian of the subset of dependent functions <picture><source srcset="form_922_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{g} \subset \boldsymbol{\Psi}(\mathbf{X})$" src="form_922.png"/></picture> for a subset of independent variables <picture><source srcset="form_912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_912.png"/></picture>, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_923_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Extract the Jacobian of the subset of dependent functions <picture><source srcset="form_921_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{g} \subset \boldsymbol{\Psi}(\mathbf{X})$" src="form_921.png"/></picture> for a subset of independent variables <picture><source srcset="form_911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_911.png"/></picture>, i.e.  </p><p class="formulaDsp">
+<picture><source srcset="form_922_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf{J}(\mathbf{g})
      = \frac{\partial\mathbf{g}(\mathbf{X})}{\partial\mathbf{A}}
-\]" src="form_923.png"/></picture>
+\]" src="form_922.png"/></picture>
 </p>
-<p> The first index of the Jacobian matrix <picture><source srcset="form_924_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{J}(\mathbf{g})$" src="form_924.png"/></picture> relates to the dependent variables, while the second index relates to the independent variables.</p>
+<p> The first index of the Jacobian matrix <picture><source srcset="form_923_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{J}(\mathbf{g})$" src="form_923.png"/></picture> relates to the dependent variables, while the second index relates to the independent variables.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">jacobian</td><td>The Jacobian of the vector function with respect to all independent variables, i.e., that returned by <a class="el" href="#href_anchor">compute_jacobian()</a>. </td></tr>
@@ -757,11 +757,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Extract the Jacobian of the subset of dependent functions <picture><source srcset="form_922_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{g} \subset \boldsymbol{\Psi}(\mathbf{X})$" src="form_922.png"/></picture> for a subset of independent variables <picture><source srcset="form_912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_912.png"/></picture>, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_923_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Extract the Jacobian of the subset of dependent functions <picture><source srcset="form_921_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{g} \subset \boldsymbol{\Psi}(\mathbf{X})$" src="form_921.png"/></picture> for a subset of independent variables <picture><source srcset="form_911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_911.png"/></picture>, i.e.  </p><p class="formulaDsp">
+<picture><source srcset="form_922_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf{J}(\mathbf{g})
      = \frac{\partial\mathbf{g}(\mathbf{X})}{\partial\mathbf{A}}
-\]" src="form_923.png"/></picture>
+\]" src="form_922.png"/></picture>
 </p>
 <p>This function is a specialization of the above for rank-0 tensors (scalars). This corresponds to extracting a single entry of the Jacobian matrix because both extractors imply selection of just a single row or column of the matrix. </p>
 
@@ -798,11 +798,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Extract the Jacobian of the subset of dependent functions <picture><source srcset="form_922_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{g} \subset \boldsymbol{\Psi}(\mathbf{X})$" src="form_922.png"/></picture> for a subset of independent variables <picture><source srcset="form_912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_912.png"/></picture>, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_923_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Extract the Jacobian of the subset of dependent functions <picture><source srcset="form_921_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{g} \subset \boldsymbol{\Psi}(\mathbf{X})$" src="form_921.png"/></picture> for a subset of independent variables <picture><source srcset="form_911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_911.png"/></picture>, i.e.  </p><p class="formulaDsp">
+<picture><source srcset="form_922_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf{J}(\mathbf{g})
      = \frac{\partial\mathbf{g}(\mathbf{X})}{\partial\mathbf{A}}
-\]" src="form_923.png"/></picture>
+\]" src="form_922.png"/></picture>
 </p>
 <p>This function is a specialization of the above for rank-4 symmetric tensors. </p>
 
@@ -923,7 +923,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Register the subset of independent variables <picture><source srcset="form_912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_912.png"/></picture>.</p>
+<p>Register the subset of independent variables <picture><source srcset="form_911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_911.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">value</td><td>A field that defines a number of independent variables. When considering taped <a class="el" href="namespaceDifferentiation_1_1AD.html">AD</a> numbers with branching functions, to avoid potential issues with branch switching it may be a good idea to choose these values close or equal to those that will be later evaluated and differentiated around. </td></tr>
@@ -1068,7 +1068,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set the values for a subset of independent variables <picture><source srcset="form_912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_912.png"/></picture>.</p>
+<p>Set the values for a subset of independent variables <picture><source srcset="form_911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} \subset \mathbf{X}$" src="form_911.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">value</td><td>A field that defines the values of a number of independent variables. </td></tr>
@@ -1117,7 +1117,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set the actual value of the independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Set the actual value of the independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index in the vector of independent variables. </td></tr>
@@ -1159,7 +1159,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set the actual value of the independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Set the actual value of the independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index in the vector of independent variables. </td></tr>
@@ -1911,7 +1911,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Initialize an independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture> such that subsequent operations performed with it are tracked.</p>
+<p>Initialize an independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture> such that subsequent operations performed with it are tracked.</p>
 <dl class="section note"><dt>Note</dt><dd>Care must be taken to mark each independent variable only once.</dd>
 <dd>
 The order in which the independent variables are marked defines the order of all future internal operations. They must be manipulated in the same order as that in which they are first marked. If not then, for example, ADOL-C won't throw an error, but rather it might complain nonsensically during later computations or produce garbage results.</dd></dl>
@@ -1986,7 +1986,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Initialize an independent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_902.png"/></picture>.</p>
+<p>Initialize an independent variable <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{i}$" src="form_901.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[out]</td><td class="paramname">out</td><td>An auto-differentiable number that is ready for use in standard computations. The operations that are performed with it are not recorded on the tape, and so should only be used when not in recording mode. </td></tr>
@@ -2117,7 +2117,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Register the definition of the index'th dependent variable <picture><source srcset="form_903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf{X})$" src="form_903.png"/></picture>.</p>
+<p>Register the definition of the index'th dependent variable <picture><source srcset="form_902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf{X})$" src="form_902.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>The index of the entry in the global list of dependent variables that this function belongs to. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classDiscreteTime.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classDiscreteTime.html	2024-03-17 21:57:19.775088107 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classDiscreteTime.html	2024-03-17 21:57:19.783088156 +0000
@@ -185,7 +185,7 @@
 <p>Since time is marched forward in a discrete manner in our simulations, we need to discuss how we increment time. During time stepping we enter two separate alternating regimes in every step.</p>
 <ul>
 <li>The <b>snapshot</b> stage (the <b>current</b> stage, the <b>consistent</b> stage): In this part of the algorithm, we are at <picture><source srcset="form_439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t = t_n$" src="form_439.png"/></picture> and all quantities of the simulation (displacements, strains, temperatures, etc.) are up-to-date for <picture><source srcset="form_439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t = t_n$" src="form_439.png"/></picture>. In this stage, <em>current time</em> refers to <picture><source srcset="form_440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_n$" src="form_440.png"/></picture>, <em>next time</em> refers to <picture><source srcset="form_441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_{n+1}$" src="form_441.png"/></picture>, <em>previous time</em> refers to <picture><source srcset="form_442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_{n-1}$" src="form_442.png"/></picture>. The other useful notation quantities are the <em>next</em> time step size <picture><source srcset="form_443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_{n+1} - t_n$" src="form_443.png"/></picture> and <em>previous</em> time step size <picture><source srcset="form_444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_n - t_{n-1}$" src="form_444.png"/></picture>. In this stage, it is a perfect occasion to generate text output using print commands within the user's code. Additionally, post-processed outputs can be prepared here, which can then later be viewed by visualization programs such as <code>Tecplot</code>, <code>Paraview</code>, and <code>VisIt</code>. Additionally, during the snapshot stage, the code can assess the quality of the previous step and decide whether it wants to increase or decrease the time step size. The step size for the next time step can be modified here, by calling <a class="el" href="#href_anchor">set_desired_next_step_size()</a>.</li>
-<li><p class="startli">The <b>update</b> stage (the <b>transition</b> stage, the <b>inconsistent</b> stage): In this section of the program, the internal state of the simulation is getting updated from <picture><source srcset="form_440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_n$" src="form_440.png"/></picture> to <picture><source srcset="form_441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_{n+1}$" src="form_441.png"/></picture>. All of the variables need to be updated one by one, the step number is incremented, the time is incremented by <picture><source srcset="form_445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dt = t_{n+1} - t_n$" src="form_445.png"/></picture>, and time-integration algorithms are used to update the other simulation quantities. In the middle of this stage, some variables have been updated to <picture><source srcset="form_441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_{n+1}$" src="form_441.png"/></picture> but other variables still represent their value at <picture><source srcset="form_440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_n$" src="form_440.png"/></picture>. Thus, we call this the inconsistent stage, requiring that no post-processing output related to the state variables take place within it. The state variables, namely those related to time, the solution field and any internal variables, are not synchronized and then get updated one by one. In general, the order of updating variables is arbitrary, but some care should be taken if there are interdependencies between them. For example, if some variable such as <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> depends on the calculation of another variable such as <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>, then <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> must be updated before <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> can be updated.</p>
+<li><p class="startli">The <b>update</b> stage (the <b>transition</b> stage, the <b>inconsistent</b> stage): In this section of the program, the internal state of the simulation is getting updated from <picture><source srcset="form_440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_n$" src="form_440.png"/></picture> to <picture><source srcset="form_441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_{n+1}$" src="form_441.png"/></picture>. All of the variables need to be updated one by one, the step number is incremented, the time is incremented by <picture><source srcset="form_445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dt = t_{n+1} - t_n$" src="form_445.png"/></picture>, and time-integration algorithms are used to update the other simulation quantities. In the middle of this stage, some variables have been updated to <picture><source srcset="form_441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_{n+1}$" src="form_441.png"/></picture> but other variables still represent their value at <picture><source srcset="form_440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_n$" src="form_440.png"/></picture>. Thus, we call this the inconsistent stage, requiring that no post-processing output related to the state variables take place within it. The state variables, namely those related to time, the solution field and any internal variables, are not synchronized and then get updated one by one. In general, the order of updating variables is arbitrary, but some care should be taken if there are interdependencies between them. For example, if some variable such as <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> depends on the calculation of another variable such as <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>, then <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> must be updated before <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> can be updated.</p>
 <p class="startli">The question arises whether time should be incremented before updating state quantities. Multiple possibilities exist, depending on program and formulation requirements, and possibly the programmer's preferences:</p><ul>
 <li>Time is incremented <em>before</em> the rest of the updates. In this case, even though time is incremented to <picture><source srcset="form_441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_{n+1}$" src="form_441.png"/></picture>, not all variables are updated yet. During this update phase, <picture><source srcset="form_446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dt$" src="form_446.png"/></picture> equals the <em>previous</em> time step size. <em>Previous</em> means that it is referring to the <picture><source srcset="form_446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dt$" src="form_446.png"/></picture> of the <code><a class="el" href="#href_anchor">advance_time()</a></code> command that was performed previously. In the following example code, we are assuming that <code>a</code> and <code>b</code> are two state variables that need to be updated in this time step. <div class="fragment"><div class="line">time.advance_time();</div>
 <div class="line">new_a = update_a(a, b, time.get_previous_step_size());</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classDoFHandler.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classDoFHandler.html	2024-03-17 21:57:19.859088625 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classDoFHandler.html	2024-03-17 21:57:19.863088650 +0000
@@ -417,7 +417,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim&gt;<br />
-class DoFHandler&lt; dim, spacedim &gt;</div><p>Given a triangulation and a description of a finite element, this class enumerates degrees of freedom on all vertices, edges, faces, and cells of the triangulation. As a result, it also provides a <em>basis</em> for a discrete space <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture> whose elements are finite element functions defined on each cell by a <a class="el" href="classFiniteElement.html">FiniteElement</a> object. This class satisfies the <a class="el" href="group__Concepts.html#href_anchor">MeshType concept</a> requirements.</p>
+class DoFHandler&lt; dim, spacedim &gt;</div><p>Given a triangulation and a description of a finite element, this class enumerates degrees of freedom on all vertices, edges, faces, and cells of the triangulation. As a result, it also provides a <em>basis</em> for a discrete space <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture> whose elements are finite element functions defined on each cell by a <a class="el" href="classFiniteElement.html">FiniteElement</a> object. This class satisfies the <a class="el" href="group__Concepts.html#href_anchor">MeshType concept</a> requirements.</p>
 <p>It is first used in the <a class="el" href="step_2.html">step-2</a> tutorial program.</p>
 <p>For each 0d, 1d, 2d, and 3d subobject, this class stores a list of the indices of degrees of freedom defined on this <a class="el" href="classDoFHandler.html">DoFHandler</a>. These indices refer to the unconstrained degrees of freedom, i.e. constrained degrees of freedom are numbered in the same way as unconstrained ones, and are only later eliminated. This leads to the fact that indices in global vectors and matrices also refer to all degrees of freedom and some kind of condensation is needed to restrict the systems of equations to the unconstrained degrees of freedom only. The actual layout of storage of the indices is described in the <a class="el" href="classinternal_1_1DoFHandlerImplementation_1_1DoFLevel.html">internal::DoFHandlerImplementation::DoFLevel</a> class documentation.</p>
 <p>The class offers iterators to traverse all cells, in much the same way as the <a class="el" href="classTriangulation.html">Triangulation</a> class does. Using the <a class="el" href="#href_anchor">begin()</a> and <a class="el" href="#href_anchor">end()</a> functions (and companions, like <a class="el" href="#href_anchor">begin_active()</a>), one can obtain iterators to walk over cells, and query the degree of freedom structures as well as the triangulation data. These iterators are built on top of those of the <a class="el" href="classTriangulation.html">Triangulation</a> class, but offer the additional information on degrees of freedom functionality compared to pure triangulation iterators. The order in which dof iterators are presented by the <code>++</code> and <code>--</code> operators is the same as that for the corresponding iterators traversing the triangulation on which this <a class="el" href="classDoFHandler.html">DoFHandler</a> is constructed.</p>
@@ -434,7 +434,7 @@
 <p>Like many other classes in deal.II, the <a class="el" href="classDoFHandler.html">DoFHandler</a> class can stream its contents to an archive using BOOST's serialization facilities. The data so stored can later be retrieved again from the archive to restore the contents of this object. This facility is frequently used to save the state of a program to disk for possible later resurrection, often in the context of checkpoint/restart strategies for long running computations or on computers that aren't very reliable (e.g. on very large clusters where individual nodes occasionally fail and then bring down an entire MPI job).</p>
 <p>The model for doing so is similar for the <a class="el" href="classDoFHandler.html">DoFHandler</a> class as it is for the <a class="el" href="classTriangulation.html">Triangulation</a> class (see the section in the general documentation of that class). In particular, the <a class="el" href="#href_anchor">load()</a> function does not exactly restore the same state as was stored previously using the <a class="el" href="#href_anchor">save()</a> function. Rather, the function assumes that you load data into a <a class="el" href="classDoFHandler.html">DoFHandler</a> object that is already associated with a triangulation that has a content that matches the one that was used when the data was saved. Likewise, the <a class="el" href="#href_anchor">load()</a> function assumes that the current object is already associated with a finite element object that matches the one that was associated with it when data was saved; the latter can be achieved by calling <a class="el" href="#href_anchor">DoFHandler::distribute_dofs()</a> using the same kind of finite element before re-loading data from the serialization archive.</p>
 <h3>hp-adaptive finite element methods</h3>
-<p>Instead of only using one particular <a class="el" href="classFiniteElement.html">FiniteElement</a> on all cells, this class also allows for an enumeration of degrees of freedom on different finite elements on every cells. To this end, one assigns an <code>active_fe_index</code> to every cell that indicates which element within a collection of finite elements (represented by an object of type <a class="el" href="classhp_1_1FECollection.html">hp::FECollection</a>) is the one that lives on this cell. The class then enumerates the degree of freedom associated with these finite elements on each cell of a triangulation and, if possible, identifies degrees of freedom at the interfaces of cells if they match. If neighboring cells have degrees of freedom along the common interface that do not immediate match (for example, if you have <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> and <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> elements meeting at a common face), then one needs to compute constraints to ensure that the resulting finite element space on the mesh remains conforming.</p>
+<p>Instead of only using one particular <a class="el" href="classFiniteElement.html">FiniteElement</a> on all cells, this class also allows for an enumeration of degrees of freedom on different finite elements on every cells. To this end, one assigns an <code>active_fe_index</code> to every cell that indicates which element within a collection of finite elements (represented by an object of type <a class="el" href="classhp_1_1FECollection.html">hp::FECollection</a>) is the one that lives on this cell. The class then enumerates the degree of freedom associated with these finite elements on each cell of a triangulation and, if possible, identifies degrees of freedom at the interfaces of cells if they match. If neighboring cells have degrees of freedom along the common interface that do not immediate match (for example, if you have <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> and <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> elements meeting at a common face), then one needs to compute constraints to ensure that the resulting finite element space on the mesh remains conforming.</p>
 <p>The whole process of working with objects of this type is explained in <a class="el" href="step_27.html">step-27</a>. Many of the algorithms this class implements are described in the <a class="el" href="DEALGlossary.html#href_anchor">hp-paper</a>.</p>
 <h3>Active FE indices and their behavior under mesh refinement</h3>
 <p>The typical workflow for using this class is to create a mesh, assign an active FE index to every active cell, call <a class="el" href="#href_anchor">DoFHandler::distribute_dofs()</a>, and then assemble a linear system and solve a problem on this finite element space.</p>
@@ -983,7 +983,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Go through the triangulation and "distribute" the degrees of freedom needed for the given finite element. "Distributing" degrees of freedom involves allocating memory to store the indices on all entities on which degrees of freedom can be located (e.g., vertices, edges, faces, etc.) and to then enumerate all degrees of freedom. In other words, while the mesh and the finite element object by themselves simply define a finite element space <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture>, the process of distributing degrees of freedom makes sure that there is a basis for this space and that the shape functions of this basis are enumerated in an indexable, predictable way.</p>
+<p>Go through the triangulation and "distribute" the degrees of freedom needed for the given finite element. "Distributing" degrees of freedom involves allocating memory to store the indices on all entities on which degrees of freedom can be located (e.g., vertices, edges, faces, etc.) and to then enumerate all degrees of freedom. In other words, while the mesh and the finite element object by themselves simply define a finite element space <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture>, the process of distributing degrees of freedom makes sure that there is a basis for this space and that the shape functions of this basis are enumerated in an indexable, predictable way.</p>
 <p>The exact order in which degrees of freedom on a mesh are ordered, i.e., the order in which basis functions of the finite element space are enumerated, is something that deal.II treats as an implementation detail. By and large, degrees of freedom are enumerated in the same order in which we traverse cells, but you should not rely on any specific numbering. In contrast, if you want a particular ordering, use the functions in namespace <a class="el" href="namespaceDoFRenumbering.html">DoFRenumbering</a>.</p>
 <p>This function is first discussed in the introduction to the <a class="el" href="step_2.html">step-2</a> tutorial program.</p>
 <dl class="section note"><dt>Note</dt><dd>This function makes a copy of the finite element given as argument, and stores it as a member variable, similarly to the above function set_fe(). </dd></dl>
/usr/share/doc/packages/dealii/doxygen/deal.II/classDynamicSparsityPattern.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classDynamicSparsityPattern.html	2024-03-17 21:57:19.911088946 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classDynamicSparsityPattern.html	2024-03-17 21:57:19.915088971 +0000
@@ -1106,7 +1106,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Compute the bandwidth of the matrix represented by this structure. The bandwidth is the maximum of <picture><source srcset="form_1607_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|i-j|$" src="form_1607.png"/></picture> for which the index pair <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> represents a nonzero entry of the matrix. </p>
+<p>Compute the bandwidth of the matrix represented by this structure. The bandwidth is the maximum of <picture><source srcset="form_1613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|i-j|$" src="form_1613.png"/></picture> for which the index pair <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> represents a nonzero entry of the matrix. </p>
 
 <p class="definition">Definition at line <a class="el" href="dynamic__sparsity__pattern_8cc_source.html#href_anchor">567</a> of file <a class="el" href="dynamic__sparsity__pattern_8cc_source.html">dynamic_sparsity_pattern.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classEigenInverse.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classEigenInverse.html	2024-03-17 21:57:19.947089169 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classEigenInverse.html	2024-03-17 21:57:19.955089218 +0000
@@ -191,7 +191,7 @@
 <div class="textblock"><div class="compoundTemplParams">template&lt;typename VectorType = Vector&lt;double&gt;&gt;<br />
 class EigenInverse&lt; VectorType &gt;</div><p>Inverse iteration (Wieland) for eigenvalue computations.</p>
 <p>This class implements an adaptive version of the inverse iteration by Wieland.</p>
-<p>There are two choices for the stopping criterion: by default, the norm of the residual <picture><source srcset="form_1714_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A x - l x$" src="form_1714.png"/></picture> is computed. Since this might not converge to zero for non-symmetric matrices with non-trivial Jordan blocks, it can be replaced by checking the difference of successive eigenvalues. Use <a class="el" href="structEigenInverse_1_1AdditionalData.html#href_anchor">AdditionalData::use_residual</a> for switching this option.</p>
+<p>There are two choices for the stopping criterion: by default, the norm of the residual <picture><source srcset="form_1633_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A x - l x$" src="form_1633.png"/></picture> is computed. Since this might not converge to zero for non-symmetric matrices with non-trivial Jordan blocks, it can be replaced by checking the difference of successive eigenvalues. Use <a class="el" href="structEigenInverse_1_1AdditionalData.html#href_anchor">AdditionalData::use_residual</a> for switching this option.</p>
 <p>Usually, the initial guess entering this method is updated after each step, replacing it with the new approximation of the eigenvalue. Using a parameter <a class="el" href="structEigenInverse_1_1AdditionalData.html#href_anchor">AdditionalData::relaxation</a> between 0 and 1, this update can be damped. With relaxation parameter 0, no update is performed. This damping allows for slower adaption of the shift value to make sure that the method converges to the eigenvalue closest to the initial guess. This can be aided by the parameter <a class="el" href="structEigenInverse_1_1AdditionalData.html#href_anchor">AdditionalData::start_adaption</a>, which indicates the first iteration step in which the shift value should be adapted. </p>
 
 <p class="definition">Definition at line <a class="el" href="eigen_8h_source.html#href_anchor">129</a> of file <a class="el" href="eigen_8h_source.html">eigen.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classEigenPower.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classEigenPower.html	2024-03-17 21:57:19.987089416 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classEigenPower.html	2024-03-17 21:57:19.995089466 +0000
@@ -190,7 +190,7 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;typename VectorType = Vector&lt;double&gt;&gt;<br />
 class EigenPower&lt; VectorType &gt;</div><p>Power method (von Mises) for eigenvalue computations.</p>
-<p>This method determines the largest eigenvalue of a matrix by applying increasing powers of this matrix to a vector. If there is an eigenvalue <picture><source srcset="form_1712_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l$" src="form_1712.png"/></picture> with dominant absolute value, the iteration vectors will become aligned to its eigenspace and <picture><source srcset="form_1713_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax = lx$" src="form_1713.png"/></picture>.</p>
+<p>This method determines the largest eigenvalue of a matrix by applying increasing powers of this matrix to a vector. If there is an eigenvalue <picture><source srcset="form_1631_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l$" src="form_1631.png"/></picture> with dominant absolute value, the iteration vectors will become aligned to its eigenspace and <picture><source srcset="form_1632_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax = lx$" src="form_1632.png"/></picture>.</p>
 <p>A shift parameter allows to shift the spectrum, so it is possible to compute the smallest eigenvalue, too.</p>
 <p>Convergence of this method is known to be slow. </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classEllipticalManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classEllipticalManifold.html	2024-03-17 21:57:20.051089811 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classEllipticalManifold.html	2024-03-17 21:57:20.055089837 +0000
@@ -223,16 +223,16 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim&gt;<br />
 class EllipticalManifold&lt; dim, spacedim &gt;</div><p>Elliptical manifold description derived from <a class="el" href="classChartManifold.html">ChartManifold</a>. More information on the elliptical coordinate system can be found at <a href="https://en.wikipedia.org/wiki/Elliptic_coordinate_system">Wikipedia </a>.</p>
-<p>This is based on the definition of elliptic coordinates <picture><source srcset="form_112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v)$" src="form_112.png"/></picture>  </p><p class="formulaDsp">
-<picture><source srcset="form_1419_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>This is based on the definition of elliptic coordinates <picture><source srcset="form_205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v)$" src="form_205.png"/></picture>  </p><p class="formulaDsp">
+<picture><source srcset="form_1454_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \left\lbrace\begin{aligned}
  x &amp;=  x_0 + c \cosh(u) \cos(v) \\
  y &amp;=  y_0 + c \sinh(u) \sin(v)
  \end{aligned}\right.
-\]" src="form_1419.png"/></picture>
+\]" src="form_1454.png"/></picture>
 </p>
-<p> in which <picture><source srcset="form_1420_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_0,y_0)$" src="form_1420.png"/></picture> are coordinates of the center of the cartesian system.</p>
-<p>The current implementation uses coordinates <picture><source srcset="form_1421_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(c,v)$" src="form_1421.png"/></picture>, instead of <picture><source srcset="form_112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v)$" src="form_112.png"/></picture>, and fixes <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> according to a given eccentricity. Therefore, this choice of coordinates generates an elliptical manifold characterized by a constant eccentricity: <picture><source srcset="form_1422_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e=\frac{1}{\cosh(u)}$" src="form_1422.png"/></picture>, with <picture><source srcset="form_1423_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e\in\left]0,1\right[$" src="form_1423.png"/></picture>.</p>
+<p> in which <picture><source srcset="form_1455_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_0,y_0)$" src="form_1455.png"/></picture> are coordinates of the center of the cartesian system.</p>
+<p>The current implementation uses coordinates <picture><source srcset="form_1456_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(c,v)$" src="form_1456.png"/></picture>, instead of <picture><source srcset="form_205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v)$" src="form_205.png"/></picture>, and fixes <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> according to a given eccentricity. Therefore, this choice of coordinates generates an elliptical manifold characterized by a constant eccentricity: <picture><source srcset="form_1457_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e=\frac{1}{\cosh(u)}$" src="form_1457.png"/></picture>, with <picture><source srcset="form_1458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e\in\left]0,1\right[$" src="form_1458.png"/></picture>.</p>
 <p>The constructor of this class will throw an exception if both dim and spacedim are different from two.</p>
 <p>This manifold can be used to produce hyper_shells with elliptical curvature. As an example, the test <b>elliptical_manifold_01</b> produces the following triangulation: </p><div class="image">
 <img src="elliptical_hyper_shell.png" alt=""/>
@@ -348,7 +348,7 @@
   <table class="params">
     <tr><td class="paramname">center</td><td>Center of the manifold. </td></tr>
     <tr><td class="paramname">major_axis_direction</td><td>Direction of the major axis of the manifold. </td></tr>
-    <tr><td class="paramname">eccentricity</td><td>Eccentricity of the manifold <picture><source srcset="form_1423_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e\in\left]0,1\right[$" src="form_1423.png"/></picture>. </td></tr>
+    <tr><td class="paramname">eccentricity</td><td>Eccentricity of the manifold <picture><source srcset="form_1458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e\in\left]0,1\right[$" src="form_1458.png"/></picture>. </td></tr>
   </table>
   </dd>
 </dl>
@@ -485,7 +485,7 @@
 </div><div class="memdoc">
 
 <p></p>
-<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
+<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
 <p>This function is used in the computations required by the <a class="el" href="classChartManifold.html#href_anchor">get_tangent_vector()</a> function. Since not all users of the <a class="el" href="classManifold.html">Manifold</a> class interface will require calling that function, the current function is implemented but will trigger an exception whenever called. This allows derived classes to avoid implementing the push_forward_gradient function if this functionality is not needed in the user program.</p>
 <p>Refer to the general documentation of this class for more information.   </p>
 
@@ -520,7 +520,7 @@
 
 <p></p>
 <p>Return the periodicity associated with the submanifold.  </p>
-<p>For <picture><source srcset="form_1439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{dim}=2$" src="form_1439.png"/></picture> and <picture><source srcset="form_1440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}=2$" src="form_1440.png"/></picture>, the first coordinate is non-periodic, while the second coordinate has a periodicity of <picture><source srcset="form_1441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\pi$" src="form_1441.png"/></picture>. </p>
+<p>For <picture><source srcset="form_1464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{dim}=2$" src="form_1464.png"/></picture> and <picture><source srcset="form_1465_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}=2$" src="form_1465.png"/></picture>, the first coordinate is non-periodic, while the second coordinate has a periodicity of <picture><source srcset="form_1466_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\pi$" src="form_1466.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="grid_2manifold__lib_8cc_source.html#href_anchor">1244</a> of file <a class="el" href="grid_2manifold__lib_8cc_source.html">manifold_lib.cc</a>.</p>
 
@@ -748,7 +748,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
+<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
 <p>This function is used in the computations required by the <a class="el" href="classChartManifold.html#href_anchor">get_tangent_vector()</a> function. Since not all users of the <a class="el" href="classManifold.html">Manifold</a> class interface will require calling that function, the current function is implemented but will trigger an exception whenever called. This allows derived classes to avoid implementing the push_forward_gradient function if this functionality is not needed in the user program.</p>
 <p>Refer to the general documentation of this class for more information. </p>
 
@@ -782,24 +782,24 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a vector that, at <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1427.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
-<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1442.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
-<picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>Return a vector that, at <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1429.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
+<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1439.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
+<picture><source srcset="form_1440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \zeta(t) &amp;= \xi_1 +  t (\xi_2-\xi_1)
  \\          &amp;= F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                             -F^{-1}(\mathbf x_1)\right]
-\end{align*}" src="form_1443.png"/></picture>
+\end{align*}" src="form_1440.png"/></picture>
 </p>
 <p> In image space, i.e., in the space in which we operate, this leads to the curve  </p><p class="formulaDsp">
-<picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_1441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s(t) &amp;= F(\zeta(t))
  \\          &amp;= F(\xi_1 +  t (\xi_2-\xi_1))
  \\          &amp;= F\left(F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                     -F^{-1}(\mathbf x_1)\right]\right).
-\end{align*}" src="form_1444.png"/></picture>
+\end{align*}" src="form_1441.png"/></picture>
 </p>
-<p> What the current function is supposed to return is <picture><source srcset="form_1431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1431.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
-<picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> What the current function is supposed to return is <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1433.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
+<picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s'(0) &amp;=
     \frac{d}{dt}\left. F\left(F^{-1}(\mathbf x_1)
                        + t\left[F^{-1}(\mathbf x_2)
@@ -808,11 +808,11 @@
 \\ &amp;= \nabla_\xi F\left(F^{-1}(\mathbf x_1)\right)
                    \left[F^{-1}(\mathbf x_2)
                                 -F^{-1}(\mathbf x_1)\right].
-\end{align*}" src="form_1445.png"/></picture>
+\end{align*}" src="form_1442.png"/></picture>
 </p>
 <p> This formula may then have to be slightly modified by considering any periodicity that was assumed in the call to the constructor.</p>
-<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1446.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1447.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
-x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1448.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
+<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1443.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1444.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
+x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1445.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">x1</td><td>The first point that describes the geodesic, and the one at which the "direction" is to be evaluated. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluation.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluation.html	2024-03-17 21:57:20.187090651 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluation.html	2024-03-17 21:57:20.183090626 +0000
@@ -459,7 +459,7 @@
 <div class="ttc" id="agrid__tools_8cc_html_aff11e57deb99b39b7d7d26cf866798f2"><div class="ttname"><a href="grid__tools_8cc.html#href_anchor">cell_index</a></div><div class="ttdeci">unsigned int cell_index</div><div class="ttdef"><b>Definition</b> <a href="grid__tools_8cc_source.html#href_anchor">grid_tools.cc:1196</a></div></div>
 <div class="ttc" id="anamespaceEvaluationFlags_html_a9b7c6d689cb76386839d0d13640f59aeaf9825c682f693a6a200094641a0d6a58"><div class="ttname"><a href="namespaceEvaluationFlags.html#href_anchor">EvaluationFlags::values</a></div><div class="ttdeci">@ values</div><div class="ttdef"><b>Definition</b> <a href="evaluation__flags_8h_source.html#href_anchor">evaluation_flags.h:51</a></div></div>
 </div><!-- fragment --><p>Likewise, a gradient of the finite element solution represented by <code>vector</code> can be interpolated to the quadrature points by <code>fe_eval.get_gradient(q)</code>. The combination of <a class="el" href="classFEEvaluationBase.html#href_anchor">read_dof_values()</a>, <a class="el" href="#href_anchor">evaluate()</a> and <a class="el" href="classFEEvaluationBase.html#href_anchor">get_value()</a> is similar to what <a class="el" href="classFEValuesBase.html#href_anchor">FEValues::get_function_values</a> or <a class="el" href="classFEValuesBase.html#href_anchor">FEValues::get_function_gradients</a> does, but it is in general much faster because it makes use of the tensor product, see the description of the evaluation routines below, and can do this operation for several cells at once through vectorization.</p>
-<p>The second class of tasks done by <a class="el" href="classFEEvaluation.html">FEEvaluation</a> are integration tasks for right hand sides. In finite element computations, these typically consist of multiplying a quantity on quadrature points (a function value, or a field interpolated by the finite element space itself) by a set of test functions and integrating over the cell through summation of the values in each quadrature point, multiplied by the quadrature weight and the Jacobian determinant of the transformation. If a generic <a class="el" href="classFunction.html">Function</a> object is given and we want to compute <picture><source srcset="form_1998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_i = \int_\Omega \varphi_i f dx$" src="form_1998.png"/></picture>, this is done by the following cell-wise integration:</p>
+<p>The second class of tasks done by <a class="el" href="classFEEvaluation.html">FEEvaluation</a> are integration tasks for right hand sides. In finite element computations, these typically consist of multiplying a quantity on quadrature points (a function value, or a field interpolated by the finite element space itself) by a set of test functions and integrating over the cell through summation of the values in each quadrature point, multiplied by the quadrature weight and the Jacobian determinant of the transformation. If a generic <a class="el" href="classFunction.html">Function</a> object is given and we want to compute <picture><source srcset="form_1991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_i = \int_\Omega \varphi_i f dx$" src="form_1991.png"/></picture>, this is done by the following cell-wise integration:</p>
 <div class="fragment"><div class="line"><a class="code hl_class" href="classFEEvaluation.html">FEEvaluation&lt;dim,fe_degree&gt;</a> fe_eval(<a class="code hl_variable" href="classFEEvaluationBase.html#href_anchor">matrix_free</a>);</div>
 <div class="line"><a class="code hl_class" href="classFunction.html">Function&lt;dim&gt;</a> &amp;function = ...;</div>
 <div class="line"><span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code hl_variable" href="grid__tools_8cc.html#href_anchor">cell_index</a> = cell_range.first;</div>
@@ -1944,8 +1944,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the derivative of a finite element function at quadrature point number <code>q_point</code> after a call to FEEvaluation::evaluate(EvaluationFlags::gradients) the direction normal to the face: <picture><source srcset="form_2001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol \nabla u(\mathbf x_q) \cdot \mathbf n(\mathbf
-x_q)$" src="form_2001.png"/></picture></p>
+<p>Return the derivative of a finite element function at quadrature point number <code>q_point</code> after a call to FEEvaluation::evaluate(EvaluationFlags::gradients) the direction normal to the face: <picture><source srcset="form_1992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol \nabla u(\mathbf x_q) \cdot \mathbf n(\mathbf
+x_q)$" src="form_1992.png"/></picture></p>
 <p>This call is equivalent to calling <a class="el" href="classFEEvaluationBase.html#href_anchor">get_gradient()</a> * <a class="el" href="classFEEvaluationData.html#href_anchor">normal_vector()</a> but will use a more efficient internal representation of data.</p>
 <dl class="section note"><dt>Note</dt><dd>The derived class <a class="el" href="classFEEvaluationAccess.html">FEEvaluationAccess</a> overloads this operation with specializations for the scalar case (n_components == 1) and for the vector-valued case (n_components == dim). </dd></dl>
 
@@ -2209,7 +2209,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the curl of the vector field, <picture><source srcset="form_2002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \times v$" src="form_2002.png"/></picture> after a call to <code>evaluate(EvaluationFlags::gradients)</code>.</p>
+<p>Return the curl of the vector field, <picture><source srcset="form_1993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \times v$" src="form_1993.png"/></picture> after a call to <code>evaluate(EvaluationFlags::gradients)</code>.</p>
 <dl class="section note"><dt>Note</dt><dd>Only available for the vector-valued case (n_components == dim). </dd></dl>
 
 </div>
@@ -2659,8 +2659,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the inverse and transposed version <picture><source srcset="form_1991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm T}$" src="form_1991.png"/></picture> of the Jacobian of the mapping between the unit to the real cell defined as <picture><source srcset="form_1992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij} = d x_i / d\hat x_j$" src="form_1992.png"/></picture>. The <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> entry of the returned tensor contains <picture><source srcset="form_1993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x_j/dx_i$" src="form_1993.png"/></picture>, i.e., columns refer to reference space coordinates and rows to real cell coordinates. Thus, the returned tensor represents a covariant transformation, which is used in the <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluationBase::get_gradient()</a> function to transform the unit cell gradients to gradients on the real cell by a multiplication <picture><source srcset="form_1994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm
-T} \hat{\nabla} u_h$" src="form_1994.png"/></picture>. </p>
+<p>Return the inverse and transposed version <picture><source srcset="form_1994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm T}$" src="form_1994.png"/></picture> of the Jacobian of the mapping between the unit to the real cell defined as <picture><source srcset="form_1995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij} = d x_i / d\hat x_j$" src="form_1995.png"/></picture>. The <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> entry of the returned tensor contains <picture><source srcset="form_1996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x_j/dx_i$" src="form_1996.png"/></picture>, i.e., columns refer to reference space coordinates and rows to real cell coordinates. Thus, the returned tensor represents a covariant transformation, which is used in the <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluationBase::get_gradient()</a> function to transform the unit cell gradients to gradients on the real cell by a multiplication <picture><source srcset="form_1997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm
+T} \hat{\nabla} u_h$" src="form_1997.png"/></picture>. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess.html	2024-03-17 21:57:20.283091244 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess.html	2024-03-17 21:57:20.291091294 +0000
@@ -1154,8 +1154,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the derivative of a finite element function at quadrature point number <code>q_point</code> after a call to FEEvaluation::evaluate(EvaluationFlags::gradients) the direction normal to the face: <picture><source srcset="form_2001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol \nabla u(\mathbf x_q) \cdot \mathbf n(\mathbf
-x_q)$" src="form_2001.png"/></picture></p>
+<p>Return the derivative of a finite element function at quadrature point number <code>q_point</code> after a call to FEEvaluation::evaluate(EvaluationFlags::gradients) the direction normal to the face: <picture><source srcset="form_1992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol \nabla u(\mathbf x_q) \cdot \mathbf n(\mathbf
+x_q)$" src="form_1992.png"/></picture></p>
 <p>This call is equivalent to calling <a class="el" href="classFEEvaluationBase.html#href_anchor">get_gradient()</a> * <a class="el" href="classFEEvaluationData.html#href_anchor">normal_vector()</a> but will use a more efficient internal representation of data.</p>
 <dl class="section note"><dt>Note</dt><dd>The derived class <a class="el" href="classFEEvaluationAccess.html">FEEvaluationAccess</a> overloads this operation with specializations for the scalar case (n_components == 1) and for the vector-valued case (n_components == dim). </dd></dl>
 
@@ -1419,7 +1419,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the curl of the vector field, <picture><source srcset="form_2002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \times v$" src="form_2002.png"/></picture> after a call to <code>evaluate(EvaluationFlags::gradients)</code>.</p>
+<p>Return the curl of the vector field, <picture><source srcset="form_1993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \times v$" src="form_1993.png"/></picture> after a call to <code>evaluate(EvaluationFlags::gradients)</code>.</p>
 <dl class="section note"><dt>Note</dt><dd>Only available for the vector-valued case (n_components == dim). </dd></dl>
 
 </div>
@@ -1869,8 +1869,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the inverse and transposed version <picture><source srcset="form_1991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm T}$" src="form_1991.png"/></picture> of the Jacobian of the mapping between the unit to the real cell defined as <picture><source srcset="form_1992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij} = d x_i / d\hat x_j$" src="form_1992.png"/></picture>. The <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> entry of the returned tensor contains <picture><source srcset="form_1993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x_j/dx_i$" src="form_1993.png"/></picture>, i.e., columns refer to reference space coordinates and rows to real cell coordinates. Thus, the returned tensor represents a covariant transformation, which is used in the <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluationBase::get_gradient()</a> function to transform the unit cell gradients to gradients on the real cell by a multiplication <picture><source srcset="form_1994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm
-T} \hat{\nabla} u_h$" src="form_1994.png"/></picture>. </p>
+<p>Return the inverse and transposed version <picture><source srcset="form_1994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm T}$" src="form_1994.png"/></picture> of the Jacobian of the mapping between the unit to the real cell defined as <picture><source srcset="form_1995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij} = d x_i / d\hat x_j$" src="form_1995.png"/></picture>. The <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> entry of the returned tensor contains <picture><source srcset="form_1996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x_j/dx_i$" src="form_1996.png"/></picture>, i.e., columns refer to reference space coordinates and rows to real cell coordinates. Thus, the returned tensor represents a covariant transformation, which is used in the <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluationBase::get_gradient()</a> function to transform the unit cell gradients to gradients on the real cell by a multiplication <picture><source srcset="form_1997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm
+T} \hat{\nabla} u_h$" src="form_1997.png"/></picture>. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess_3_011_00_011_00_01Number_00_01is__face_00_01VectorizedArrayType_01_4.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess_3_011_00_011_00_01Number_00_01is__face_00_01VectorizedArrayType_01_4.html	2024-03-17 21:57:20.391091912 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess_3_011_00_011_00_01Number_00_01is__face_00_01VectorizedArrayType_01_4.html	2024-03-17 21:57:20.399091961 +0000
@@ -940,8 +940,8 @@
 </div><div class="memdoc">
 
 <p></p>
-<p>Return the derivative of a finite element function at quadrature point number <code>q_point</code> after a call to FEEvaluation::evaluate(EvaluationFlags::gradients) the direction normal to the face: <picture><source srcset="form_2001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol \nabla u(\mathbf x_q) \cdot \mathbf n(\mathbf
-x_q)$" src="form_2001.png"/></picture></p>
+<p>Return the derivative of a finite element function at quadrature point number <code>q_point</code> after a call to FEEvaluation::evaluate(EvaluationFlags::gradients) the direction normal to the face: <picture><source srcset="form_1992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol \nabla u(\mathbf x_q) \cdot \mathbf n(\mathbf
+x_q)$" src="form_1992.png"/></picture></p>
 <p>This call is equivalent to calling <a class="el" href="#href_anchor">get_gradient()</a> * <a class="el" href="classFEEvaluationData.html#href_anchor">normal_vector()</a> but will use a more efficient internal representation of data.</p>
 <dl class="section note"><dt>Note</dt><dd>The derived class <a class="el" href="classFEEvaluationAccess.html">FEEvaluationAccess</a> overloads this operation with specializations for the scalar case (n_components == 1) and for the vector-valued case (n_components == dim).   </dd></dl>
 
@@ -1567,7 +1567,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the curl of the vector field, <picture><source srcset="form_2002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \times v$" src="form_2002.png"/></picture> after a call to <code>evaluate(EvaluationFlags::gradients)</code>.</p>
+<p>Return the curl of the vector field, <picture><source srcset="form_1993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \times v$" src="form_1993.png"/></picture> after a call to <code>evaluate(EvaluationFlags::gradients)</code>.</p>
 <dl class="section note"><dt>Note</dt><dd>Only available for the vector-valued case (n_components == dim). </dd></dl>
 
 </div>
@@ -1966,8 +1966,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the inverse and transposed version <picture><source srcset="form_1991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm T}$" src="form_1991.png"/></picture> of the Jacobian of the mapping between the unit to the real cell defined as <picture><source srcset="form_1992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij} = d x_i / d\hat x_j$" src="form_1992.png"/></picture>. The <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> entry of the returned tensor contains <picture><source srcset="form_1993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x_j/dx_i$" src="form_1993.png"/></picture>, i.e., columns refer to reference space coordinates and rows to real cell coordinates. Thus, the returned tensor represents a covariant transformation, which is used in the <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluationBase::get_gradient()</a> function to transform the unit cell gradients to gradients on the real cell by a multiplication <picture><source srcset="form_1994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm
-T} \hat{\nabla} u_h$" src="form_1994.png"/></picture>. </p>
+<p>Return the inverse and transposed version <picture><source srcset="form_1994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm T}$" src="form_1994.png"/></picture> of the Jacobian of the mapping between the unit to the real cell defined as <picture><source srcset="form_1995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij} = d x_i / d\hat x_j$" src="form_1995.png"/></picture>. The <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> entry of the returned tensor contains <picture><source srcset="form_1996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x_j/dx_i$" src="form_1996.png"/></picture>, i.e., columns refer to reference space coordinates and rows to real cell coordinates. Thus, the returned tensor represents a covariant transformation, which is used in the <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluationBase::get_gradient()</a> function to transform the unit cell gradients to gradients on the real cell by a multiplication <picture><source srcset="form_1997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm
+T} \hat{\nabla} u_h$" src="form_1997.png"/></picture>. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess_3_01dim_00_011_00_01Number_00_01is__face_00_01VectorizedArrayType_01_4.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess_3_01dim_00_011_00_01Number_00_01is__face_00_01VectorizedArrayType_01_4.html	2024-03-17 21:57:20.499092579 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess_3_01dim_00_011_00_01Number_00_01is__face_00_01VectorizedArrayType_01_4.html	2024-03-17 21:57:20.507092628 +0000
@@ -914,8 +914,8 @@
 </div><div class="memdoc">
 
 <p></p>
-<p>Return the derivative of a finite element function at quadrature point number <code>q_point</code> after a call to FEEvaluation::evaluate(EvaluationFlags::gradients) the direction normal to the face: <picture><source srcset="form_2001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol \nabla u(\mathbf x_q) \cdot \mathbf n(\mathbf
-x_q)$" src="form_2001.png"/></picture></p>
+<p>Return the derivative of a finite element function at quadrature point number <code>q_point</code> after a call to FEEvaluation::evaluate(EvaluationFlags::gradients) the direction normal to the face: <picture><source srcset="form_1992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol \nabla u(\mathbf x_q) \cdot \mathbf n(\mathbf
+x_q)$" src="form_1992.png"/></picture></p>
 <p>This call is equivalent to calling <a class="el" href="#href_anchor">get_gradient()</a> * <a class="el" href="classFEEvaluationData.html#href_anchor">normal_vector()</a> but will use a more efficient internal representation of data.</p>
 <dl class="section note"><dt>Note</dt><dd>The derived class <a class="el" href="classFEEvaluationAccess.html">FEEvaluationAccess</a> overloads this operation with specializations for the scalar case (n_components == 1) and for the vector-valued case (n_components == dim).   </dd></dl>
 
@@ -1494,7 +1494,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the curl of the vector field, <picture><source srcset="form_2002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \times v$" src="form_2002.png"/></picture> after a call to <code>evaluate(EvaluationFlags::gradients)</code>.</p>
+<p>Return the curl of the vector field, <picture><source srcset="form_1993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \times v$" src="form_1993.png"/></picture> after a call to <code>evaluate(EvaluationFlags::gradients)</code>.</p>
 <dl class="section note"><dt>Note</dt><dd>Only available for the vector-valued case (n_components == dim). </dd></dl>
 
 </div>
@@ -1893,8 +1893,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the inverse and transposed version <picture><source srcset="form_1991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm T}$" src="form_1991.png"/></picture> of the Jacobian of the mapping between the unit to the real cell defined as <picture><source srcset="form_1992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij} = d x_i / d\hat x_j$" src="form_1992.png"/></picture>. The <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> entry of the returned tensor contains <picture><source srcset="form_1993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x_j/dx_i$" src="form_1993.png"/></picture>, i.e., columns refer to reference space coordinates and rows to real cell coordinates. Thus, the returned tensor represents a covariant transformation, which is used in the <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluationBase::get_gradient()</a> function to transform the unit cell gradients to gradients on the real cell by a multiplication <picture><source srcset="form_1994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm
-T} \hat{\nabla} u_h$" src="form_1994.png"/></picture>. </p>
+<p>Return the inverse and transposed version <picture><source srcset="form_1994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm T}$" src="form_1994.png"/></picture> of the Jacobian of the mapping between the unit to the real cell defined as <picture><source srcset="form_1995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij} = d x_i / d\hat x_j$" src="form_1995.png"/></picture>. The <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> entry of the returned tensor contains <picture><source srcset="form_1996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x_j/dx_i$" src="form_1996.png"/></picture>, i.e., columns refer to reference space coordinates and rows to real cell coordinates. Thus, the returned tensor represents a covariant transformation, which is used in the <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluationBase::get_gradient()</a> function to transform the unit cell gradients to gradients on the real cell by a multiplication <picture><source srcset="form_1997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm
+T} \hat{\nabla} u_h$" src="form_1997.png"/></picture>. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess_3_01dim_00_01dim_00_01Number_00_01is__face_00_01VectorizedArrayType_01_4.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess_3_01dim_00_01dim_00_01Number_00_01is__face_00_01VectorizedArrayType_01_4.html	2024-03-17 21:57:20.607093246 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationAccess_3_01dim_00_01dim_00_01Number_00_01is__face_00_01VectorizedArrayType_01_4.html	2024-03-17 21:57:20.615093295 +0000
@@ -860,7 +860,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the curl of the vector field, <picture><source srcset="form_2002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \times v$" src="form_2002.png"/></picture> after a call to <code>evaluate(EvaluationFlags::gradients)</code>. </p>
+<p>Return the curl of the vector field, <picture><source srcset="form_1993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \times v$" src="form_1993.png"/></picture> after a call to <code>evaluate(EvaluationFlags::gradients)</code>. </p>
 
 </div>
 </div>
@@ -1339,8 +1339,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the derivative of a finite element function at quadrature point number <code>q_point</code> after a call to FEEvaluation::evaluate(EvaluationFlags::gradients) the direction normal to the face: <picture><source srcset="form_2001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol \nabla u(\mathbf x_q) \cdot \mathbf n(\mathbf
-x_q)$" src="form_2001.png"/></picture></p>
+<p>Return the derivative of a finite element function at quadrature point number <code>q_point</code> after a call to FEEvaluation::evaluate(EvaluationFlags::gradients) the direction normal to the face: <picture><source srcset="form_1992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol \nabla u(\mathbf x_q) \cdot \mathbf n(\mathbf
+x_q)$" src="form_1992.png"/></picture></p>
 <p>This call is equivalent to calling <a class="el" href="#href_anchor">get_gradient()</a> * <a class="el" href="classFEEvaluationData.html#href_anchor">normal_vector()</a> but will use a more efficient internal representation of data.</p>
 <dl class="section note"><dt>Note</dt><dd>The derived class <a class="el" href="classFEEvaluationAccess.html">FEEvaluationAccess</a> overloads this operation with specializations for the scalar case (n_components == 1) and for the vector-valued case (n_components == dim). </dd></dl>
 
@@ -1790,8 +1790,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the inverse and transposed version <picture><source srcset="form_1991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm T}$" src="form_1991.png"/></picture> of the Jacobian of the mapping between the unit to the real cell defined as <picture><source srcset="form_1992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij} = d x_i / d\hat x_j$" src="form_1992.png"/></picture>. The <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> entry of the returned tensor contains <picture><source srcset="form_1993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x_j/dx_i$" src="form_1993.png"/></picture>, i.e., columns refer to reference space coordinates and rows to real cell coordinates. Thus, the returned tensor represents a covariant transformation, which is used in the <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluationBase::get_gradient()</a> function to transform the unit cell gradients to gradients on the real cell by a multiplication <picture><source srcset="form_1994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm
-T} \hat{\nabla} u_h$" src="form_1994.png"/></picture>. </p>
+<p>Return the inverse and transposed version <picture><source srcset="form_1994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm T}$" src="form_1994.png"/></picture> of the Jacobian of the mapping between the unit to the real cell defined as <picture><source srcset="form_1995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij} = d x_i / d\hat x_j$" src="form_1995.png"/></picture>. The <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> entry of the returned tensor contains <picture><source srcset="form_1996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x_j/dx_i$" src="form_1996.png"/></picture>, i.e., columns refer to reference space coordinates and rows to real cell coordinates. Thus, the returned tensor represents a covariant transformation, which is used in the <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluationBase::get_gradient()</a> function to transform the unit cell gradients to gradients on the real cell by a multiplication <picture><source srcset="form_1997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm
+T} \hat{\nabla} u_h$" src="form_1997.png"/></picture>. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationBase.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationBase.html	2024-03-17 21:57:20.715093913 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationBase.html	2024-03-17 21:57:20.719093938 +0000
@@ -1053,8 +1053,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the derivative of a finite element function at quadrature point number <code>q_point</code> after a call to FEEvaluation::evaluate(EvaluationFlags::gradients) the direction normal to the face: <picture><source srcset="form_2001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol \nabla u(\mathbf x_q) \cdot \mathbf n(\mathbf
-x_q)$" src="form_2001.png"/></picture></p>
+<p>Return the derivative of a finite element function at quadrature point number <code>q_point</code> after a call to FEEvaluation::evaluate(EvaluationFlags::gradients) the direction normal to the face: <picture><source srcset="form_1992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol \nabla u(\mathbf x_q) \cdot \mathbf n(\mathbf
+x_q)$" src="form_1992.png"/></picture></p>
 <p>This call is equivalent to calling <a class="el" href="#href_anchor">get_gradient()</a> * <a class="el" href="classFEEvaluationData.html#href_anchor">normal_vector()</a> but will use a more efficient internal representation of data.</p>
 <dl class="section note"><dt>Note</dt><dd>The derived class <a class="el" href="classFEEvaluationAccess.html">FEEvaluationAccess</a> overloads this operation with specializations for the scalar case (n_components == 1) and for the vector-valued case (n_components == dim). </dd></dl>
 
@@ -1249,7 +1249,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the curl of the vector field, <picture><source srcset="form_2002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \times v$" src="form_2002.png"/></picture> after a call to <code>evaluate(EvaluationFlags::gradients)</code>.</p>
+<p>Return the curl of the vector field, <picture><source srcset="form_1993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \times v$" src="form_1993.png"/></picture> after a call to <code>evaluate(EvaluationFlags::gradients)</code>.</p>
 <dl class="section note"><dt>Note</dt><dd>Only available for the vector-valued case (n_components == dim). </dd></dl>
 
 </div>
@@ -1690,8 +1690,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the inverse and transposed version <picture><source srcset="form_1991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm T}$" src="form_1991.png"/></picture> of the Jacobian of the mapping between the unit to the real cell defined as <picture><source srcset="form_1992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij} = d x_i / d\hat x_j$" src="form_1992.png"/></picture>. The <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> entry of the returned tensor contains <picture><source srcset="form_1993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x_j/dx_i$" src="form_1993.png"/></picture>, i.e., columns refer to reference space coordinates and rows to real cell coordinates. Thus, the returned tensor represents a covariant transformation, which is used in the <a class="el" href="#href_anchor">FEEvaluationBase::get_gradient()</a> function to transform the unit cell gradients to gradients on the real cell by a multiplication <picture><source srcset="form_1994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm
-T} \hat{\nabla} u_h$" src="form_1994.png"/></picture>. </p>
+<p>Return the inverse and transposed version <picture><source srcset="form_1994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm T}$" src="form_1994.png"/></picture> of the Jacobian of the mapping between the unit to the real cell defined as <picture><source srcset="form_1995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij} = d x_i / d\hat x_j$" src="form_1995.png"/></picture>. The <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> entry of the returned tensor contains <picture><source srcset="form_1996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x_j/dx_i$" src="form_1996.png"/></picture>, i.e., columns refer to reference space coordinates and rows to real cell coordinates. Thus, the returned tensor represents a covariant transformation, which is used in the <a class="el" href="#href_anchor">FEEvaluationBase::get_gradient()</a> function to transform the unit cell gradients to gradients on the real cell by a multiplication <picture><source srcset="form_1997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm
+T} \hat{\nabla} u_h$" src="form_1997.png"/></picture>. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationData.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationData.html	2024-03-17 21:57:20.795094407 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEEvaluationData.html	2024-03-17 21:57:20.799094433 +0000
@@ -768,8 +768,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the inverse and transposed version <picture><source srcset="form_1991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm T}$" src="form_1991.png"/></picture> of the Jacobian of the mapping between the unit to the real cell defined as <picture><source srcset="form_1992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij} = d x_i / d\hat x_j$" src="form_1992.png"/></picture>. The <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> entry of the returned tensor contains <picture><source srcset="form_1993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x_j/dx_i$" src="form_1993.png"/></picture>, i.e., columns refer to reference space coordinates and rows to real cell coordinates. Thus, the returned tensor represents a covariant transformation, which is used in the <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluationBase::get_gradient()</a> function to transform the unit cell gradients to gradients on the real cell by a multiplication <picture><source srcset="form_1994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm
-T} \hat{\nabla} u_h$" src="form_1994.png"/></picture>. </p>
+<p>Return the inverse and transposed version <picture><source srcset="form_1994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm T}$" src="form_1994.png"/></picture> of the Jacobian of the mapping between the unit to the real cell defined as <picture><source srcset="form_1995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij} = d x_i / d\hat x_j$" src="form_1995.png"/></picture>. The <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> entry of the returned tensor contains <picture><source srcset="form_1996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x_j/dx_i$" src="form_1996.png"/></picture>, i.e., columns refer to reference space coordinates and rows to real cell coordinates. Thus, the returned tensor represents a covariant transformation, which is used in the <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluationBase::get_gradient()</a> function to transform the unit cell gradients to gradients on the real cell by a multiplication <picture><source srcset="form_1997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm
+T} \hat{\nabla} u_h$" src="form_1997.png"/></picture>. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEFaceEvaluation.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEFaceEvaluation.html	2024-03-17 21:57:20.911095124 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEFaceEvaluation.html	2024-03-17 21:57:20.907095099 +0000
@@ -1579,8 +1579,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the derivative of a finite element function at quadrature point number <code>q_point</code> after a call to FEEvaluation::evaluate(EvaluationFlags::gradients) the direction normal to the face: <picture><source srcset="form_2001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol \nabla u(\mathbf x_q) \cdot \mathbf n(\mathbf
-x_q)$" src="form_2001.png"/></picture></p>
+<p>Return the derivative of a finite element function at quadrature point number <code>q_point</code> after a call to FEEvaluation::evaluate(EvaluationFlags::gradients) the direction normal to the face: <picture><source srcset="form_1992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol \nabla u(\mathbf x_q) \cdot \mathbf n(\mathbf
+x_q)$" src="form_1992.png"/></picture></p>
 <p>This call is equivalent to calling <a class="el" href="classFEEvaluationBase.html#href_anchor">get_gradient()</a> * <a class="el" href="classFEEvaluationData.html#href_anchor">normal_vector()</a> but will use a more efficient internal representation of data.</p>
 <dl class="section note"><dt>Note</dt><dd>The derived class <a class="el" href="classFEEvaluationAccess.html">FEEvaluationAccess</a> overloads this operation with specializations for the scalar case (n_components == 1) and for the vector-valued case (n_components == dim). </dd></dl>
 
@@ -1844,7 +1844,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the curl of the vector field, <picture><source srcset="form_2002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \times v$" src="form_2002.png"/></picture> after a call to <code>evaluate(EvaluationFlags::gradients)</code>.</p>
+<p>Return the curl of the vector field, <picture><source srcset="form_1993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \times v$" src="form_1993.png"/></picture> after a call to <code>evaluate(EvaluationFlags::gradients)</code>.</p>
 <dl class="section note"><dt>Note</dt><dd>Only available for the vector-valued case (n_components == dim). </dd></dl>
 
 </div>
@@ -2294,8 +2294,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the inverse and transposed version <picture><source srcset="form_1991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm T}$" src="form_1991.png"/></picture> of the Jacobian of the mapping between the unit to the real cell defined as <picture><source srcset="form_1992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij} = d x_i / d\hat x_j$" src="form_1992.png"/></picture>. The <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> entry of the returned tensor contains <picture><source srcset="form_1993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x_j/dx_i$" src="form_1993.png"/></picture>, i.e., columns refer to reference space coordinates and rows to real cell coordinates. Thus, the returned tensor represents a covariant transformation, which is used in the <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluationBase::get_gradient()</a> function to transform the unit cell gradients to gradients on the real cell by a multiplication <picture><source srcset="form_1994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm
-T} \hat{\nabla} u_h$" src="form_1994.png"/></picture>. </p>
+<p>Return the inverse and transposed version <picture><source srcset="form_1994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm T}$" src="form_1994.png"/></picture> of the Jacobian of the mapping between the unit to the real cell defined as <picture><source srcset="form_1995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij} = d x_i / d\hat x_j$" src="form_1995.png"/></picture>. The <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> entry of the returned tensor contains <picture><source srcset="form_1996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x_j/dx_i$" src="form_1996.png"/></picture>, i.e., columns refer to reference space coordinates and rows to real cell coordinates. Thus, the returned tensor represents a covariant transformation, which is used in the <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluationBase::get_gradient()</a> function to transform the unit cell gradients to gradients on the real cell by a multiplication <picture><source srcset="form_1997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-\mathrm
+T} \hat{\nabla} u_h$" src="form_1997.png"/></picture>. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEFaceValues.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEFaceValues.html	2024-03-17 21:57:21.015095767 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEFaceValues.html	2024-03-17 21:57:21.019095791 +0000
@@ -931,7 +931,7 @@
 <p>If the shape function is vector-valued, then this returns the only non- zero component. If the shape function has more than one non-zero component (i.e. it is not primitive), then throw an exception of type ExcShapeFunctionNotPrimitive. In that case, use the <a class="el" href="classFEValuesBase.html#href_anchor">shape_value_component()</a> function.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated. Note that this number runs from zero to dofs_per_cell, even in the case of an <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated. Note that this number runs from zero to dofs_per_cell, even in the case of an <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated</td></tr>
   </table>
   </dd>
@@ -972,7 +972,7 @@
 <p>Compute one vector component of the value of a shape function at a quadrature point. If the finite element is scalar, then only component zero is allowed and the return value equals that of the <a class="el" href="classFEValuesBase.html#href_anchor">shape_value()</a> function. If the finite element is vector valued but all shape functions are primitive (i.e. they are non-zero in only one component), then the value returned by <a class="el" href="classFEValuesBase.html#href_anchor">shape_value()</a> equals that of this function for exactly one component. This function is therefore only of greater interest if the shape function is not primitive, but then it is necessary since the other function cannot be used.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated.</td></tr>
     <tr><td class="paramname">component</td><td>vector component to be evaluated.</td></tr>
   </table>
@@ -1011,7 +1011,7 @@
 <p>The same holds for the arguments of this function as for the <a class="el" href="classFEValuesBase.html#href_anchor">shape_value()</a> function.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated.</td></tr>
   </table>
   </dd>
@@ -1213,17 +1213,17 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the values of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the <a class="el" href="#href_anchor">reinit()</a> function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1305.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x_q^K)$" src="form_1306.png"/></picture> where <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1307.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and the related <a class="el" href="classFEValuesBase.html#href_anchor">get_function_gradients()</a> function is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
+<p>Return the values of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the <a class="el" href="#href_anchor">reinit()</a> function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1249.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1250_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x_q^K)$" src="form_1250.png"/></picture> where <picture><source srcset="form_1251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1251.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and the related <a class="el" href="classFEValuesBase.html#href_anchor">get_function_gradients()</a> function is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
 <p>If the current cell is not active (i.e., it has children), then the finite element function is, strictly speaking, defined by shape functions that live on these child cells. Rather than evaluating the shape functions on the child cells, with the quadrature points defined on the current cell, this function first interpolates the finite element function to shape functions defined on the current cell, and then evaluates this interpolated function.</p>
 <p>This function may only be used if the finite element in use is a scalar one, i.e. has only one vector component. To get values of multi-component elements, there is another <a class="el" href="classFEValuesBase.html#href_anchor">get_function_values()</a> below, returning a vector of vectors of results.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">values</td><td>The values of the function specified by fe_function at the quadrature points of the current cell. The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the values of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the solution vector.</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">values</td><td>The values of the function specified by fe_function at the quadrature points of the current cell. The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the values of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the solution vector.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> will contain the value of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> will contain the value of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1259,7 +1259,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_values()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> is a vector of values of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>values[q]</code> equals the number of components of the finite element, i.e. <code>values[q](c)</code> returns the value of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> is a vector of values of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>values[q]</code> equals the number of components of the finite element, i.e. <code>values[q](c)</code> returns the value of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3320</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1431,16 +1431,16 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the gradients of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the <a class="el" href="#href_anchor">reinit()</a> function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1305.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(\mathbf x_q^K)$" src="form_1308.png"/></picture> where <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1307.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and it is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
+<p>Return the gradients of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the <a class="el" href="#href_anchor">reinit()</a> function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1249.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(\mathbf x_q^K)$" src="form_1252.png"/></picture> where <picture><source srcset="form_1251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1251.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and it is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
 <p>This function may only be used if the finite element in use is a scalar one, i.e. has only one vector component. There is a corresponding function of the same name for vector-valued finite elements.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradients</td><td>The gradients of the function specified by fe_function at the quadrature points of the current cell. The gradients are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the gradients of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">gradients</td><td>The gradients of the function specified by fe_function at the quadrature points of the current cell. The gradients are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the gradients of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> will contain the gradient of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>gradients[q][d]</code> represents the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> will contain the gradient of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>gradients[q][d]</code> represents the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1476,7 +1476,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_gradients()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> is a vector of gradients of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>gradients[q]</code> equals the number of components of the finite element, i.e. <code>gradients[q][c]</code> returns the gradient of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>gradients[q][c][d]</code> is the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> is a vector of gradients of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>gradients[q]</code> equals the number of components of the finite element, i.e. <code>gradients[q][c]</code> returns the gradient of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>gradients[q][c][d]</code> is the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3463</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1595,11 +1595,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">hessians</td><td>The Hessians of the function specified by fe_function at the quadrature points of the current cell. The Hessians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Hessians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">hessians</td><td>The Hessians of the function specified by fe_function at the quadrature points of the current cell. The Hessians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Hessians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> will contain the Hessian of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>hessians[q][i][j]</code> represents the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture>th component of the matrix of second derivatives at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> will contain the Hessian of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>hessians[q][i][j]</code> represents the <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture>th component of the matrix of second derivatives at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1640,7 +1640,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_hessians()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> is a vector of Hessians of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>hessians[q]</code> equals the number of components of the finite element, i.e. <code>hessians[q][c]</code> returns the Hessian of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>hessians[q][c][i][j]</code> is the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture>th component of the matrix of second derivatives of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> is a vector of Hessians of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>hessians[q]</code> equals the number of components of the finite element, i.e. <code>hessians[q][c]</code> returns the Hessian of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>hessians[q][c][i][j]</code> is the <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture>th component of the matrix of second derivatives of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3576</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1759,11 +1759,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">laplacians</td><td>The Laplacians of the function specified by fe_function at the quadrature points of the current cell. The Laplacians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Laplacians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the input vector.</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">laplacians</td><td>The Laplacians of the function specified by fe_function at the quadrature points of the current cell. The Laplacians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Laplacians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the input vector.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> will contain the Laplacian of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd>
+<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> will contain the Laplacian of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd>
 <dd>
 For each component of the output vector, there holds <code>laplacians[q]=trace(hessians[q])</code>, where <code>hessians</code> would be the output of the <a class="el" href="classFEValuesBase.html#href_anchor">get_function_hessians()</a> function.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
@@ -1801,7 +1801,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_laplacians()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> is a vector of Laplacians of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>laplacians[q]</code> equals the number of components of the finite element, i.e. <code>laplacians[q][c]</code> returns the Laplacian of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd>
+<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> is a vector of Laplacians of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>laplacians[q]</code> equals the number of components of the finite element, i.e. <code>laplacians[q][c]</code> returns the Laplacian of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd>
 <dd>
 For each component of the output vector, there holds <code>laplacians[q][c]=trace(hessians[q][c])</code>, where <code>hessians</code> would be the output of the <a class="el" href="classFEValuesBase.html#href_anchor">get_function_hessians()</a> function.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1964,11 +1964,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">third_derivatives</td><td>The third derivatives of the function specified by fe_function at the quadrature points of the current cell. The third derivatives are computed in real space (as opposed to on the unit cell). The object is assumed to already have the correct size. The data type stored by this output vector must be what you get when you multiply the third derivatives of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">third_derivatives</td><td>The third derivatives of the function specified by fe_function at the quadrature points of the current cell. The third derivatives are computed in real space (as opposed to on the unit cell). The object is assumed to already have the correct size. The data type stored by this output vector must be what you get when you multiply the third derivatives of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> will contain the third derivatives of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>third_derivatives[q][i][j][k]</code> represents the <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1309.png"/></picture>th component of the 3rd order tensor of third derivatives at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> will contain the third derivatives of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>third_derivatives[q][i][j][k]</code> represents the <picture><source srcset="form_1253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1253.png"/></picture>th component of the 3rd order tensor of third derivatives at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_3rd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -2009,7 +2009,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_third_derivatives()</a>, but applied to multi-component (vector- valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> is a vector of third derivatives of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>third_derivatives[q]</code> equals the number of components of the finite element, i.e. <code>third_derivatives[q][c]</code> returns the third derivative of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>third_derivatives[q][c][i][j][k]</code> is the <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1309.png"/></picture>th component of the tensor of third derivatives of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> is a vector of third derivatives of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>third_derivatives[q]</code> equals the number of components of the finite element, i.e. <code>third_derivatives[q][c]</code> returns the third derivative of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>third_derivatives[q][c][i][j][k]</code> is the <picture><source srcset="form_1253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1253.png"/></picture>th component of the tensor of third derivatives of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_3rd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3826</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -2350,7 +2350,7 @@
 </div><div class="memdoc">
 <p>Mapped quadrature weight. If this object refers to a volume evaluation (i.e. the derived class is of type <a class="el" href="classFEValues.html">FEValues</a>), then this is the Jacobi determinant times the weight of the <code>q_point</code>th unit quadrature point.</p>
 <p>For surface evaluations (i.e. classes <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a>), it is the mapped surface element times the weight of the quadrature point.</p>
-<p>You can think of the quantity returned by this function as the volume or surface element <picture><source srcset="form_1310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dx, ds$" src="form_1310.png"/></picture> in the integral that we implement here by quadrature.</p>
+<p>You can think of the quantity returned by this function as the volume or surface element <picture><source srcset="form_1254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dx, ds$" src="form_1254.png"/></picture> in the integral that we implement here by quadrature.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_JxW_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2407,7 +2407,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the Jacobian of the transformation at the specified quadrature point, i.e. <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1289.png"/></picture></p>
+<p>Return the Jacobian of the transformation at the specified quadrature point, i.e. <picture><source srcset="form_1255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1255.png"/></picture></p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2465,7 +2465,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1311_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{jk}/d\hat x_i$" src="form_1311.png"/></picture>.</p>
+<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{jk}/d\hat x_i$" src="form_1256.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_grads</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2523,7 +2523,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, pushed forward to the real cell coordinates, i.e. <picture><source srcset="form_1312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{iJ}/d\hat x_K (J_{jJ})^{-1} (J_{kK})^{-1}$" src="form_1312.png"/></picture>.</p>
+<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, pushed forward to the real cell coordinates, i.e. <picture><source srcset="form_1257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{iJ}/d\hat x_K (J_{jJ})^{-1} (J_{kK})^{-1}$" src="form_1257.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_pushed_forward_grads</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2581,7 +2581,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the third derivative of the transformation from unit to real cell, i.e. the second derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1313_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijkl}=\frac{d^2J_{ij}}{d\hat x_k d\hat x_l}$" src="form_1313.png"/></picture>.</p>
+<p>Return the third derivative of the transformation from unit to real cell, i.e. the second derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijkl}=\frac{d^2J_{ij}}{d\hat x_k d\hat x_l}$" src="form_1258.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_2nd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEFaceValuesBase.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEFaceValuesBase.html	2024-03-17 21:57:21.127096458 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEFaceValuesBase.html	2024-03-17 21:57:21.127096458 +0000
@@ -649,7 +649,7 @@
 <p>If the shape function is vector-valued, then this returns the only non- zero component. If the shape function has more than one non-zero component (i.e. it is not primitive), then throw an exception of type ExcShapeFunctionNotPrimitive. In that case, use the <a class="el" href="classFEValuesBase.html#href_anchor">shape_value_component()</a> function.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated. Note that this number runs from zero to dofs_per_cell, even in the case of an <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated. Note that this number runs from zero to dofs_per_cell, even in the case of an <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated</td></tr>
   </table>
   </dd>
@@ -690,7 +690,7 @@
 <p>Compute one vector component of the value of a shape function at a quadrature point. If the finite element is scalar, then only component zero is allowed and the return value equals that of the <a class="el" href="classFEValuesBase.html#href_anchor">shape_value()</a> function. If the finite element is vector valued but all shape functions are primitive (i.e. they are non-zero in only one component), then the value returned by <a class="el" href="classFEValuesBase.html#href_anchor">shape_value()</a> equals that of this function for exactly one component. This function is therefore only of greater interest if the shape function is not primitive, but then it is necessary since the other function cannot be used.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated.</td></tr>
     <tr><td class="paramname">component</td><td>vector component to be evaluated.</td></tr>
   </table>
@@ -729,7 +729,7 @@
 <p>The same holds for the arguments of this function as for the <a class="el" href="classFEValuesBase.html#href_anchor">shape_value()</a> function.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated.</td></tr>
   </table>
   </dd>
@@ -931,17 +931,17 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the values of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the reinit() function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1305.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x_q^K)$" src="form_1306.png"/></picture> where <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1307.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and the related <a class="el" href="classFEValuesBase.html#href_anchor">get_function_gradients()</a> function is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
+<p>Return the values of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the reinit() function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1249.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1250_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x_q^K)$" src="form_1250.png"/></picture> where <picture><source srcset="form_1251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1251.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and the related <a class="el" href="classFEValuesBase.html#href_anchor">get_function_gradients()</a> function is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
 <p>If the current cell is not active (i.e., it has children), then the finite element function is, strictly speaking, defined by shape functions that live on these child cells. Rather than evaluating the shape functions on the child cells, with the quadrature points defined on the current cell, this function first interpolates the finite element function to shape functions defined on the current cell, and then evaluates this interpolated function.</p>
 <p>This function may only be used if the finite element in use is a scalar one, i.e. has only one vector component. To get values of multi-component elements, there is another <a class="el" href="classFEValuesBase.html#href_anchor">get_function_values()</a> below, returning a vector of vectors of results.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">values</td><td>The values of the function specified by fe_function at the quadrature points of the current cell. The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the values of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the solution vector.</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">values</td><td>The values of the function specified by fe_function at the quadrature points of the current cell. The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the values of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the solution vector.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> will contain the value of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> will contain the value of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -977,7 +977,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_values()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> is a vector of values of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>values[q]</code> equals the number of components of the finite element, i.e. <code>values[q](c)</code> returns the value of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> is a vector of values of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>values[q]</code> equals the number of components of the finite element, i.e. <code>values[q](c)</code> returns the value of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3320</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1149,16 +1149,16 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the gradients of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the reinit() function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1305.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(\mathbf x_q^K)$" src="form_1308.png"/></picture> where <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1307.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and it is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
+<p>Return the gradients of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the reinit() function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1249.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(\mathbf x_q^K)$" src="form_1252.png"/></picture> where <picture><source srcset="form_1251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1251.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and it is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
 <p>This function may only be used if the finite element in use is a scalar one, i.e. has only one vector component. There is a corresponding function of the same name for vector-valued finite elements.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradients</td><td>The gradients of the function specified by fe_function at the quadrature points of the current cell. The gradients are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the gradients of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">gradients</td><td>The gradients of the function specified by fe_function at the quadrature points of the current cell. The gradients are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the gradients of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> will contain the gradient of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>gradients[q][d]</code> represents the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> will contain the gradient of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>gradients[q][d]</code> represents the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1194,7 +1194,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_gradients()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> is a vector of gradients of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>gradients[q]</code> equals the number of components of the finite element, i.e. <code>gradients[q][c]</code> returns the gradient of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>gradients[q][c][d]</code> is the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> is a vector of gradients of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>gradients[q]</code> equals the number of components of the finite element, i.e. <code>gradients[q][c]</code> returns the gradient of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>gradients[q][c][d]</code> is the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3463</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1313,11 +1313,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">hessians</td><td>The Hessians of the function specified by fe_function at the quadrature points of the current cell. The Hessians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Hessians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">hessians</td><td>The Hessians of the function specified by fe_function at the quadrature points of the current cell. The Hessians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Hessians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> will contain the Hessian of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>hessians[q][i][j]</code> represents the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture>th component of the matrix of second derivatives at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> will contain the Hessian of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>hessians[q][i][j]</code> represents the <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture>th component of the matrix of second derivatives at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1358,7 +1358,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_hessians()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> is a vector of Hessians of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>hessians[q]</code> equals the number of components of the finite element, i.e. <code>hessians[q][c]</code> returns the Hessian of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>hessians[q][c][i][j]</code> is the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture>th component of the matrix of second derivatives of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> is a vector of Hessians of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>hessians[q]</code> equals the number of components of the finite element, i.e. <code>hessians[q][c]</code> returns the Hessian of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>hessians[q][c][i][j]</code> is the <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture>th component of the matrix of second derivatives of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3576</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1477,11 +1477,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">laplacians</td><td>The Laplacians of the function specified by fe_function at the quadrature points of the current cell. The Laplacians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Laplacians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the input vector.</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">laplacians</td><td>The Laplacians of the function specified by fe_function at the quadrature points of the current cell. The Laplacians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Laplacians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the input vector.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> will contain the Laplacian of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd>
+<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> will contain the Laplacian of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd>
 <dd>
 For each component of the output vector, there holds <code>laplacians[q]=trace(hessians[q])</code>, where <code>hessians</code> would be the output of the <a class="el" href="classFEValuesBase.html#href_anchor">get_function_hessians()</a> function.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
@@ -1519,7 +1519,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_laplacians()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> is a vector of Laplacians of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>laplacians[q]</code> equals the number of components of the finite element, i.e. <code>laplacians[q][c]</code> returns the Laplacian of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd>
+<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> is a vector of Laplacians of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>laplacians[q]</code> equals the number of components of the finite element, i.e. <code>laplacians[q][c]</code> returns the Laplacian of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd>
 <dd>
 For each component of the output vector, there holds <code>laplacians[q][c]=trace(hessians[q][c])</code>, where <code>hessians</code> would be the output of the <a class="el" href="classFEValuesBase.html#href_anchor">get_function_hessians()</a> function.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1682,11 +1682,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">third_derivatives</td><td>The third derivatives of the function specified by fe_function at the quadrature points of the current cell. The third derivatives are computed in real space (as opposed to on the unit cell). The object is assumed to already have the correct size. The data type stored by this output vector must be what you get when you multiply the third derivatives of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">third_derivatives</td><td>The third derivatives of the function specified by fe_function at the quadrature points of the current cell. The third derivatives are computed in real space (as opposed to on the unit cell). The object is assumed to already have the correct size. The data type stored by this output vector must be what you get when you multiply the third derivatives of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> will contain the third derivatives of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>third_derivatives[q][i][j][k]</code> represents the <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1309.png"/></picture>th component of the 3rd order tensor of third derivatives at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> will contain the third derivatives of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>third_derivatives[q][i][j][k]</code> represents the <picture><source srcset="form_1253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1253.png"/></picture>th component of the 3rd order tensor of third derivatives at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_3rd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1727,7 +1727,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_third_derivatives()</a>, but applied to multi-component (vector- valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> is a vector of third derivatives of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>third_derivatives[q]</code> equals the number of components of the finite element, i.e. <code>third_derivatives[q][c]</code> returns the third derivative of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>third_derivatives[q][c][i][j][k]</code> is the <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1309.png"/></picture>th component of the tensor of third derivatives of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> is a vector of third derivatives of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>third_derivatives[q]</code> equals the number of components of the finite element, i.e. <code>third_derivatives[q][c]</code> returns the third derivative of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>third_derivatives[q][c][i][j][k]</code> is the <picture><source srcset="form_1253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1253.png"/></picture>th component of the tensor of third derivatives of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_3rd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3826</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -2068,7 +2068,7 @@
 </div><div class="memdoc">
 <p>Mapped quadrature weight. If this object refers to a volume evaluation (i.e. the derived class is of type <a class="el" href="classFEValues.html">FEValues</a>), then this is the Jacobi determinant times the weight of the <code>q_point</code>th unit quadrature point.</p>
 <p>For surface evaluations (i.e. classes <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a>), it is the mapped surface element times the weight of the quadrature point.</p>
-<p>You can think of the quantity returned by this function as the volume or surface element <picture><source srcset="form_1310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dx, ds$" src="form_1310.png"/></picture> in the integral that we implement here by quadrature.</p>
+<p>You can think of the quantity returned by this function as the volume or surface element <picture><source srcset="form_1254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dx, ds$" src="form_1254.png"/></picture> in the integral that we implement here by quadrature.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_JxW_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2125,7 +2125,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the Jacobian of the transformation at the specified quadrature point, i.e. <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1289.png"/></picture></p>
+<p>Return the Jacobian of the transformation at the specified quadrature point, i.e. <picture><source srcset="form_1255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1255.png"/></picture></p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2183,7 +2183,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1311_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{jk}/d\hat x_i$" src="form_1311.png"/></picture>.</p>
+<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{jk}/d\hat x_i$" src="form_1256.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_grads</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2241,7 +2241,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, pushed forward to the real cell coordinates, i.e. <picture><source srcset="form_1312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{iJ}/d\hat x_K (J_{jJ})^{-1} (J_{kK})^{-1}$" src="form_1312.png"/></picture>.</p>
+<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, pushed forward to the real cell coordinates, i.e. <picture><source srcset="form_1257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{iJ}/d\hat x_K (J_{jJ})^{-1} (J_{kK})^{-1}$" src="form_1257.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_pushed_forward_grads</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2299,7 +2299,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the third derivative of the transformation from unit to real cell, i.e. the second derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1313_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijkl}=\frac{d^2J_{ij}}{d\hat x_k d\hat x_l}$" src="form_1313.png"/></picture>.</p>
+<p>Return the third derivative of the transformation from unit to real cell, i.e. the second derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijkl}=\frac{d^2J_{ij}}{d\hat x_k d\hat x_l}$" src="form_1258.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_2nd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEInterfaceValues.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEInterfaceValues.html	2024-03-17 21:57:21.199096904 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEInterfaceValues.html	2024-03-17 21:57:21.207096952 +0000
@@ -488,8 +488,8 @@
 <li>If the <code>q_index</code> and <code>mapping_index</code> arguments to this function are explicitly specified (rather than leaving them at their default values), then these indices will be used to select which element of the <a class="el" href="classhp_1_1QCollection.html">hp::QCollection</a> and <a class="el" href="classhp_1_1MappingCollection.html">hp::MappingCollection</a> passed to the constructor should serve as the quadrature and mapping to be used.</li>
 <li>If one of these arguments is left at its default value, then the function will need to choose a quadrature and/or mapping that is appropriate for the two finite element spaces used on the two cells adjacent to the current interface. As the first choice, if the quadrature or mapping collection we are considering has only one element, then that is clearly the one that should be used.</li>
 <li>If the quadrature or mapping collection have multiple elements, then we need to dig further. For quadrature objects, we can compare whether the two quadrature objects that correspond to the <code>active_fe_index</code> values of the two adjacent cells are identical (i.e., have quadrature points at the same locations, and have the same weights). If this is so, then it does not matter which one of the two we take, and we choose one or the other.</li>
-<li>If this has still not helped, we try to find out which of the two finite element spaces on the two adjacent cells is "larger" (say, if you had used <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> and <picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> elements on the two adjacent cells, then the <picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element is the larger one); the determination of which space is "larger" is made using the <a class="el" href="classhp_1_1FECollection.html#href_anchor">hp::FECollection::find_dominated_fe()</a> function, which is not necessarily intended for this kind of query, but yields a result that serves just fine for our purposes here. We then operate on the assumption that the quadrature object associated with the "larger" of the two spaces is the appropriate one to use for the face that separates these two spaces.<ul>
-<li>If this function returns that one of the two elements in question is dominated by the other, then presumably it is "larger" one and we take the quadrature formula and mapping that corresponds to this "larger" element is. For example, for the <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> element mentioned above, one would generally use a <a class="el" href="classQGauss.html">QGauss(3)</a> quadrature formula, whereas for the <picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, one would use <a class="el" href="classQGauss.html">QGauss(5)</a>. To integrate jump and average terms on the interface between cells using these two elements, <a class="el" href="classQGauss.html">QGauss(5)</a> is appropriate. Because, typically, people will order elements in the <a class="el" href="classhp_1_1FECollection.html">hp::FECollection</a> in the same order as the quadrature and mapping objects in <a class="el" href="classhp_1_1QCollection.html">hp::QCollection</a> and <a class="el" href="classhp_1_1MappingCollection.html">hp::MappingCollection</a>, this function will use the index of the "larger" element in the <a class="el" href="classhp_1_1FECollection.html">hp::FECollection</a> to also index into the <a class="el" href="classhp_1_1QCollection.html">hp::QCollection</a> and <a class="el" href="classhp_1_1MappingCollection.html">hp::MappingCollection</a> to retrieve quadrature and mapping objects appropriate for the current face.</li>
+<li>If this has still not helped, we try to find out which of the two finite element spaces on the two adjacent cells is "larger" (say, if you had used <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> and <picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> elements on the two adjacent cells, then the <picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element is the larger one); the determination of which space is "larger" is made using the <a class="el" href="classhp_1_1FECollection.html#href_anchor">hp::FECollection::find_dominated_fe()</a> function, which is not necessarily intended for this kind of query, but yields a result that serves just fine for our purposes here. We then operate on the assumption that the quadrature object associated with the "larger" of the two spaces is the appropriate one to use for the face that separates these two spaces.<ul>
+<li>If this function returns that one of the two elements in question is dominated by the other, then presumably it is "larger" one and we take the quadrature formula and mapping that corresponds to this "larger" element is. For example, for the <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> element mentioned above, one would generally use a <a class="el" href="classQGauss.html">QGauss(3)</a> quadrature formula, whereas for the <picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, one would use <a class="el" href="classQGauss.html">QGauss(5)</a>. To integrate jump and average terms on the interface between cells using these two elements, <a class="el" href="classQGauss.html">QGauss(5)</a> is appropriate. Because, typically, people will order elements in the <a class="el" href="classhp_1_1FECollection.html">hp::FECollection</a> in the same order as the quadrature and mapping objects in <a class="el" href="classhp_1_1QCollection.html">hp::QCollection</a> and <a class="el" href="classhp_1_1MappingCollection.html">hp::MappingCollection</a>, this function will use the index of the "larger" element in the <a class="el" href="classhp_1_1FECollection.html">hp::FECollection</a> to also index into the <a class="el" href="classhp_1_1QCollection.html">hp::QCollection</a> and <a class="el" href="classhp_1_1MappingCollection.html">hp::MappingCollection</a> to retrieve quadrature and mapping objects appropriate for the current face.</li>
 <li>There are cases where neither element dominates the other. For example, if one uses <picture><source srcset="form_1049_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2\times Q_1$" src="form_1049.png"/></picture> and <picture><source srcset="form_1050_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1\times Q_2$" src="form_1050.png"/></picture> elements on neighboring cells, neither of the two spaces dominates the other &ndash; or, in the context of the current function, neither space is "larger" than the other. In that case, there is no way for the current function to determine quadrature and mapping objects associated with the two elements are the appropriate ones. If that happens, you will get an error &ndash; and the only way to avoid the error is to explicitly specify for these interfaces which quadrature and mapping objects you want to use, by providing non-default values for the <code>q_index</code> and <code>mapping_index</code> arguments to this function.</li>
 </ul>
 </li>
@@ -825,7 +825,7 @@
       </table>
 </div><div class="memdoc">
 <p>Mapped quadrature weight. This value equals the mapped surface element times the weight of the quadrature point.</p>
-<p>You can think of the quantity returned by this function as the surface element <picture><source srcset="form_1187_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ds$" src="form_1187.png"/></picture> in the integral that we implement here by quadrature.</p>
+<p>You can think of the quantity returned by this function as the surface element <picture><source srcset="form_1100_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ds$" src="form_1100.png"/></picture> in the integral that we implement here by quadrature.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_JxW_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -1097,9 +1097,9 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>component</em><span class="paramdefsep"> = </span><span class="paramdefval">0</span></span>&#href_anchor"memdoc">
-<p>Return the jump <picture><source srcset="form_1188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{u}=u_{\text{cell0}} - u_{\text{cell1}}$" src="form_1188.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of component <code>component</code>.</p>
+<p>Return the jump <picture><source srcset="form_1101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{u}=u_{\text{cell0}} - u_{\text{cell1}}$" src="form_1101.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of component <code>component</code>.</p>
 <p>Note that one can define the jump in different ways (the value "there" minus the value "here", or the other way around; both are used in the finite element literature). The definition here uses "value here minus value there", as seen from the first cell.</p>
-<p>If this is a boundary face (<a class="el" href="#href_anchor">at_boundary()</a> returns true), then <picture><source srcset="form_1189_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{u}=u_{\text{cell0}}$" src="form_1189.png"/></picture>, that is "the value here (minus zero)".</p>
+<p>If this is a boundary face (<a class="el" href="#href_anchor">at_boundary()</a> returns true), then <picture><source srcset="form_1102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{u}=u_{\text{cell0}}$" src="form_1102.png"/></picture>, that is "the value here (minus zero)".</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the jump
   (singular) in the values (plural: one or two possible values)
   of the shape function (singular)". </dd></dl>
@@ -1155,9 +1155,9 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>component</em><span class="paramdefsep"> = </span><span class="paramdefval">0</span></span>&#href_anchor"memdoc">
-<p>Return the jump in the gradient <picture><source srcset="form_1190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla u}=\nabla u_{\text{cell0}} -
-\nabla u_{\text{cell1}}$" src="form_1190.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of component <code>component</code>.</p>
-<p>If this is a boundary face (<a class="el" href="#href_anchor">at_boundary()</a> returns true), then <picture><source srcset="form_1191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla u}=\nabla u_{\text{cell0}}$" src="form_1191.png"/></picture>.</p>
+<p>Return the jump in the gradient <picture><source srcset="form_1103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla u}=\nabla u_{\text{cell0}} -
+\nabla u_{\text{cell1}}$" src="form_1103.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of component <code>component</code>.</p>
+<p>If this is a boundary face (<a class="el" href="#href_anchor">at_boundary()</a> returns true), then <picture><source srcset="form_1104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla u}=\nabla u_{\text{cell0}}$" src="form_1104.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the jump
   (singular) in the gradients (plural: one or two possible gradients)
   of the shape function (singular)". </dd></dl>
@@ -1213,9 +1213,9 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>component</em><span class="paramdefsep"> = </span><span class="paramdefval">0</span></span>&#href_anchor"memdoc">
-<p>Return the jump in the Hessian <picture><source srcset="form_1192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla^2 u} = \nabla^2
-u_{\text{cell0}} - \nabla^2 u_{\text{cell1}}$" src="form_1192.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of component <code>component</code>.</p>
-<p>If this is a boundary face (<a class="el" href="#href_anchor">at_boundary()</a> returns true), then <picture><source srcset="form_1193_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla^2 u} = \nabla^2 u_{\text{cell0}}$" src="form_1193.png"/></picture>.</p>
+<p>Return the jump in the Hessian <picture><source srcset="form_1105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla^2 u} = \nabla^2
+u_{\text{cell0}} - \nabla^2 u_{\text{cell1}}$" src="form_1105.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of component <code>component</code>.</p>
+<p>If this is a boundary face (<a class="el" href="#href_anchor">at_boundary()</a> returns true), then <picture><source srcset="form_1106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla^2 u} = \nabla^2 u_{\text{cell0}}$" src="form_1106.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the jump
   (singular) in the Hessians (plural: one or two possible values
   for the derivative) of the shape function (singular)". </dd></dl>
@@ -1271,9 +1271,9 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>component</em><span class="paramdefsep"> = </span><span class="paramdefval">0</span></span>&#href_anchor"memdoc">
-<p>Return the jump in the third derivative <picture><source srcset="form_1150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla^3 u} = \nabla^3
-u_{\text{cell0}} - \nabla^3 u_{\text{cell1}}$" src="form_1150.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of component <code>component</code>.</p>
-<p>If this is a boundary face (<a class="el" href="#href_anchor">at_boundary()</a> returns true), then <picture><source srcset="form_1194_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla^3 u} = \nabla^3 u_{\text{cell0}}$" src="form_1194.png"/></picture>.</p>
+<p>Return the jump in the third derivative <picture><source srcset="form_1091_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla^3 u} = \nabla^3
+u_{\text{cell0}} - \nabla^3 u_{\text{cell1}}$" src="form_1091.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of component <code>component</code>.</p>
+<p>If this is a boundary face (<a class="el" href="#href_anchor">at_boundary()</a> returns true), then <picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla^3 u} = \nabla^3 u_{\text{cell0}}$" src="form_1107.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the jump
   (singular) in the third derivatives (plural: one or two possible values
   for the derivative) of the shape function (singular)". </dd></dl>
@@ -1329,9 +1329,9 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>component</em><span class="paramdefsep"> = </span><span class="paramdefval">0</span></span>&#href_anchor"memdoc">
-<p>Return the average <picture><source srcset="form_1195_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{u}=\frac{1}{2}u_{\text{cell0}} +
-\frac{1}{2}u_{\text{cell1}}$" src="form_1195.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of component <code>component</code>.</p>
-<p>If this is a boundary face (<a class="el" href="#href_anchor">at_boundary()</a> returns true), then <picture><source srcset="form_1196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{u}=u_{\text{cell0}}$" src="form_1196.png"/></picture>.</p>
+<p>Return the average <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{u}=\frac{1}{2}u_{\text{cell0}} +
+\frac{1}{2}u_{\text{cell1}}$" src="form_1108.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of component <code>component</code>.</p>
+<p>If this is a boundary face (<a class="el" href="#href_anchor">at_boundary()</a> returns true), then <picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{u}=u_{\text{cell0}}$" src="form_1109.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the average
   (singular) of the values (plural: one or two possible values)
   of the shape function (singular)". </dd></dl>
@@ -1387,9 +1387,9 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>component</em><span class="paramdefsep"> = </span><span class="paramdefval">0</span></span>&#href_anchor"memdoc">
-<p>Return the average of the gradient <picture><source srcset="form_1197_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\nabla u} = \frac{1}{2}\nabla
-u_{\text{cell0}} + \frac{1}{2} \nabla u_{\text{cell1}}$" src="form_1197.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of component <code>component</code>.</p>
-<p>If this is a boundary face (<a class="el" href="#href_anchor">at_boundary()</a> returns true), then <picture><source srcset="form_1198_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\nabla u}=\nabla u_{\text{cell0}}$" src="form_1198.png"/></picture>.</p>
+<p>Return the average of the gradient <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\nabla u} = \frac{1}{2}\nabla
+u_{\text{cell0}} + \frac{1}{2} \nabla u_{\text{cell1}}$" src="form_1110.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of component <code>component</code>.</p>
+<p>If this is a boundary face (<a class="el" href="#href_anchor">at_boundary()</a> returns true), then <picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\nabla u}=\nabla u_{\text{cell0}}$" src="form_1111.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the average
   (singular) of the gradients (plural: one or two possible values
   for the gradient) of the shape function (singular)". </dd></dl>
@@ -1445,10 +1445,10 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>component</em><span class="paramdefsep"> = </span><span class="paramdefval">0</span></span>&#href_anchor"memdoc">
-<p>Return the average of the Hessian <picture><source srcset="form_1163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\nabla^2 u} =
+<p>Return the average of the Hessian <picture><source srcset="form_1094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\nabla^2 u} =
 \frac{1}{2}\nabla^2 u_{\text{cell0}} + \frac{1}{2} \nabla^2
-u_{\text{cell1}}$" src="form_1163.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of component <code>component</code>.</p>
-<p>If this is a boundary face (<a class="el" href="#href_anchor">at_boundary()</a> returns true), then <picture><source srcset="form_1199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\nabla^2 u}=\nabla^2 u_{\text{cell0}}$" src="form_1199.png"/></picture>.</p>
+u_{\text{cell1}}$" src="form_1094.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of component <code>component</code>.</p>
+<p>If this is a boundary face (<a class="el" href="#href_anchor">at_boundary()</a> returns true), then <picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\nabla^2 u}=\nabla^2 u_{\text{cell0}}$" src="form_1112.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the average
   (singular) of the Hessians (plural: one or two possible values
   for the second derivatives) of the shape function (singular)". </dd></dl>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEInterfaceViews_1_1Scalar.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEInterfaceViews_1_1Scalar.html	2024-03-17 21:57:21.263097299 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEInterfaceViews_1_1Scalar.html	2024-03-17 21:57:21.271097347 +0000
@@ -454,7 +454,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classFEInterfaceViews_1_1Base.html">const</a> unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>q_point</em></span>&#href_anchor"memdoc">
-<p>Return the jump <picture><source srcset="form_1147_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{u}=u_1 - u_2$" src="form_1147.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> in the quadrature point <code>q_point</code> of the component selected by this view.</p>
+<p>Return the jump <picture><source srcset="form_1088_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{u}=u_1 - u_2$" src="form_1088.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> in the quadrature point <code>q_point</code> of the component selected by this view.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the jump
   (singular) in the values (plural: one or two possible values) of
   the shape function (singular)". </dd></dl>
@@ -500,7 +500,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classFEInterfaceViews_1_1Base.html">const</a> unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>q_point</em></span>&#href_anchor"memdoc">
-<p>Return the jump of the gradient <picture><source srcset="form_1148_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{nabla u}$" src="form_1148.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> in the quadrature point <code>q_point</code> of the component selected by this view.</p>
+<p>Return the jump of the gradient <picture><source srcset="form_1089_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{nabla u}$" src="form_1089.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> in the quadrature point <code>q_point</code> of the component selected by this view.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the jump
   (singular) in the gradients (plural: one or two possible gradients)
   of the shape function (singular)". </dd></dl>
@@ -546,8 +546,8 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classFEInterfaceViews_1_1Base.html">const</a> unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>q_point</em></span>&#href_anchor"memdoc">
-<p>Return the jump in the gradient <picture><source srcset="form_1149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla u}=\nabla u_{\text{cell0}}
-- \nabla u_{\text{cell1}}$" src="form_1149.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of the component selected by this view.</p>
+<p>Return the jump in the gradient <picture><source srcset="form_1090_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla u}=\nabla u_{\text{cell0}}
+- \nabla u_{\text{cell1}}$" src="form_1090.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of the component selected by this view.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the jump
   (singular) in the Hessians (plural: one or two possible values
   for the second derivative) of the shape function (singular)". </dd></dl>
@@ -593,8 +593,8 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classFEInterfaceViews_1_1Base.html">const</a> unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>q_point</em></span>&#href_anchor"memdoc">
-<p>Return the jump in the third derivative <picture><source srcset="form_1150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla^3 u} = \nabla^3
-u_{\text{cell0}} - \nabla^3 u_{\text{cell1}}$" src="form_1150.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of the component selected by this view.</p>
+<p>Return the jump in the third derivative <picture><source srcset="form_1091_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla^3 u} = \nabla^3
+u_{\text{cell0}} - \nabla^3 u_{\text{cell1}}$" src="form_1091.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of the component selected by this view.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the jump
   (singular) in the third derivatives (plural: one or two possible values
   for the third derivative) of the shape function (singular)". </dd></dl>
@@ -640,7 +640,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classFEInterfaceViews_1_1Base.html">const</a> unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>q_point</em></span>&#href_anchor"memdoc">
-<p>Return the average value <picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{u}=\frac{1}{2}(u_1 + u_2)$" src="form_1161.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> in the quadrature point <code>q_point</code> of the component selected by this view.</p>
+<p>Return the average value <picture><source srcset="form_1092_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{u}=\frac{1}{2}(u_1 + u_2)$" src="form_1092.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> in the quadrature point <code>q_point</code> of the component selected by this view.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the average
   (singular) of the values (plural: one or two possible values) of
   the shape function (singular)". </dd></dl>
@@ -708,7 +708,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classFEInterfaceViews_1_1Base.html">const</a> unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>q_point</em></span>&#href_anchor"memdoc">
-<p>Return the average of the gradient <picture><source srcset="form_1162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\nabla u}$" src="form_1162.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> in the quadrature point <code>q_point</code> of the component selected by this view.</p>
+<p>Return the average of the gradient <picture><source srcset="form_1093_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\nabla u}$" src="form_1093.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> in the quadrature point <code>q_point</code> of the component selected by this view.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the average
   (singular) of the gradients (plural: one or two possible values of
   the derivative) of the shape function (singular)". </dd></dl>
@@ -754,9 +754,9 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classFEInterfaceViews_1_1Base.html">const</a> unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>q_point</em></span>&#href_anchor"memdoc">
-<p>Return the average of the Hessian <picture><source srcset="form_1163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\nabla^2 u} =
+<p>Return the average of the Hessian <picture><source srcset="form_1094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\nabla^2 u} =
 \frac{1}{2}\nabla^2 u_{\text{cell0}} + \frac{1}{2} \nabla^2
-u_{\text{cell1}}$" src="form_1163.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of the component selected by this view.</p>
+u_{\text{cell1}}$" src="form_1094.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of the component selected by this view.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the average
   (singular) in the Hessians (plural: one or two possible values of
   the second derivative) of the shape function (singular)". </dd></dl>
@@ -811,7 +811,7 @@
           <td class="paramtype">std::vector&lt; <a class="el" href="#href_anchor">solution_value_type</a>&lt; <a class="el" href="classFEInterfaceViews_1_1Base.html">typename</a> InputVector::value_type &gt; &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>values</em></span>&#href_anchor"memdoc">
 <p>Return the values of the selected scalar component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell interface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object was called.</p>
 <p>The argument <code>here_or_there</code> selects between the value on cell 0 (here, <code>true</code>) and cell 1 (there, <code>false</code>). You can also interpret it as "upstream" (<code>true</code>) and "downstream" (<code>false</code>) as defined by the direction of the normal vector in this quadrature point. If <code>here_or_there</code> is true, the values from the first cell of the interface is used.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -878,7 +878,7 @@
           <td></td>
           <td class="paramtype">std::vector&lt; <a class="el" href="#href_anchor">solution_value_type</a>&lt; <a class="el" href="classFEInterfaceViews_1_1Base.html">typename</a> InputVector::value_type &gt; &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>values</em></span>&#href_anchor"memdoc">
 <p>Return the jump in the values of the selected scalar component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell interface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object was called.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -926,7 +926,7 @@
           <td></td>
           <td class="paramtype">std::vector&lt; <a class="el" href="#href_anchor">solution_gradient_type</a>&lt; <a class="el" href="classFEInterfaceViews_1_1Base.html">typename</a> InputVector::value_type &gt; &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>gradients</em></span>&#href_anchor"memdoc">
 <p>Return the jump in the gradients of the selected scalar components of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell interface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object was called.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the gradients of shape functions (i.e., <code>gradient_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the gradients of shape functions (i.e., <code>gradient_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -974,7 +974,7 @@
           <td></td>
           <td class="paramtype">std::vector&lt; <a class="el" href="#href_anchor">solution_hessian_type</a>&lt; <a class="el" href="classFEInterfaceViews_1_1Base.html">typename</a> InputVector::value_type &gt; &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>hessians</em></span>&#href_anchor"memdoc">
 <p>Return the jump in the Hessians of the selected scalar component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object was called.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the Hessians of shape functions (i.e., <code>hessian_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the Hessians of shape functions (i.e., <code>hessian_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -1022,7 +1022,7 @@
           <td></td>
           <td class="paramtype">std::vector&lt; <a class="el" href="#href_anchor">solution_third_derivative_type</a>&lt; <a class="el" href="classFEInterfaceViews_1_1Base.html">typename</a> InputVector::value_type &gt; &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>third_derivatives</em></span>&#href_anchor"memdoc">
 <p>Return the jump in the third derivatives of the selected scalar component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object was called.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the third derivatives of shape functions (i.e., <code>third_derivative_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the third derivatives of shape functions (i.e., <code>third_derivative_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_third_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -1070,7 +1070,7 @@
           <td></td>
           <td class="paramtype">std::vector&lt; <a class="el" href="#href_anchor">solution_value_type</a>&lt; <a class="el" href="classFEInterfaceViews_1_1Base.html">typename</a> InputVector::value_type &gt; &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>values</em></span>&#href_anchor"memdoc">
 <p>Return the average of the values of the selected scalar component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell interface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object was called.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -1118,7 +1118,7 @@
           <td></td>
           <td class="paramtype">std::vector&lt; <a class="el" href="#href_anchor">solution_gradient_type</a>&lt; <a class="el" href="classFEInterfaceViews_1_1Base.html">typename</a> InputVector::value_type &gt; &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>gradients</em></span>&#href_anchor"memdoc">
 <p>Return the average of the gradients of the selected scalar components of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell interface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object was called.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the gradients of shape functions (i.e., <code>gradient_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the gradients of shape functions (i.e., <code>gradient_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -1166,7 +1166,7 @@
           <td></td>
           <td class="paramtype">std::vector&lt; <a class="el" href="#href_anchor">solution_hessian_type</a>&lt; <a class="el" href="classFEInterfaceViews_1_1Base.html">typename</a> InputVector::value_type &gt; &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>hessians</em></span>&#href_anchor"memdoc">
 <p>Return the average of the Hessians of the selected scalar component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object was called.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the Hessians of shape functions (i.e., <code>hessian_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the Hessians of shape functions (i.e., <code>hessian_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEInterfaceViews_1_1Vector.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEInterfaceViews_1_1Vector.html	2024-03-17 21:57:21.339097768 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEInterfaceViews_1_1Vector.html	2024-03-17 21:57:21.339097768 +0000
@@ -455,7 +455,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classFEInterfaceViews_1_1Base.html">const</a> unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>q_point</em></span>&#href_anchor"memdoc">
-<p>Return the jump vector <picture><source srcset="form_1183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\mathbf{u}]=\mathbf{u_1} - \mathbf{u_2}$" src="form_1183.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> in the quadrature point <code>q_point</code>.</p>
+<p>Return the jump vector <picture><source srcset="form_1095_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\mathbf{u}]=\mathbf{u_1} - \mathbf{u_2}$" src="form_1095.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> in the quadrature point <code>q_point</code>.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the jump
   (singular) in the values (plural: one or two possible values) of
   the shape function (singular)". </dd></dl>
@@ -501,8 +501,8 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classFEInterfaceViews_1_1Base.html">const</a> unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>q_point</em></span>&#href_anchor"memdoc">
-<p>Return the jump of the gradient (a tensor of rank 2) <picture><source srcset="form_1184_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla
-\mathbf{u}}$" src="form_1184.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> in the quadrature point <code>q_point</code>.</p>
+<p>Return the jump of the gradient (a tensor of rank 2) <picture><source srcset="form_1096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla
+\mathbf{u}}$" src="form_1096.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> in the quadrature point <code>q_point</code>.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the jump
   (singular) in the gradients (plural: one or two possible gradients)
   of the shape function (singular)". </dd></dl>
@@ -548,8 +548,8 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classFEInterfaceViews_1_1Base.html">const</a> unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>q_point</em></span>&#href_anchor"memdoc">
-<p>Return the jump in the gradient <picture><source srcset="form_1149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla u}=\nabla u_{\text{cell0}}
-- \nabla u_{\text{cell1}}$" src="form_1149.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of the component selected by this view.</p>
+<p>Return the jump in the gradient <picture><source srcset="form_1090_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla u}=\nabla u_{\text{cell0}}
+- \nabla u_{\text{cell1}}$" src="form_1090.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of the component selected by this view.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the jump
   (singular) in the Hessians (plural: one or two possible values
   for the second derivative) of the shape function (singular)". </dd></dl>
@@ -595,8 +595,8 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classFEInterfaceViews_1_1Base.html">const</a> unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>q_point</em></span>&#href_anchor"memdoc">
-<p>Return the jump in the third derivative <picture><source srcset="form_1150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla^3 u} = \nabla^3
-u_{\text{cell0}} - \nabla^3 u_{\text{cell1}}$" src="form_1150.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of the component selected by this view.</p>
+<p>Return the jump in the third derivative <picture><source srcset="form_1091_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{\nabla^3 u} = \nabla^3
+u_{\text{cell0}} - \nabla^3 u_{\text{cell1}}$" src="form_1091.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of the component selected by this view.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the jump
   (singular) in the third derivatives (plural: one or two possible values
   for the third derivative) of the shape function (singular)". </dd></dl>
@@ -642,8 +642,8 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classFEInterfaceViews_1_1Base.html">const</a> unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>q_point</em></span>&#href_anchor"memdoc">
-<p>Return the average vector <picture><source srcset="form_1185_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\mathbf{u}}=\frac{1}{2}(\mathbf{u_1}
-+ \mathbf{u_2})$" src="form_1185.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> in the quadrature point <code>q_point</code>.</p>
+<p>Return the average vector <picture><source srcset="form_1097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\mathbf{u}}=\frac{1}{2}(\mathbf{u_1}
++ \mathbf{u_2})$" src="form_1097.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> in the quadrature point <code>q_point</code>.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the average
   (singular) of the values (plural: one or two possible values) of
   the shape function (singular)". </dd></dl>
@@ -689,8 +689,8 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classFEInterfaceViews_1_1Base.html">const</a> unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>q_point</em></span>&#href_anchor"memdoc">
-<p>Return the average of the gradient (a tensor of rank 2) <picture><source srcset="form_1186_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\nabla
-\mathbf{u}}$" src="form_1186.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> in the quadrature point <code>q_point</code>.</p>
+<p>Return the average of the gradient (a tensor of rank 2) <picture><source srcset="form_1098_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\nabla
+\mathbf{u}}$" src="form_1098.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> in the quadrature point <code>q_point</code>.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the average
   (singular) of the gradients (plural: one or two possible values
   of the derivative) of the shape function (singular)". </dd></dl>
@@ -736,9 +736,9 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classFEInterfaceViews_1_1Base.html">const</a> unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>q_point</em></span>&#href_anchor"memdoc">
-<p>Return the average of the Hessian <picture><source srcset="form_1163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\nabla^2 u} =
+<p>Return the average of the Hessian <picture><source srcset="form_1094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{\nabla^2 u} =
 \frac{1}{2}\nabla^2 u_{\text{cell0}} + \frac{1}{2} \nabla^2
-u_{\text{cell1}}$" src="form_1163.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of the component selected by this view.</p>
+u_{\text{cell1}}$" src="form_1094.png"/></picture> on the interface for the shape function <code>interface_dof_index</code> at the quadrature point <code>q_point</code> of the component selected by this view.</p>
 <dl class="section note"><dt>Note</dt><dd>The name of the function is supposed to be read as "the average
   (singular) in the Hessians (plural: one or two possible values of
   the second derivative) of the shape function (singular)". </dd></dl>
@@ -796,7 +796,7 @@
 </div><div class="memdoc">
 <p>Return the values of the selected vector component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell interface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object was called.</p>
 <p>The argument <code>here_or_there</code> selects between the value on cell 0 (here, <code>true</code>) and cell 1 (there, <code>false</code>). You can also interpret it as "upstream" (<code>true</code>) and "downstream" (<code>false</code>) as defined by the direction of the normal vector in this quadrature point. If <code>here_or_there</code> is true, the values from the first cell of the interface is used.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -869,7 +869,7 @@
       </table>
 </div><div class="memdoc">
 <p>Return the jump in the values of the selected vector component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell interface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object was called.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -923,7 +923,7 @@
       </table>
 </div><div class="memdoc">
 <p>Return the jump in the gradients of the selected vector components of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell interface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object was called.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the gradients of shape functions (i.e., <code>gradient_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the gradients of shape functions (i.e., <code>gradient_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -977,7 +977,7 @@
       </table>
 </div><div class="memdoc">
 <p>Return the jump in the Hessians of the selected vector component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object was called.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the Hessians of shape functions (i.e., <code>hessian_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the Hessians of shape functions (i.e., <code>hessian_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -1031,7 +1031,7 @@
       </table>
 </div><div class="memdoc">
 <p>Return the jump in the third derivatives of the selected vector component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object was called.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the third derivatives of shape functions (i.e., <code>third_derivative_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the third derivatives of shape functions (i.e., <code>third_derivative_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_third_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -1085,7 +1085,7 @@
       </table>
 </div><div class="memdoc">
 <p>Return the average of the values of the selected vector component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell interface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object was called.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -1139,7 +1139,7 @@
       </table>
 </div><div class="memdoc">
 <p>Return the average of the gradients of the selected vector components of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell interface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object was called.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the gradients of shape functions (i.e., <code>gradient_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the gradients of shape functions (i.e., <code>gradient_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -1193,7 +1193,7 @@
       </table>
 </div><div class="memdoc">
 <p>Return the average of the Hessians of the selected vector component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object was called.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the Hessians of shape functions (i.e., <code>hessian_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the Hessians of shape functions (i.e., <code>hessian_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFESeries_1_1Fourier.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFESeries_1_1Fourier.html	2024-03-17 21:57:21.375097990 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFESeries_1_1Fourier.html	2024-03-17 21:57:21.383098040 +0000
@@ -199,25 +199,25 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim&gt;<br />
-class FESeries::Fourier&lt; dim, spacedim &gt;</div><p>A class to calculate expansion of a scalar FE (or a single component of vector-valued FE) field into <a class="el" href="classFESeries_1_1Fourier.html">Fourier</a> series on a reference element. The exponential form of the <a class="el" href="classFESeries_1_1Fourier.html">Fourier</a> series is based on completeness and Hermitian orthogonality of the set of exponential functions <picture><source srcset="form_1151_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \phi_{\bf k}({\bf x}) = \exp(2 \pi i\, {\bf k} \cdot {\bf x})$" src="form_1151.png"/></picture>. For example in 1d the L2-orthogonality condition reads  </p><p class="formulaDsp">
-<picture><source srcset="form_1152_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+class FESeries::Fourier&lt; dim, spacedim &gt;</div><p>A class to calculate expansion of a scalar FE (or a single component of vector-valued FE) field into <a class="el" href="classFESeries_1_1Fourier.html">Fourier</a> series on a reference element. The exponential form of the <a class="el" href="classFESeries_1_1Fourier.html">Fourier</a> series is based on completeness and Hermitian orthogonality of the set of exponential functions <picture><source srcset="form_1175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \phi_{\bf k}({\bf x}) = \exp(2 \pi i\, {\bf k} \cdot {\bf x})$" src="form_1175.png"/></picture>. For example in 1d the L2-orthogonality condition reads  </p><p class="formulaDsp">
+<picture><source srcset="form_1176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \int_0^1 \phi_k(x) \phi_l^\ast(x) dx=\delta_{kl}.
-\]" src="form_1152.png"/></picture>
+\]" src="form_1176.png"/></picture>
 </p>
-<p> Note that <picture><source srcset="form_1153_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \phi_{\bf k} = \phi_{-\bf k}^\ast $" src="form_1153.png"/></picture>.</p>
+<p> Note that <picture><source srcset="form_1177_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \phi_{\bf k} = \phi_{-\bf k}^\ast $" src="form_1177.png"/></picture>.</p>
 <p>The arbitrary scalar FE field on the reference element can be expanded in the complete orthogonal exponential basis as  </p><p class="formulaDsp">
-<picture><source srcset="form_1154_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1178_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    u({\bf x})
    = \sum_{\bf k} c_{\bf k} \phi_{\bf k}({\bf x}).
-\]" src="form_1154.png"/></picture>
+\]" src="form_1178.png"/></picture>
 </p>
 <p> From the orthogonality property of the basis, it follows that  </p><p class="formulaDsp">
-<picture><source srcset="form_1155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1179_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    c_{\bf k} =
    \int_{[0,1]^d} u({\bf x}) \phi_{\bf k}^\ast ({\bf x}) d{\bf x}\,.
-\]" src="form_1155.png"/></picture>
+\]" src="form_1179.png"/></picture>
 </p>
-<p> It is this complex-valued expansion coefficients, that are calculated by this class. Note that <picture><source srcset="form_1156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ u({\bf x}) = \sum_i u_i N_i({\bf x})$" src="form_1156.png"/></picture>, where <picture><source srcset="form_1157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ N_i({\bf x}) $" src="form_1157.png"/></picture> are real-valued <a class="el" href="classFiniteElement.html">FiniteElement</a> shape functions. Consequently <picture><source srcset="form_1158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ c_{\bf k} \equiv c_{-\bf k}^\ast $" src="form_1158.png"/></picture> and we only need to compute <picture><source srcset="form_1159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ c_{\bf k} $" src="form_1159.png"/></picture> for positive indices <picture><source srcset="form_1160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \bf k $" src="form_1160.png"/></picture> . </p>
+<p> It is this complex-valued expansion coefficients, that are calculated by this class. Note that <picture><source srcset="form_1180_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ u({\bf x}) = \sum_i u_i N_i({\bf x})$" src="form_1180.png"/></picture>, where <picture><source srcset="form_1181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ N_i({\bf x}) $" src="form_1181.png"/></picture> are real-valued <a class="el" href="classFiniteElement.html">FiniteElement</a> shape functions. Consequently <picture><source srcset="form_1182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ c_{\bf k} \equiv c_{-\bf k}^\ast $" src="form_1182.png"/></picture> and we only need to compute <picture><source srcset="form_1183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ c_{\bf k} $" src="form_1183.png"/></picture> for positive indices <picture><source srcset="form_1184_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \bf k $" src="form_1184.png"/></picture> . </p>
 
 <p class="definition">Definition at line <a class="el" href="fe__series_8h_source.html#href_anchor">90</a> of file <a class="el" href="fe__series_8h_source.html">fe_series.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
@@ -822,7 +822,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Angular frequencies <picture><source srcset="form_1178_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ 2 \pi {\bf k} $" src="form_1178.png"/></picture> . </p>
+<p>Angular frequencies <picture><source srcset="form_1197_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ 2 \pi {\bf k} $" src="form_1197.png"/></picture> . </p>
 
 <p class="definition">Definition at line <a class="el" href="fe__series_8h_source.html#href_anchor">196</a> of file <a class="el" href="fe__series_8h_source.html">fe_series.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classFESeries_1_1Legendre.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFESeries_1_1Legendre.html	2024-03-17 21:57:21.427098311 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFESeries_1_1Legendre.html	2024-03-17 21:57:21.423098286 +0000
@@ -196,39 +196,39 @@
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim&gt;<br />
 class FESeries::Legendre&lt; dim, spacedim &gt;</div><p>A class to calculate expansion of a scalar FE (or a single component of vector-valued FE) field into series of <a class="el" href="classFESeries_1_1Legendre.html">Legendre</a> functions on a reference element.</p>
 <p><a class="el" href="classFESeries_1_1Legendre.html">Legendre</a> functions are solutions to <a class="el" href="classFESeries_1_1Legendre.html">Legendre</a>'s differential equation  </p><p class="formulaDsp">
-<picture><source srcset="form_1164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1185_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \frac{d}{dx}\left([1-x^2] \frac{d}{dx} P_n(x)\right) +
    n[n+1] P_n(x) = 0
-\]" src="form_1164.png"/></picture>
+\]" src="form_1185.png"/></picture>
 </p>
 <p> and can be expressed using Rodrigues' formula  </p><p class="formulaDsp">
-<picture><source srcset="form_1165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1186_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    P_n(x) = \frac{1}{2^n n!} \frac{d^n}{dx^n}[x^2-1]^n.
-\]" src="form_1165.png"/></picture>
+\]" src="form_1186.png"/></picture>
 </p>
-<p> These polynomials are orthogonal with respect to the <picture><source srcset="form_1166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ L^2 $" src="form_1166.png"/></picture> inner product on the interval <picture><source srcset="form_1167_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ [-1;1] $" src="form_1167.png"/></picture>  </p><p class="formulaDsp">
-<picture><source srcset="form_1168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> These polynomials are orthogonal with respect to the <picture><source srcset="form_1187_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ L^2 $" src="form_1187.png"/></picture> inner product on the interval <picture><source srcset="form_1188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ [-1;1] $" src="form_1188.png"/></picture>  </p><p class="formulaDsp">
+<picture><source srcset="form_1189_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \int_{-1}^1 P_m(x) P_n(x) = \frac{2}{2n + 1} \delta_{mn}
-\]" src="form_1168.png"/></picture>
+\]" src="form_1189.png"/></picture>
 </p>
-<p> and are complete. A family of <picture><source srcset="form_1166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ L^2 $" src="form_1166.png"/></picture>-orthogonal polynomials on <picture><source srcset="form_1169_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ [0;1] $" src="form_1169.png"/></picture> can be constructed via  </p><p class="formulaDsp">
-<picture><source srcset="form_1170_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> and are complete. A family of <picture><source srcset="form_1187_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ L^2 $" src="form_1187.png"/></picture>-orthogonal polynomials on <picture><source srcset="form_1190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ [0;1] $" src="form_1190.png"/></picture> can be constructed via  </p><p class="formulaDsp">
+<picture><source srcset="form_1191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \widetilde P_m = \sqrt{2} P_m(2x-1).
-\]" src="form_1170.png"/></picture>
+\]" src="form_1191.png"/></picture>
 </p>
-<p>An arbitrary scalar FE field on the reference element <picture><source srcset="form_1169_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ [0;1] $" src="form_1169.png"/></picture> can be expanded in the complete orthogonal basis as  </p><p class="formulaDsp">
-<picture><source srcset="form_1171_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>An arbitrary scalar FE field on the reference element <picture><source srcset="form_1190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ [0;1] $" src="form_1190.png"/></picture> can be expanded in the complete orthogonal basis as  </p><p class="formulaDsp">
+<picture><source srcset="form_1192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    u(x)
    = \sum_{m} c_m \widetilde P_{m}(x).
-\]" src="form_1171.png"/></picture>
+\]" src="form_1192.png"/></picture>
 </p>
 <p> From the orthogonality property of the basis, it follows that  </p><p class="formulaDsp">
-<picture><source srcset="form_1172_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1193_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    c_m = \frac{2m+1}{2}
    \int_0^1 u(x) \widetilde P_m(x) dx .
-\]" src="form_1172.png"/></picture>
+\]" src="form_1193.png"/></picture>
 </p>
-<p> This class calculates coefficients <picture><source srcset="form_1159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ c_{\bf k} $" src="form_1159.png"/></picture> using <picture><source srcset="form_1173_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ dim $" src="form_1173.png"/></picture>-dimensional <a class="el" href="classFESeries_1_1Legendre.html">Legendre</a> polynomials constructed from <picture><source srcset="form_1174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \widetilde P_m(x) $" src="form_1174.png"/></picture> using tensor product rule. </p>
+<p> This class calculates coefficients <picture><source srcset="form_1183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ c_{\bf k} $" src="form_1183.png"/></picture> using <picture><source srcset="form_1194_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ dim $" src="form_1194.png"/></picture>-dimensional <a class="el" href="classFESeries_1_1Legendre.html">Legendre</a> polynomials constructed from <picture><source srcset="form_1195_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \widetilde P_m(x) $" src="form_1195.png"/></picture> using tensor product rule. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe__series_8h_source.html#href_anchor">260</a> of file <a class="el" href="fe__series_8h_source.html">fe_series.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFESubfaceValues.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFESubfaceValues.html	2024-03-17 21:57:21.531098954 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFESubfaceValues.html	2024-03-17 21:57:21.531098954 +0000
@@ -959,7 +959,7 @@
 <p>If the shape function is vector-valued, then this returns the only non- zero component. If the shape function has more than one non-zero component (i.e. it is not primitive), then throw an exception of type ExcShapeFunctionNotPrimitive. In that case, use the <a class="el" href="classFEValuesBase.html#href_anchor">shape_value_component()</a> function.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated. Note that this number runs from zero to dofs_per_cell, even in the case of an <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated. Note that this number runs from zero to dofs_per_cell, even in the case of an <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated</td></tr>
   </table>
   </dd>
@@ -1000,7 +1000,7 @@
 <p>Compute one vector component of the value of a shape function at a quadrature point. If the finite element is scalar, then only component zero is allowed and the return value equals that of the <a class="el" href="classFEValuesBase.html#href_anchor">shape_value()</a> function. If the finite element is vector valued but all shape functions are primitive (i.e. they are non-zero in only one component), then the value returned by <a class="el" href="classFEValuesBase.html#href_anchor">shape_value()</a> equals that of this function for exactly one component. This function is therefore only of greater interest if the shape function is not primitive, but then it is necessary since the other function cannot be used.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated.</td></tr>
     <tr><td class="paramname">component</td><td>vector component to be evaluated.</td></tr>
   </table>
@@ -1039,7 +1039,7 @@
 <p>The same holds for the arguments of this function as for the <a class="el" href="classFEValuesBase.html#href_anchor">shape_value()</a> function.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated.</td></tr>
   </table>
   </dd>
@@ -1241,17 +1241,17 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the values of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the <a class="el" href="#href_anchor">reinit()</a> function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1305.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x_q^K)$" src="form_1306.png"/></picture> where <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1307.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and the related <a class="el" href="classFEValuesBase.html#href_anchor">get_function_gradients()</a> function is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
+<p>Return the values of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the <a class="el" href="#href_anchor">reinit()</a> function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1249.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1250_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x_q^K)$" src="form_1250.png"/></picture> where <picture><source srcset="form_1251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1251.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and the related <a class="el" href="classFEValuesBase.html#href_anchor">get_function_gradients()</a> function is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
 <p>If the current cell is not active (i.e., it has children), then the finite element function is, strictly speaking, defined by shape functions that live on these child cells. Rather than evaluating the shape functions on the child cells, with the quadrature points defined on the current cell, this function first interpolates the finite element function to shape functions defined on the current cell, and then evaluates this interpolated function.</p>
 <p>This function may only be used if the finite element in use is a scalar one, i.e. has only one vector component. To get values of multi-component elements, there is another <a class="el" href="classFEValuesBase.html#href_anchor">get_function_values()</a> below, returning a vector of vectors of results.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">values</td><td>The values of the function specified by fe_function at the quadrature points of the current cell. The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the values of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the solution vector.</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">values</td><td>The values of the function specified by fe_function at the quadrature points of the current cell. The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the values of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the solution vector.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> will contain the value of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> will contain the value of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1287,7 +1287,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_values()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> is a vector of values of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>values[q]</code> equals the number of components of the finite element, i.e. <code>values[q](c)</code> returns the value of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> is a vector of values of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>values[q]</code> equals the number of components of the finite element, i.e. <code>values[q](c)</code> returns the value of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3320</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1459,16 +1459,16 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the gradients of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the <a class="el" href="#href_anchor">reinit()</a> function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1305.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(\mathbf x_q^K)$" src="form_1308.png"/></picture> where <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1307.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and it is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
+<p>Return the gradients of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the <a class="el" href="#href_anchor">reinit()</a> function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1249.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(\mathbf x_q^K)$" src="form_1252.png"/></picture> where <picture><source srcset="form_1251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1251.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and it is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
 <p>This function may only be used if the finite element in use is a scalar one, i.e. has only one vector component. There is a corresponding function of the same name for vector-valued finite elements.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradients</td><td>The gradients of the function specified by fe_function at the quadrature points of the current cell. The gradients are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the gradients of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">gradients</td><td>The gradients of the function specified by fe_function at the quadrature points of the current cell. The gradients are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the gradients of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> will contain the gradient of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>gradients[q][d]</code> represents the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> will contain the gradient of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>gradients[q][d]</code> represents the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1504,7 +1504,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_gradients()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> is a vector of gradients of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>gradients[q]</code> equals the number of components of the finite element, i.e. <code>gradients[q][c]</code> returns the gradient of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>gradients[q][c][d]</code> is the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> is a vector of gradients of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>gradients[q]</code> equals the number of components of the finite element, i.e. <code>gradients[q][c]</code> returns the gradient of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>gradients[q][c][d]</code> is the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3463</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1623,11 +1623,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">hessians</td><td>The Hessians of the function specified by fe_function at the quadrature points of the current cell. The Hessians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Hessians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">hessians</td><td>The Hessians of the function specified by fe_function at the quadrature points of the current cell. The Hessians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Hessians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> will contain the Hessian of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>hessians[q][i][j]</code> represents the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture>th component of the matrix of second derivatives at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> will contain the Hessian of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>hessians[q][i][j]</code> represents the <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture>th component of the matrix of second derivatives at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1668,7 +1668,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_hessians()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> is a vector of Hessians of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>hessians[q]</code> equals the number of components of the finite element, i.e. <code>hessians[q][c]</code> returns the Hessian of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>hessians[q][c][i][j]</code> is the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture>th component of the matrix of second derivatives of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> is a vector of Hessians of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>hessians[q]</code> equals the number of components of the finite element, i.e. <code>hessians[q][c]</code> returns the Hessian of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>hessians[q][c][i][j]</code> is the <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture>th component of the matrix of second derivatives of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3576</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1787,11 +1787,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">laplacians</td><td>The Laplacians of the function specified by fe_function at the quadrature points of the current cell. The Laplacians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Laplacians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the input vector.</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">laplacians</td><td>The Laplacians of the function specified by fe_function at the quadrature points of the current cell. The Laplacians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Laplacians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the input vector.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> will contain the Laplacian of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd>
+<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> will contain the Laplacian of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd>
 <dd>
 For each component of the output vector, there holds <code>laplacians[q]=trace(hessians[q])</code>, where <code>hessians</code> would be the output of the <a class="el" href="classFEValuesBase.html#href_anchor">get_function_hessians()</a> function.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
@@ -1829,7 +1829,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_laplacians()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> is a vector of Laplacians of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>laplacians[q]</code> equals the number of components of the finite element, i.e. <code>laplacians[q][c]</code> returns the Laplacian of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd>
+<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> is a vector of Laplacians of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>laplacians[q]</code> equals the number of components of the finite element, i.e. <code>laplacians[q][c]</code> returns the Laplacian of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd>
 <dd>
 For each component of the output vector, there holds <code>laplacians[q][c]=trace(hessians[q][c])</code>, where <code>hessians</code> would be the output of the <a class="el" href="classFEValuesBase.html#href_anchor">get_function_hessians()</a> function.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1992,11 +1992,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">third_derivatives</td><td>The third derivatives of the function specified by fe_function at the quadrature points of the current cell. The third derivatives are computed in real space (as opposed to on the unit cell). The object is assumed to already have the correct size. The data type stored by this output vector must be what you get when you multiply the third derivatives of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">third_derivatives</td><td>The third derivatives of the function specified by fe_function at the quadrature points of the current cell. The third derivatives are computed in real space (as opposed to on the unit cell). The object is assumed to already have the correct size. The data type stored by this output vector must be what you get when you multiply the third derivatives of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> will contain the third derivatives of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>third_derivatives[q][i][j][k]</code> represents the <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1309.png"/></picture>th component of the 3rd order tensor of third derivatives at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> will contain the third derivatives of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>third_derivatives[q][i][j][k]</code> represents the <picture><source srcset="form_1253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1253.png"/></picture>th component of the 3rd order tensor of third derivatives at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_3rd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -2037,7 +2037,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_third_derivatives()</a>, but applied to multi-component (vector- valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> is a vector of third derivatives of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>third_derivatives[q]</code> equals the number of components of the finite element, i.e. <code>third_derivatives[q][c]</code> returns the third derivative of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>third_derivatives[q][c][i][j][k]</code> is the <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1309.png"/></picture>th component of the tensor of third derivatives of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> is a vector of third derivatives of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>third_derivatives[q]</code> equals the number of components of the finite element, i.e. <code>third_derivatives[q][c]</code> returns the third derivative of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>third_derivatives[q][c][i][j][k]</code> is the <picture><source srcset="form_1253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1253.png"/></picture>th component of the tensor of third derivatives of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_3rd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3826</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -2378,7 +2378,7 @@
 </div><div class="memdoc">
 <p>Mapped quadrature weight. If this object refers to a volume evaluation (i.e. the derived class is of type <a class="el" href="classFEValues.html">FEValues</a>), then this is the Jacobi determinant times the weight of the <code>q_point</code>th unit quadrature point.</p>
 <p>For surface evaluations (i.e. classes <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a>), it is the mapped surface element times the weight of the quadrature point.</p>
-<p>You can think of the quantity returned by this function as the volume or surface element <picture><source srcset="form_1310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dx, ds$" src="form_1310.png"/></picture> in the integral that we implement here by quadrature.</p>
+<p>You can think of the quantity returned by this function as the volume or surface element <picture><source srcset="form_1254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dx, ds$" src="form_1254.png"/></picture> in the integral that we implement here by quadrature.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_JxW_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2435,7 +2435,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the Jacobian of the transformation at the specified quadrature point, i.e. <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1289.png"/></picture></p>
+<p>Return the Jacobian of the transformation at the specified quadrature point, i.e. <picture><source srcset="form_1255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1255.png"/></picture></p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2493,7 +2493,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1311_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{jk}/d\hat x_i$" src="form_1311.png"/></picture>.</p>
+<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{jk}/d\hat x_i$" src="form_1256.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_grads</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2551,7 +2551,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, pushed forward to the real cell coordinates, i.e. <picture><source srcset="form_1312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{iJ}/d\hat x_K (J_{jJ})^{-1} (J_{kK})^{-1}$" src="form_1312.png"/></picture>.</p>
+<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, pushed forward to the real cell coordinates, i.e. <picture><source srcset="form_1257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{iJ}/d\hat x_K (J_{jJ})^{-1} (J_{kK})^{-1}$" src="form_1257.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_pushed_forward_grads</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2609,7 +2609,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the third derivative of the transformation from unit to real cell, i.e. the second derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1313_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijkl}=\frac{d^2J_{ij}}{d\hat x_k d\hat x_l}$" src="form_1313.png"/></picture>.</p>
+<p>Return the third derivative of the transformation from unit to real cell, i.e. the second derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijkl}=\frac{d^2J_{ij}}{d\hat x_k d\hat x_l}$" src="form_1258.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_2nd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFESystem.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFESystem.html	2024-03-17 21:57:21.687099917 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFESystem.html	2024-03-17 21:57:21.691099942 +0000
@@ -500,11 +500,11 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim&gt;<br />
-class FESystem&lt; dim, spacedim &gt;</div><p>This class provides an interface to group several elements together into one, vector-valued element. As example, consider the Taylor-Hood element that is used for the solution of the Stokes and Navier-Stokes equations: There, the velocity (of which there are as many components as the dimension <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> of the domain) is discretized with <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements and the pressure with <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements. Mathematically, the finite element space for the coupled problem is then often written as <picture><source srcset="form_1200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h = Q_2^d \times Q_1$" src="form_1200.png"/></picture> where the exponentiation is understood to be the tensor product of spaces &ndash; i.e., in 2d, we have <picture><source srcset="form_1201_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h=Q_2\times Q_2\times Q_1$" src="form_1201.png"/></picture> &ndash; and tensor products lead to vectors where each component of the vector-valued function space corresponds to a scalar function in one of the <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> or <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> spaces. Using the <a class="el" href="classFESystem.html">FESystem</a> class, this space is created using </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFESystem.html">FESystem&lt;dim&gt;</a> taylor_hood_fe (<a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(2)^dim,   <span class="comment">// velocity components</span></div>
+class FESystem&lt; dim, spacedim &gt;</div><p>This class provides an interface to group several elements together into one, vector-valued element. As example, consider the Taylor-Hood element that is used for the solution of the Stokes and Navier-Stokes equations: There, the velocity (of which there are as many components as the dimension <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> of the domain) is discretized with <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements and the pressure with <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements. Mathematically, the finite element space for the coupled problem is then often written as <picture><source srcset="form_1200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h = Q_2^d \times Q_1$" src="form_1200.png"/></picture> where the exponentiation is understood to be the tensor product of spaces &ndash; i.e., in 2d, we have <picture><source srcset="form_1201_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h=Q_2\times Q_2\times Q_1$" src="form_1201.png"/></picture> &ndash; and tensor products lead to vectors where each component of the vector-valued function space corresponds to a scalar function in one of the <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> or <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> spaces. Using the <a class="el" href="classFESystem.html">FESystem</a> class, this space is created using </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFESystem.html">FESystem&lt;dim&gt;</a> taylor_hood_fe (<a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(2)^dim,   <span class="comment">// velocity components</span></div>
 <div class="line">                              <a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(1));      <span class="comment">// pressure component</span></div>
 <div class="ttc" id="aclassFESystem_html"><div class="ttname"><a href="classFESystem.html">FESystem</a></div><div class="ttdef"><b>Definition</b> <a href="fe__system_8h_source.html#href_anchor">fe_system.h:209</a></div></div>
 <div class="ttc" id="aclassFE__Q_html"><div class="ttname"><a href="classFE__Q.html">FE_Q</a></div><div class="ttdef"><b>Definition</b> <a href="fe__q_8h_source.html#href_anchor">fe_q.h:551</a></div></div>
-</div><!-- fragment --><p> The creation of this element here corresponds to taking tensor-product powers of the <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> element in the first line of the list of arguments to the <a class="el" href="classFESystem.html">FESystem</a> constructor, and then concatenation via another tensor product with the element in the second line. This kind of construction is used, for example, in the <a class="el" href="step_22.html">step-22</a> tutorial program.</p>
+</div><!-- fragment --><p> The creation of this element here corresponds to taking tensor-product powers of the <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> element in the first line of the list of arguments to the <a class="el" href="classFESystem.html">FESystem</a> constructor, and then concatenation via another tensor product with the element in the second line. This kind of construction is used, for example, in the <a class="el" href="step_22.html">step-22</a> tutorial program.</p>
 <p>Similarly, <a class="el" href="step_8.html">step-8</a> solves an elasticity equation where we need to solve for the displacement of a solid object. The displacement again has <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> components if the domain is <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-dimensional, and so the combined finite element is created using </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFESystem.html">FESystem&lt;dim&gt;</a> displacement_fe (<a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(1)^dim);</div>
 </div><!-- fragment --><p> where now each (vector) component of the combined element corresponds to a <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> space.</p>
 <p>To the outside world, <a class="el" href="classFESystem.html">FESystem</a> objects look just like a usual finite element object, they just happen to be composed of several other finite elements that are possibly of different type. These "base elements" can themselves have multiple components and, in particular, could also be vector-valued &ndash; for example, if one of the base elements is an <a class="el" href="classFESystem.html">FESystem</a> itself (see also below). An example is given in the documentation of namespace <a class="el" href="namespaceFETools_1_1Compositing.html">FETools::Compositing</a>, when using the "tensor product" strategy.</p>
@@ -3836,7 +3836,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3944,7 +3944,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -4162,9 +4162,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValues.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEValues.html	2024-03-17 21:57:21.799100609 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEValues.html	2024-03-17 21:57:21.803100634 +0000
@@ -743,7 +743,7 @@
 <p>If the shape function is vector-valued, then this returns the only non- zero component. If the shape function has more than one non-zero component (i.e. it is not primitive), then throw an exception of type ExcShapeFunctionNotPrimitive. In that case, use the <a class="el" href="classFEValuesBase.html#href_anchor">shape_value_component()</a> function.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated. Note that this number runs from zero to dofs_per_cell, even in the case of an <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated. Note that this number runs from zero to dofs_per_cell, even in the case of an <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated</td></tr>
   </table>
   </dd>
@@ -784,7 +784,7 @@
 <p>Compute one vector component of the value of a shape function at a quadrature point. If the finite element is scalar, then only component zero is allowed and the return value equals that of the <a class="el" href="classFEValuesBase.html#href_anchor">shape_value()</a> function. If the finite element is vector valued but all shape functions are primitive (i.e. they are non-zero in only one component), then the value returned by <a class="el" href="classFEValuesBase.html#href_anchor">shape_value()</a> equals that of this function for exactly one component. This function is therefore only of greater interest if the shape function is not primitive, but then it is necessary since the other function cannot be used.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated.</td></tr>
     <tr><td class="paramname">component</td><td>vector component to be evaluated.</td></tr>
   </table>
@@ -823,7 +823,7 @@
 <p>The same holds for the arguments of this function as for the <a class="el" href="classFEValuesBase.html#href_anchor">shape_value()</a> function.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated.</td></tr>
   </table>
   </dd>
@@ -1025,17 +1025,17 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the values of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the <a class="el" href="#href_anchor">reinit()</a> function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1305.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x_q^K)$" src="form_1306.png"/></picture> where <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1307.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and the related <a class="el" href="classFEValuesBase.html#href_anchor">get_function_gradients()</a> function is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
+<p>Return the values of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the <a class="el" href="#href_anchor">reinit()</a> function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1249.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1250_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x_q^K)$" src="form_1250.png"/></picture> where <picture><source srcset="form_1251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1251.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and the related <a class="el" href="classFEValuesBase.html#href_anchor">get_function_gradients()</a> function is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
 <p>If the current cell is not active (i.e., it has children), then the finite element function is, strictly speaking, defined by shape functions that live on these child cells. Rather than evaluating the shape functions on the child cells, with the quadrature points defined on the current cell, this function first interpolates the finite element function to shape functions defined on the current cell, and then evaluates this interpolated function.</p>
 <p>This function may only be used if the finite element in use is a scalar one, i.e. has only one vector component. To get values of multi-component elements, there is another <a class="el" href="classFEValuesBase.html#href_anchor">get_function_values()</a> below, returning a vector of vectors of results.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">values</td><td>The values of the function specified by fe_function at the quadrature points of the current cell. The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the values of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the solution vector.</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">values</td><td>The values of the function specified by fe_function at the quadrature points of the current cell. The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the values of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the solution vector.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> will contain the value of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> will contain the value of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1071,7 +1071,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_values()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> is a vector of values of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>values[q]</code> equals the number of components of the finite element, i.e. <code>values[q](c)</code> returns the value of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> is a vector of values of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>values[q]</code> equals the number of components of the finite element, i.e. <code>values[q](c)</code> returns the value of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3320</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1243,16 +1243,16 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the gradients of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the <a class="el" href="#href_anchor">reinit()</a> function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1305.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(\mathbf x_q^K)$" src="form_1308.png"/></picture> where <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1307.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and it is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
+<p>Return the gradients of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the <a class="el" href="#href_anchor">reinit()</a> function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1249.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(\mathbf x_q^K)$" src="form_1252.png"/></picture> where <picture><source srcset="form_1251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1251.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and it is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
 <p>This function may only be used if the finite element in use is a scalar one, i.e. has only one vector component. There is a corresponding function of the same name for vector-valued finite elements.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradients</td><td>The gradients of the function specified by fe_function at the quadrature points of the current cell. The gradients are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the gradients of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">gradients</td><td>The gradients of the function specified by fe_function at the quadrature points of the current cell. The gradients are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the gradients of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> will contain the gradient of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>gradients[q][d]</code> represents the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> will contain the gradient of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>gradients[q][d]</code> represents the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1288,7 +1288,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_gradients()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> is a vector of gradients of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>gradients[q]</code> equals the number of components of the finite element, i.e. <code>gradients[q][c]</code> returns the gradient of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>gradients[q][c][d]</code> is the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> is a vector of gradients of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>gradients[q]</code> equals the number of components of the finite element, i.e. <code>gradients[q][c]</code> returns the gradient of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>gradients[q][c][d]</code> is the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3463</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1407,11 +1407,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">hessians</td><td>The Hessians of the function specified by fe_function at the quadrature points of the current cell. The Hessians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Hessians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">hessians</td><td>The Hessians of the function specified by fe_function at the quadrature points of the current cell. The Hessians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Hessians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> will contain the Hessian of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>hessians[q][i][j]</code> represents the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture>th component of the matrix of second derivatives at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> will contain the Hessian of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>hessians[q][i][j]</code> represents the <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture>th component of the matrix of second derivatives at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1452,7 +1452,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_hessians()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> is a vector of Hessians of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>hessians[q]</code> equals the number of components of the finite element, i.e. <code>hessians[q][c]</code> returns the Hessian of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>hessians[q][c][i][j]</code> is the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture>th component of the matrix of second derivatives of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> is a vector of Hessians of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>hessians[q]</code> equals the number of components of the finite element, i.e. <code>hessians[q][c]</code> returns the Hessian of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>hessians[q][c][i][j]</code> is the <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture>th component of the matrix of second derivatives of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3576</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1571,11 +1571,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">laplacians</td><td>The Laplacians of the function specified by fe_function at the quadrature points of the current cell. The Laplacians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Laplacians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the input vector.</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">laplacians</td><td>The Laplacians of the function specified by fe_function at the quadrature points of the current cell. The Laplacians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Laplacians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the input vector.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> will contain the Laplacian of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd>
+<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> will contain the Laplacian of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd>
 <dd>
 For each component of the output vector, there holds <code>laplacians[q]=trace(hessians[q])</code>, where <code>hessians</code> would be the output of the <a class="el" href="classFEValuesBase.html#href_anchor">get_function_hessians()</a> function.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
@@ -1613,7 +1613,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_laplacians()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> is a vector of Laplacians of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>laplacians[q]</code> equals the number of components of the finite element, i.e. <code>laplacians[q][c]</code> returns the Laplacian of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd>
+<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> is a vector of Laplacians of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>laplacians[q]</code> equals the number of components of the finite element, i.e. <code>laplacians[q][c]</code> returns the Laplacian of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd>
 <dd>
 For each component of the output vector, there holds <code>laplacians[q][c]=trace(hessians[q][c])</code>, where <code>hessians</code> would be the output of the <a class="el" href="classFEValuesBase.html#href_anchor">get_function_hessians()</a> function.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1776,11 +1776,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">third_derivatives</td><td>The third derivatives of the function specified by fe_function at the quadrature points of the current cell. The third derivatives are computed in real space (as opposed to on the unit cell). The object is assumed to already have the correct size. The data type stored by this output vector must be what you get when you multiply the third derivatives of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">third_derivatives</td><td>The third derivatives of the function specified by fe_function at the quadrature points of the current cell. The third derivatives are computed in real space (as opposed to on the unit cell). The object is assumed to already have the correct size. The data type stored by this output vector must be what you get when you multiply the third derivatives of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> will contain the third derivatives of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>third_derivatives[q][i][j][k]</code> represents the <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1309.png"/></picture>th component of the 3rd order tensor of third derivatives at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> will contain the third derivatives of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>third_derivatives[q][i][j][k]</code> represents the <picture><source srcset="form_1253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1253.png"/></picture>th component of the 3rd order tensor of third derivatives at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_3rd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1821,7 +1821,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_third_derivatives()</a>, but applied to multi-component (vector- valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> is a vector of third derivatives of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>third_derivatives[q]</code> equals the number of components of the finite element, i.e. <code>third_derivatives[q][c]</code> returns the third derivative of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>third_derivatives[q][c][i][j][k]</code> is the <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1309.png"/></picture>th component of the tensor of third derivatives of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> is a vector of third derivatives of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>third_derivatives[q]</code> equals the number of components of the finite element, i.e. <code>third_derivatives[q][c]</code> returns the third derivative of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>third_derivatives[q][c][i][j][k]</code> is the <picture><source srcset="form_1253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1253.png"/></picture>th component of the tensor of third derivatives of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_3rd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3826</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -2162,7 +2162,7 @@
 </div><div class="memdoc">
 <p>Mapped quadrature weight. If this object refers to a volume evaluation (i.e. the derived class is of type <a class="el" href="classFEValues.html">FEValues</a>), then this is the Jacobi determinant times the weight of the <code>q_point</code>th unit quadrature point.</p>
 <p>For surface evaluations (i.e. classes <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a>), it is the mapped surface element times the weight of the quadrature point.</p>
-<p>You can think of the quantity returned by this function as the volume or surface element <picture><source srcset="form_1310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dx, ds$" src="form_1310.png"/></picture> in the integral that we implement here by quadrature.</p>
+<p>You can think of the quantity returned by this function as the volume or surface element <picture><source srcset="form_1254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dx, ds$" src="form_1254.png"/></picture> in the integral that we implement here by quadrature.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_JxW_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2219,7 +2219,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the Jacobian of the transformation at the specified quadrature point, i.e. <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1289.png"/></picture></p>
+<p>Return the Jacobian of the transformation at the specified quadrature point, i.e. <picture><source srcset="form_1255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1255.png"/></picture></p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2277,7 +2277,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1311_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{jk}/d\hat x_i$" src="form_1311.png"/></picture>.</p>
+<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{jk}/d\hat x_i$" src="form_1256.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_grads</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2335,7 +2335,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, pushed forward to the real cell coordinates, i.e. <picture><source srcset="form_1312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{iJ}/d\hat x_K (J_{jJ})^{-1} (J_{kK})^{-1}$" src="form_1312.png"/></picture>.</p>
+<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, pushed forward to the real cell coordinates, i.e. <picture><source srcset="form_1257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{iJ}/d\hat x_K (J_{jJ})^{-1} (J_{kK})^{-1}$" src="form_1257.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_pushed_forward_grads</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2393,7 +2393,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the third derivative of the transformation from unit to real cell, i.e. the second derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1313_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijkl}=\frac{d^2J_{ij}}{d\hat x_k d\hat x_l}$" src="form_1313.png"/></picture>.</p>
+<p>Return the third derivative of the transformation from unit to real cell, i.e. the second derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijkl}=\frac{d^2J_{ij}}{d\hat x_k d\hat x_l}$" src="form_1258.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_2nd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesBase.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesBase.html	2024-03-17 21:57:21.903101252 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesBase.html	2024-03-17 21:57:21.907101277 +0000
@@ -614,7 +614,7 @@
 <p>If the shape function is vector-valued, then this returns the only non- zero component. If the shape function has more than one non-zero component (i.e. it is not primitive), then throw an exception of type ExcShapeFunctionNotPrimitive. In that case, use the <a class="el" href="#href_anchor">shape_value_component()</a> function.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated. Note that this number runs from zero to dofs_per_cell, even in the case of an <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated. Note that this number runs from zero to dofs_per_cell, even in the case of an <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated</td></tr>
   </table>
   </dd>
@@ -648,7 +648,7 @@
 <p>Compute one vector component of the value of a shape function at a quadrature point. If the finite element is scalar, then only component zero is allowed and the return value equals that of the <a class="el" href="#href_anchor">shape_value()</a> function. If the finite element is vector valued but all shape functions are primitive (i.e. they are non-zero in only one component), then the value returned by <a class="el" href="#href_anchor">shape_value()</a> equals that of this function for exactly one component. This function is therefore only of greater interest if the shape function is not primitive, but then it is necessary since the other function cannot be used.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated.</td></tr>
     <tr><td class="paramname">component</td><td>vector component to be evaluated.</td></tr>
   </table>
@@ -680,7 +680,7 @@
 <p>The same holds for the arguments of this function as for the <a class="el" href="#href_anchor">shape_value()</a> function.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated.</td></tr>
   </table>
   </dd>
@@ -840,17 +840,17 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">std::vector&lt; typename InputVector::value_type &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>values</em></span>&#href_anchor"memdoc">
-<p>Return the values of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the reinit() function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1305.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x_q^K)$" src="form_1306.png"/></picture> where <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1307.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and the related <a class="el" href="#href_anchor">get_function_gradients()</a> function is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
+<p>Return the values of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the reinit() function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1249.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1250_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x_q^K)$" src="form_1250.png"/></picture> where <picture><source srcset="form_1251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1251.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and the related <a class="el" href="#href_anchor">get_function_gradients()</a> function is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
 <p>If the current cell is not active (i.e., it has children), then the finite element function is, strictly speaking, defined by shape functions that live on these child cells. Rather than evaluating the shape functions on the child cells, with the quadrature points defined on the current cell, this function first interpolates the finite element function to shape functions defined on the current cell, and then evaluates this interpolated function.</p>
 <p>This function may only be used if the finite element in use is a scalar one, i.e. has only one vector component. To get values of multi-component elements, there is another <a class="el" href="#href_anchor">get_function_values()</a> below, returning a vector of vectors of results.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">values</td><td>The values of the function specified by fe_function at the quadrature points of the current cell. The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the values of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the solution vector.</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">values</td><td>The values of the function specified by fe_function at the quadrature points of the current cell. The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the values of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the solution vector.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> will contain the value of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> will contain the value of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -879,7 +879,7 @@
           <td></td>
           <td class="paramtype">std::vector&lt; <a class="el" href="classVector.html">Vector</a>&lt; typename InputVector::value_type &gt; &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>values</em></span>&#href_anchor"memdoc">
 <p>This function does the same as the other <a class="el" href="#href_anchor">get_function_values()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> is a vector of values of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>values[q]</code> equals the number of components of the finite element, i.e. <code>values[q](c)</code> returns the value of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> is a vector of values of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>values[q]</code> equals the number of components of the finite element, i.e. <code>values[q](c)</code> returns the value of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3320</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1022,16 +1022,16 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">std::vector&lt; <a class="el" href="classTensor.html">Tensor</a>&lt; 1, spacedim, typename InputVector::value_type &gt; &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>gradients</em></span>&#href_anchor"memdoc">
-<p>Return the gradients of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the reinit() function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1305.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(\mathbf x_q^K)$" src="form_1308.png"/></picture> where <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1307.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and it is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
+<p>Return the gradients of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the reinit() function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1249.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(\mathbf x_q^K)$" src="form_1252.png"/></picture> where <picture><source srcset="form_1251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1251.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and it is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
 <p>This function may only be used if the finite element in use is a scalar one, i.e. has only one vector component. There is a corresponding function of the same name for vector-valued finite elements.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradients</td><td>The gradients of the function specified by fe_function at the quadrature points of the current cell. The gradients are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the gradients of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">gradients</td><td>The gradients of the function specified by fe_function at the quadrature points of the current cell. The gradients are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the gradients of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> will contain the gradient of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>gradients[q][d]</code> represents the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> will contain the gradient of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>gradients[q][d]</code> represents the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1060,7 +1060,7 @@
           <td></td>
           <td class="paramtype">std::vector&lt; std::vector&lt; <a class="el" href="classTensor.html">Tensor</a>&lt; 1, spacedim, typename InputVector::value_type &gt; &gt; &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>gradients</em></span>&#href_anchor"memdoc">
 <p>This function does the same as the other <a class="el" href="#href_anchor">get_function_gradients()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> is a vector of gradients of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>gradients[q]</code> equals the number of components of the finite element, i.e. <code>gradients[q][c]</code> returns the gradient of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>gradients[q][c][d]</code> is the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> is a vector of gradients of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>gradients[q]</code> equals the number of components of the finite element, i.e. <code>gradients[q][c]</code> returns the gradient of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>gradients[q][c][d]</code> is the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3463</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1158,11 +1158,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">hessians</td><td>The Hessians of the function specified by fe_function at the quadrature points of the current cell. The Hessians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Hessians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">hessians</td><td>The Hessians of the function specified by fe_function at the quadrature points of the current cell. The Hessians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Hessians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> will contain the Hessian of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>hessians[q][i][j]</code> represents the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture>th component of the matrix of second derivatives at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> will contain the Hessian of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>hessians[q][i][j]</code> represents the <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture>th component of the matrix of second derivatives at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1196,7 +1196,7 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>quadrature_points_fastest</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
 <p>This function does the same as the other <a class="el" href="#href_anchor">get_function_hessians()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> is a vector of Hessians of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>hessians[q]</code> equals the number of components of the finite element, i.e. <code>hessians[q][c]</code> returns the Hessian of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>hessians[q][c][i][j]</code> is the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture>th component of the matrix of second derivatives of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> is a vector of Hessians of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>hessians[q]</code> equals the number of components of the finite element, i.e. <code>hessians[q][c]</code> returns the Hessian of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>hessians[q][c][i][j]</code> is the <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture>th component of the matrix of second derivatives of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3576</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1294,11 +1294,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">laplacians</td><td>The Laplacians of the function specified by fe_function at the quadrature points of the current cell. The Laplacians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Laplacians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the input vector.</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">laplacians</td><td>The Laplacians of the function specified by fe_function at the quadrature points of the current cell. The Laplacians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Laplacians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the input vector.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> will contain the Laplacian of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd>
+<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> will contain the Laplacian of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd>
 <dd>
 For each component of the output vector, there holds <code>laplacians[q]=trace(hessians[q])</code>, where <code>hessians</code> would be the output of the <a class="el" href="#href_anchor">get_function_hessians()</a> function.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
@@ -1329,7 +1329,7 @@
           <td></td>
           <td class="paramtype">std::vector&lt; <a class="el" href="classVector.html">Vector</a>&lt; typename InputVector::value_type &gt; &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>laplacians</em></span>&#href_anchor"memdoc">
 <p>This function does the same as the other <a class="el" href="#href_anchor">get_function_laplacians()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> is a vector of Laplacians of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>laplacians[q]</code> equals the number of components of the finite element, i.e. <code>laplacians[q][c]</code> returns the Laplacian of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd>
+<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> is a vector of Laplacians of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>laplacians[q]</code> equals the number of components of the finite element, i.e. <code>laplacians[q][c]</code> returns the Laplacian of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd>
 <dd>
 For each component of the output vector, there holds <code>laplacians[q][c]=trace(hessians[q][c])</code>, where <code>hessians</code> would be the output of the <a class="el" href="#href_anchor">get_function_hessians()</a> function.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1463,11 +1463,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">third_derivatives</td><td>The third derivatives of the function specified by fe_function at the quadrature points of the current cell. The third derivatives are computed in real space (as opposed to on the unit cell). The object is assumed to already have the correct size. The data type stored by this output vector must be what you get when you multiply the third derivatives of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">third_derivatives</td><td>The third derivatives of the function specified by fe_function at the quadrature points of the current cell. The third derivatives are computed in real space (as opposed to on the unit cell). The object is assumed to already have the correct size. The data type stored by this output vector must be what you get when you multiply the third derivatives of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> will contain the third derivatives of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>third_derivatives[q][i][j][k]</code> represents the <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1309.png"/></picture>th component of the 3rd order tensor of third derivatives at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> will contain the third derivatives of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>third_derivatives[q][i][j][k]</code> represents the <picture><source srcset="form_1253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1253.png"/></picture>th component of the 3rd order tensor of third derivatives at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classFEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_3rd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1501,7 +1501,7 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>quadrature_points_fastest</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
 <p>This function does the same as the other <a class="el" href="#href_anchor">get_function_third_derivatives()</a>, but applied to multi-component (vector- valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> is a vector of third derivatives of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>third_derivatives[q]</code> equals the number of components of the finite element, i.e. <code>third_derivatives[q][c]</code> returns the third derivative of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>third_derivatives[q][c][i][j][k]</code> is the <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1309.png"/></picture>th component of the tensor of third derivatives of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> is a vector of third derivatives of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>third_derivatives[q]</code> equals the number of components of the finite element, i.e. <code>third_derivatives[q][c]</code> returns the third derivative of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>third_derivatives[q][c][i][j][k]</code> is the <picture><source srcset="form_1253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1253.png"/></picture>th component of the tensor of third derivatives of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_3rd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3826</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1770,7 +1770,7 @@
 </div><div class="memdoc">
 <p>Mapped quadrature weight. If this object refers to a volume evaluation (i.e. the derived class is of type <a class="el" href="classFEValues.html">FEValues</a>), then this is the Jacobi determinant times the weight of the <code>q_point</code>th unit quadrature point.</p>
 <p>For surface evaluations (i.e. classes <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a>), it is the mapped surface element times the weight of the quadrature point.</p>
-<p>You can think of the quantity returned by this function as the volume or surface element <picture><source srcset="form_1310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dx, ds$" src="form_1310.png"/></picture> in the integral that we implement here by quadrature.</p>
+<p>You can think of the quantity returned by this function as the volume or surface element <picture><source srcset="form_1254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dx, ds$" src="form_1254.png"/></picture> in the integral that we implement here by quadrature.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_JxW_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -1811,7 +1811,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the Jacobian of the transformation at the specified quadrature point, i.e. <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1289.png"/></picture></p>
+<p>Return the Jacobian of the transformation at the specified quadrature point, i.e. <picture><source srcset="form_1255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1255.png"/></picture></p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -1853,7 +1853,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1311_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{jk}/d\hat x_i$" src="form_1311.png"/></picture>.</p>
+<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{jk}/d\hat x_i$" src="form_1256.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_grads</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -1895,7 +1895,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, pushed forward to the real cell coordinates, i.e. <picture><source srcset="form_1312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{iJ}/d\hat x_K (J_{jJ})^{-1} (J_{kK})^{-1}$" src="form_1312.png"/></picture>.</p>
+<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, pushed forward to the real cell coordinates, i.e. <picture><source srcset="form_1257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{iJ}/d\hat x_K (J_{jJ})^{-1} (J_{kK})^{-1}$" src="form_1257.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_pushed_forward_grads</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -1937,7 +1937,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the third derivative of the transformation from unit to real cell, i.e. the second derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1313_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijkl}=\frac{d^2J_{ij}}{d\hat x_k d\hat x_l}$" src="form_1313.png"/></picture>.</p>
+<p>Return the third derivative of the transformation from unit to real cell, i.e. the second derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijkl}=\frac{d^2J_{ij}}{d\hat x_k d\hat x_l}$" src="form_1258.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_2nd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1Scalar.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1Scalar.html	2024-03-17 21:57:21.959101598 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1Scalar.html	2024-03-17 21:57:21.959101598 +0000
@@ -701,7 +701,7 @@
 </div><div class="memdoc">
 <p>Return the values of the selected scalar component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called.</p>
 <p>This function is the equivalent of the <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_values</a> function but it only works on the selected scalar component.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">1545</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -774,7 +774,7 @@
 </div><div class="memdoc">
 <p>Return the gradients of the selected scalar component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called.</p>
 <p>This function is the equivalent of the <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_gradients</a> function but it only works on the selected scalar component.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the gradients of shape functions (i.e., <code>gradient_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the gradients of shape functions (i.e., <code>gradient_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">1600</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -833,7 +833,7 @@
 </div><div class="memdoc">
 <p>Return the Hessians of the selected scalar component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called.</p>
 <p>This function is the equivalent of the <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_hessians</a> function but it only works on the selected scalar component.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the Hessians of shape functions (i.e., <code>hessian_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the Hessians of shape functions (i.e., <code>hessian_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">1654</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -892,7 +892,7 @@
 </div><div class="memdoc">
 <p>Return the Laplacians of the selected scalar component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called. The Laplacians are the trace of the Hessians.</p>
 <p>This function is the equivalent of the <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_laplacians</a> function but it only works on the selected scalar component.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the Laplacians of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the Laplacians of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">1708</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -951,7 +951,7 @@
 </div><div class="memdoc">
 <p>Return the third derivatives of the selected scalar component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called.</p>
 <p>This function is the equivalent of the <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_third_derivatives</a> function but it only works on the selected scalar component.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the third derivatives of shape functions (i.e., <code>third_derivative_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the third derivatives of shape functions (i.e., <code>third_derivative_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_third_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">1762</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1SymmetricTensor_3_012_00_01dim_00_01spacedim_01_4.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1SymmetricTensor_3_012_00_01dim_00_01spacedim_01_4.html	2024-03-17 21:57:21.991101795 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1SymmetricTensor_3_012_00_01dim_00_01spacedim_01_4.html	2024-03-17 21:57:21.999101845 +0000
@@ -156,9 +156,9 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim&gt;<br />
 class FEValuesViews::SymmetricTensor&lt; 2, dim, spacedim &gt;</div><p>A class representing a view to a set of <code>(dim*dim + dim)/2</code> components forming a symmetric second-order tensor from a vector-valued finite element. Views are discussed in the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> module.</p>
-<p>This class allows to query the value and divergence of (components of) shape functions and solutions representing symmetric tensors. The divergence of a symmetric tensor <picture><source srcset="form_1292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_{ij}, 0\le i,j&lt;\text{dim}$" src="form_1292.png"/></picture> is defined as <picture><source srcset="form_1293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_i = \sum_j \frac{\partial S_{ij}}{\partial x_j}, 0\le
-i&lt;\text{dim}$" src="form_1293.png"/></picture>, which due to the symmetry of the tensor is also <picture><source srcset="form_1294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_i =
-\sum_j \frac{\partial S_{ji}}{\partial x_j}$" src="form_1294.png"/></picture>. In other words, it due to the symmetry of <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> it does not matter whether we apply the nabla operator by row or by column to get the divergence.</p>
+<p>This class allows to query the value and divergence of (components of) shape functions and solutions representing symmetric tensors. The divergence of a symmetric tensor <picture><source srcset="form_1238_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_{ij}, 0\le i,j&lt;\text{dim}$" src="form_1238.png"/></picture> is defined as <picture><source srcset="form_1239_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_i = \sum_j \frac{\partial S_{ij}}{\partial x_j}, 0\le
+i&lt;\text{dim}$" src="form_1239.png"/></picture>, which due to the symmetry of the tensor is also <picture><source srcset="form_1240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_i =
+\sum_j \frac{\partial S_{ji}}{\partial x_j}$" src="form_1240.png"/></picture>. In other words, it due to the symmetry of <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> it does not matter whether we apply the nabla operator by row or by column to get the divergence.</p>
 <p>You get an object of this type if you apply a <a class="el" href="structFEValuesExtractors_1_1SymmetricTensor.html">FEValuesExtractors::SymmetricTensor</a> to an <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8h_source.html#href_anchor">1477</a> of file <a class="el" href="fe_2fe__values_8h_source.html">fe_values.h</a>.</p>
@@ -485,7 +485,7 @@
 </div><div class="memdoc">
 <p>Return the values of the selected vector components of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called.</p>
 <p>This function is the equivalent of the <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_values</a> function but it only works on the selected vector components.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">2263</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -559,7 +559,7 @@
 <p>Return the divergence of the selected vector components of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called.</p>
 <p>There is no equivalent function such as FEValuesBase::get_function_divergences in the <a class="el" href="classFEValues.html">FEValues</a> classes but the information can be obtained from <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_gradients</a>, of course.</p>
 <p>See the general discussion of this class for a definition of the divergence.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the divergences of shape functions (i.e., <code>divergence_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the divergences of shape functions (i.e., <code>divergence_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">2317</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1Tensor_3_012_00_01dim_00_01spacedim_01_4.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1Tensor_3_012_00_01dim_00_01spacedim_01_4.html	2024-03-17 21:57:22.035102067 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1Tensor_3_012_00_01dim_00_01spacedim_01_4.html	2024-03-17 21:57:22.043102116 +0000
@@ -169,8 +169,8 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim&gt;<br />
 class FEValuesViews::Tensor&lt; 2, dim, spacedim &gt;</div><p>A class representing a view to a set of <code>dim*dim</code> components forming a second-order tensor from a vector-valued finite element. Views are discussed in the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> module.</p>
-<p>This class allows to query the value, gradient and divergence of (components of) shape functions and solutions representing tensors. The divergence of a tensor <picture><source srcset="form_1295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_{ij},\, 0\le i,j&lt;\text{dim}$" src="form_1295.png"/></picture> is defined as <picture><source srcset="form_1296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_i =
-\sum_j \frac{\partial T_{ij}}{\partial x_j}, \, 0\le i&lt;\text{dim}$" src="form_1296.png"/></picture>, whereas its gradient is <picture><source srcset="form_1297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk} = \frac{\partial T_{ij}}{\partial x_k}$" src="form_1297.png"/></picture>.</p>
+<p>This class allows to query the value, gradient and divergence of (components of) shape functions and solutions representing tensors. The divergence of a tensor <picture><source srcset="form_1241_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_{ij},\, 0\le i,j&lt;\text{dim}$" src="form_1241.png"/></picture> is defined as <picture><source srcset="form_1242_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_i =
+\sum_j \frac{\partial T_{ij}}{\partial x_j}, \, 0\le i&lt;\text{dim}$" src="form_1242.png"/></picture>, whereas its gradient is <picture><source srcset="form_1243_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk} = \frac{\partial T_{ij}}{\partial x_k}$" src="form_1243.png"/></picture>.</p>
 <p>You get an object of this type if you apply a <a class="el" href="structFEValuesExtractors_1_1Tensor.html">FEValuesExtractors::Tensor</a> to an <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8h_source.html#href_anchor">1815</a> of file <a class="el" href="fe_2fe__values_8h_source.html">fe_values.h</a>.</p>
@@ -591,7 +591,7 @@
 </div><div class="memdoc">
 <p>Return the values of the selected vector components of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called.</p>
 <p>This function is the equivalent of the <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_values</a> function but it only works on the selected vector components.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">2373</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -665,7 +665,7 @@
 <p>Return the divergence of the selected vector components of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called.</p>
 <p>There is no equivalent function such as FEValuesBase::get_function_divergences in the <a class="el" href="classFEValues.html">FEValues</a> classes but the information can be obtained from <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_gradients</a>, of course.</p>
 <p>See the general discussion of this class for a definition of the divergence.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the divergences of shape functions (i.e., <code>divergence_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the divergences of shape functions (i.e., <code>divergence_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">2427</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -724,7 +724,7 @@
 </div><div class="memdoc">
 <p>Return the gradient of the selected vector components of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called.</p>
 <p>See the general discussion of this class for a definition of the gradient.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the gradients of shape functions (i.e., <code>gradient_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the gradients of shape functions (i.e., <code>gradient_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">2482</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1Vector.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1Vector.html	2024-03-17 21:57:22.095102438 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFEValuesViews_1_1Vector.html	2024-03-17 21:57:22.103102487 +0000
@@ -229,8 +229,8 @@
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim&gt;<br />
 class FEValuesViews::Vector&lt; dim, spacedim &gt;</div><p>A class representing a view to a set of <code>spacedim</code> components forming a vector part of a vector-valued finite element. Views are discussed in the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> module.</p>
 <p>Note that in the current context, a vector is meant in the sense physics uses it: it has <code>spacedim</code> components that behave in specific ways under coordinate system transformations. Examples include velocity or displacement fields. This is opposed to how mathematics uses the word "vector" (and how we use this word in other contexts in the library, for example in the <a class="el" href="classFEValuesViews_1_1Vector.html">Vector</a> class), where it really stands for a collection of numbers. An example of this latter use of the word could be the set of concentrations of chemical species in a flame; however, these are really just a collection of scalar variables, since they do not change if the coordinate system is rotated, unlike the components of a velocity vector, and consequently, this class should not be used for this context.</p>
-<p>This class allows to query the value, gradient and divergence of (components of) shape functions and solutions representing vectors. The gradient of a vector <picture><source srcset="form_1290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_{k}, 0\le k&lt;\text{dim}$" src="form_1290.png"/></picture> is defined as <picture><source srcset="form_1291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_{ij} =
-\frac{\partial d_{i}}{\partial x_j}, 0\le i,j&lt;\text{dim}$" src="form_1291.png"/></picture>.</p>
+<p>This class allows to query the value, gradient and divergence of (components of) shape functions and solutions representing vectors. The gradient of a vector <picture><source srcset="form_1236_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_{k}, 0\le k&lt;\text{dim}$" src="form_1236.png"/></picture> is defined as <picture><source srcset="form_1237_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_{ij} =
+\frac{\partial d_{i}}{\partial x_j}, 0\le i,j&lt;\text{dim}$" src="form_1237.png"/></picture>.</p>
 <p>You get an object of this type if you apply a <a class="el" href="structFEValuesExtractors_1_1Vector.html">FEValuesExtractors::Vector</a> to an <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8h_source.html#href_anchor">675</a> of file <a class="el" href="fe_2fe__values_8h_source.html">fe_values.h</a>.</p>
@@ -288,8 +288,8 @@
       </table>
 </div><div class="memdoc">
 <p>An alias for the type of symmetrized gradients of the view this class represents. Here, for a set of <code>dim</code> components of the finite element, the symmetrized gradient is a <code><a class="el" href="classFEValuesViews_1_1SymmetricTensor.html">SymmetricTensor</a>&lt;2,spacedim&gt;</code>.</p>
-<p>The symmetric gradient of a vector field <picture><source srcset="form_321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v$" src="form_321.png"/></picture> is defined as  <picture><source srcset="form_1298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\mathbf v)=\frac 12 (\nabla \mathbf v + \nabla \mathbf
-v^T)$" src="form_1298.png"/></picture>. </p>
+<p>The symmetric gradient of a vector field <picture><source srcset="form_321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v$" src="form_321.png"/></picture> is defined as  <picture><source srcset="form_1244_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\mathbf v)=\frac 12 (\nabla \mathbf v + \nabla \mathbf
+v^T)$" src="form_1244.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8h_source.html#href_anchor">705</a> of file <a class="el" href="fe_2fe__values_8h_source.html">fe_values.h</a>.</p>
 
@@ -812,8 +812,8 @@
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>q_point</em></span>&#href_anchor"memdoc">
 <p>Return the symmetric gradient (a symmetric tensor of rank 2) of the vector component selected by this view, for the shape function and quadrature point selected by the arguments.</p>
-<p>The symmetric gradient is defined as <picture><source srcset="form_1299_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 12 [(\nabla \phi_i(x_q)) +
-(\nabla \phi_i(x_q))^T]$" src="form_1299.png"/></picture>, where <picture><source srcset="form_1012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i$" src="form_1012.png"/></picture> represents the <code>dim</code> components selected from the <a class="el" href="classFEValuesBase.html">FEValuesBase</a> object, and <picture><source srcset="form_1300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q$" src="form_1300.png"/></picture> is the location of the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>-th quadrature point.</p>
+<p>The symmetric gradient is defined as <picture><source srcset="form_1245_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 12 [(\nabla \phi_i(x_q)) +
+(\nabla \phi_i(x_q))^T]$" src="form_1245.png"/></picture>, where <picture><source srcset="form_966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i$" src="form_966.png"/></picture> represents the <code>dim</code> components selected from the <a class="el" href="classFEValuesBase.html">FEValuesBase</a> object, and <picture><source srcset="form_1246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q$" src="form_1246.png"/></picture> is the location of the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>-th quadrature point.</p>
 <dl class="section note"><dt>Note</dt><dd>The meaning of the arguments is as documented for the <a class="el" href="#href_anchor">value()</a> function.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -862,16 +862,16 @@
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>q_point</em></span>&#href_anchor"memdoc">
 <p>Return the vector curl of the vector components selected by this view, for the shape function and quadrature point selected by the arguments. For 1d this function does not make any sense. Thus it is not implemented for <code>spacedim=1</code>. In 2d the curl is defined as  </p><p class="formulaDsp">
-<picture><source srcset="form_1301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<picture><source srcset="form_1247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
 \operatorname{curl}(u) \dealcoloneq \frac{du_2}{dx} -\frac{du_1}{dy},
-\end{equation*}" src="form_1301.png"/></picture>
+\end{equation*}" src="form_1247.png"/></picture>
 </p>
 <p> whereas in 3d it is given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<picture><source srcset="form_1248_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
 \operatorname{curl}(u) \dealcoloneq \left( \begin{array}{c}
 \frac{du_3}{dy}-\frac{du_2}{dz}\\ \frac{du_1}{dz}-\frac{du_3}{dx}\\
 \frac{du_2}{dx}-\frac{du_1}{dy} \end{array} \right).
-\end{equation*}" src="form_1302.png"/></picture>
+\end{equation*}" src="form_1248.png"/></picture>
 </p>
 <dl class="section note"><dt>Note</dt><dd>The meaning of the arguments is as documented for the <a class="el" href="#href_anchor">value()</a> function.</dd>
 <dd>
@@ -951,7 +951,7 @@
 </div><div class="memdoc">
 <p>Return the values of the selected vector components of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called.</p>
 <p>This function is the equivalent of the <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_values</a> function but it only works on the selected vector components.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the values of shape functions (i.e., <code>value_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">1818</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1024,7 +1024,7 @@
 </div><div class="memdoc">
 <p>Return the gradients of the selected vector components of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called.</p>
 <p>This function is the equivalent of the <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_gradients</a> function but it only works on the selected vector components.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the gradients of shape functions (i.e., <code>gradient_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the gradients of shape functions (i.e., <code>gradient_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">1872</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1082,10 +1082,10 @@
       </table>
 </div><div class="memdoc">
 <p>Return the symmetrized gradients of the selected vector components of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called.</p>
-<p>The symmetric gradient of a vector field <picture><source srcset="form_321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v$" src="form_321.png"/></picture> is defined as  <picture><source srcset="form_1298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\mathbf v)=\frac 12 (\nabla \mathbf v + \nabla \mathbf
-v^T)$" src="form_1298.png"/></picture>.</p>
+<p>The symmetric gradient of a vector field <picture><source srcset="form_321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v$" src="form_321.png"/></picture> is defined as  <picture><source srcset="form_1244_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\mathbf v)=\frac 12 (\nabla \mathbf v + \nabla \mathbf
+v^T)$" src="form_1244.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>There is no equivalent function such as FEValuesBase::get_function_symmetric_gradients in the <a class="el" href="classFEValues.html">FEValues</a> classes but the information can be obtained from <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_gradients</a>, of course.</dd></dl>
-<p>The data type stored by the output vector must be what you get when you multiply the symmetric gradients of shape functions (i.e., <code>symmetric_gradient_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the symmetric gradients of shape functions (i.e., <code>symmetric_gradient_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">1926</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1144,7 +1144,7 @@
 </div><div class="memdoc">
 <p>Return the divergence of the selected vector components of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called.</p>
 <p>There is no equivalent function such as FEValuesBase::get_function_divergences in the <a class="el" href="classFEValues.html">FEValues</a> classes but the information can be obtained from <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_gradients</a>, of course.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the divergences of shape functions (i.e., <code>divergence_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the divergences of shape functions (i.e., <code>divergence_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">1982</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1203,7 +1203,7 @@
 </div><div class="memdoc">
 <p>Return the curl of the selected vector components of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called.</p>
 <p>There is no equivalent function such as FEValuesBase::get_function_curls in the <a class="el" href="classFEValues.html">FEValues</a> classes but the information can be obtained from <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_gradients</a>, of course.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the curls of shape functions (i.e., <code>curl_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the curls of shape functions (i.e., <code>curl_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">2037</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1262,7 +1262,7 @@
 </div><div class="memdoc">
 <p>Return the Hessians of the selected vector components of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called.</p>
 <p>This function is the equivalent of the <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_hessians</a> function but it only works on the selected vector components.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the Hessians of shape functions (i.e., <code>hessian_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the Hessians of shape functions (i.e., <code>hessian_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">2091</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1321,7 +1321,7 @@
 </div><div class="memdoc">
 <p>Return the Laplacians of the selected vector components of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called. The Laplacians are the trace of the Hessians.</p>
 <p>This function is the equivalent of the <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_laplacians</a> function but it only works on the selected vector components.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the Laplacians of shape functions (i.e., <code>laplacian_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the Laplacians of shape functions (i.e., <code>laplacian_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">2145</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1380,7 +1380,7 @@
 </div><div class="memdoc">
 <p>Return the third derivatives of the selected scalar component of the finite element function characterized by <code>fe_function</code> at the quadrature points of the cell, face or subface selected the last time the <code>reinit</code> function of the <a class="el" href="classFEValues.html">FEValues</a> object was called.</p>
 <p>This function is the equivalent of the <a class="el" href="classFEValuesBase.html#href_anchor">FEValuesBase::get_function_third_derivatives</a> function but it only works on the selected scalar component.</p>
-<p>The data type stored by the output vector must be what you get when you multiply the third derivatives of shape functions (i.e., <code>third_derivative_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
+<p>The data type stored by the output vector must be what you get when you multiply the third derivatives of shape functions (i.e., <code>third_derivative_type</code>) times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_third_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">2207</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__ABF.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__ABF.html	2024-03-17 21:57:22.251103401 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__ABF.html	2024-03-17 21:57:22.255103426 +0000
@@ -748,11 +748,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -2772,7 +2772,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3466,7 +3466,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3574,7 +3574,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3884,9 +3884,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__BDM.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__BDM.html	2024-03-17 21:57:22.407104365 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__BDM.html	2024-03-17 21:57:22.411104389 +0000
@@ -724,11 +724,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -2712,7 +2712,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3406,7 +3406,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3514,7 +3514,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3824,9 +3824,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__BernardiRaugel.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__BernardiRaugel.html	2024-03-17 21:57:22.563105328 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__BernardiRaugel.html	2024-03-17 21:57:22.567105353 +0000
@@ -735,11 +735,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -2693,7 +2693,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3387,7 +3387,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3495,7 +3495,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3805,9 +3805,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Bernstein.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Bernstein.html	2024-03-17 21:57:22.719106292 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Bernstein.html	2024-03-17 21:57:22.723106317 +0000
@@ -2402,17 +2402,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -2447,21 +2447,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -3609,7 +3609,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3717,7 +3717,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3996,9 +3996,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -4033,11 +4033,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGBDM.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGBDM.html	2024-03-17 21:57:22.871107231 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGBDM.html	2024-03-17 21:57:22.879107281 +0000
@@ -2590,7 +2590,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3284,7 +3284,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3392,7 +3392,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3702,9 +3702,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -3739,11 +3739,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGNedelec.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGNedelec.html	2024-03-17 21:57:23.023108170 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGNedelec.html	2024-03-17 21:57:23.031108219 +0000
@@ -2590,7 +2590,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3284,7 +3284,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3392,7 +3392,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3702,9 +3702,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -3739,11 +3739,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGP.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGP.html	2024-03-17 21:57:23.183109158 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGP.html	2024-03-17 21:57:23.187109183 +0000
@@ -486,10 +486,10 @@
 <p>This can be understood by the following 2-d example: consider the cell with vertices at <picture><source srcset="form_1059_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0,0),(1,0),(0,1),(s,s)$" src="form_1059.png"/></picture>: </p><div class="image">
 <img src="dgp_doesnt_contain_p.png" alt=""/>
 </div>
-<p>For this cell, a bilinear transformation <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> produces the relations <picture><source srcset="form_1060_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=\hat
-x+\hat x\hat y$" src="form_1060.png"/></picture> and <picture><source srcset="form_1061_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=\hat y+\hat x\hat y$" src="form_1061.png"/></picture> that correlate reference coordinates <picture><source srcset="form_1062_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat x,\hat y$" src="form_1062.png"/></picture> and coordinates in real space <picture><source srcset="form_573_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x,y$" src="form_573.png"/></picture>. Under this mapping, the constant function is clearly mapped onto itself, but the two other shape functions of the <picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> space, namely <picture><source srcset="form_1063_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_1(\hat x,\hat
+<p>For this cell, a bilinear transformation <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> produces the relations <picture><source srcset="form_1060_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=\hat
+x+\hat x\hat y$" src="form_1060.png"/></picture> and <picture><source srcset="form_1061_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=\hat y+\hat x\hat y$" src="form_1061.png"/></picture> that correlate reference coordinates <picture><source srcset="form_1062_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat x,\hat y$" src="form_1062.png"/></picture> and coordinates in real space <picture><source srcset="form_573_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x,y$" src="form_573.png"/></picture>. Under this mapping, the constant function is clearly mapped onto itself, but the two other shape functions of the <picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> space, namely <picture><source srcset="form_1063_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_1(\hat x,\hat
 y)=\hat x$" src="form_1063.png"/></picture> and <picture><source srcset="form_1064_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_2(\hat x,\hat y)=\hat y$" src="form_1064.png"/></picture> are mapped onto <picture><source srcset="form_1065_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_1(x,y)=\frac{x-t}{t(s-1)},\phi_2(x,y)=t$" src="form_1065.png"/></picture> where <picture><source srcset="form_1066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=\frac{y}{s-x+sx+y-sy}$" src="form_1066.png"/></picture>.</p>
-<p>For the simple case that <picture><source srcset="form_1067_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s=1$" src="form_1067.png"/></picture>, i.e. if the real cell is the unit square, the expressions can be simplified to <picture><source srcset="form_1068_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=y$" src="form_1068.png"/></picture> and <picture><source srcset="form_1069_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_1(x,y)=x,\phi_2(x,y)=y$" src="form_1069.png"/></picture>. However, for all other cases, the functions <picture><source srcset="form_1070_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_1(x,y),\phi_2(x,y)$" src="form_1070.png"/></picture> are not linear any more, and neither is any linear combination of them. Consequently, the linear functions are not within the range of the mapped <picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> polynomials.</p>
+<p>For the simple case that <picture><source srcset="form_1067_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s=1$" src="form_1067.png"/></picture>, i.e. if the real cell is the unit square, the expressions can be simplified to <picture><source srcset="form_1068_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=y$" src="form_1068.png"/></picture> and <picture><source srcset="form_1069_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_1(x,y)=x,\phi_2(x,y)=y$" src="form_1069.png"/></picture>. However, for all other cases, the functions <picture><source srcset="form_1070_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_1(x,y),\phi_2(x,y)$" src="form_1070.png"/></picture> are not linear any more, and neither is any linear combination of them. Consequently, the linear functions are not within the range of the mapped <picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> polynomials.</p>
 <h3>Visualization of shape functions</h3>
 <p>In 2d, the shape functions of this element look as follows.</p>
 <h4><picture><source srcset="form_1071_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_0$" src="form_1071.png"/></picture> element</h4>
@@ -505,7 +505,7 @@
 <p class="endtd"></p>
 </td><td align="center"></td></tr>
 </table>
-<h4><picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> element</h4>
+<h4><picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> element</h4>
 <table class="doxtable">
 <tr>
 <td align="center"><div class="image">
@@ -517,9 +517,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> element, shape function 0 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> element, shape function 0 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> element, shape function 1  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> element, shape function 1  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -529,7 +529,7 @@
  <p class="endtd"></p>
 </td><td align="center"></td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> element, shape function 2 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> element, shape function 2 </p>
 <p class="endtd"></p>
 </td><td align="center"></td></tr>
 </table>
@@ -2366,17 +2366,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -2411,21 +2411,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -3040,7 +3040,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3734,7 +3734,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3842,7 +3842,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -4121,9 +4121,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -4158,11 +4158,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGPMonomial.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGPMonomial.html	2024-03-17 21:57:23.355110222 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGPMonomial.html	2024-03-17 21:57:23.355110222 +0000
@@ -496,10 +496,10 @@
 <p>This can be understood by the following 2-d example: consider the cell with vertices at <picture><source srcset="form_1059_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0,0),(1,0),(0,1),(s,s)$" src="form_1059.png"/></picture>: </p><div class="image">
 <img src="dgp_doesnt_contain_p.png" alt=""/>
 </div>
-<p>For this cell, a bilinear transformation <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> produces the relations <picture><source srcset="form_1060_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=\hat
-x+\hat x\hat y$" src="form_1060.png"/></picture> and <picture><source srcset="form_1061_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=\hat y+\hat x\hat y$" src="form_1061.png"/></picture> that correlate reference coordinates <picture><source srcset="form_1062_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat x,\hat y$" src="form_1062.png"/></picture> and coordinates in real space <picture><source srcset="form_573_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x,y$" src="form_573.png"/></picture>. Under this mapping, the constant function is clearly mapped onto itself, but the two other shape functions of the <picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> space, namely <picture><source srcset="form_1063_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_1(\hat x,\hat
+<p>For this cell, a bilinear transformation <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> produces the relations <picture><source srcset="form_1060_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=\hat
+x+\hat x\hat y$" src="form_1060.png"/></picture> and <picture><source srcset="form_1061_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=\hat y+\hat x\hat y$" src="form_1061.png"/></picture> that correlate reference coordinates <picture><source srcset="form_1062_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat x,\hat y$" src="form_1062.png"/></picture> and coordinates in real space <picture><source srcset="form_573_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x,y$" src="form_573.png"/></picture>. Under this mapping, the constant function is clearly mapped onto itself, but the two other shape functions of the <picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> space, namely <picture><source srcset="form_1063_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_1(\hat x,\hat
 y)=\hat x$" src="form_1063.png"/></picture> and <picture><source srcset="form_1064_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_2(\hat x,\hat y)=\hat y$" src="form_1064.png"/></picture> are mapped onto <picture><source srcset="form_1065_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_1(x,y)=\frac{x-t}{t(s-1)},\phi_2(x,y)=t$" src="form_1065.png"/></picture> where <picture><source srcset="form_1066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=\frac{y}{s-x+sx+y-sy}$" src="form_1066.png"/></picture>.</p>
-<p>For the simple case that <picture><source srcset="form_1067_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s=1$" src="form_1067.png"/></picture>, i.e. if the real cell is the unit square, the expressions can be simplified to <picture><source srcset="form_1068_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=y$" src="form_1068.png"/></picture> and <picture><source srcset="form_1069_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_1(x,y)=x,\phi_2(x,y)=y$" src="form_1069.png"/></picture>. However, for all other cases, the functions <picture><source srcset="form_1070_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_1(x,y),\phi_2(x,y)$" src="form_1070.png"/></picture> are not linear any more, and neither is any linear combination of them. Consequently, the linear functions are not within the range of the mapped <picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> polynomials.</p>
+<p>For the simple case that <picture><source srcset="form_1067_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s=1$" src="form_1067.png"/></picture>, i.e. if the real cell is the unit square, the expressions can be simplified to <picture><source srcset="form_1068_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=y$" src="form_1068.png"/></picture> and <picture><source srcset="form_1069_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_1(x,y)=x,\phi_2(x,y)=y$" src="form_1069.png"/></picture>. However, for all other cases, the functions <picture><source srcset="form_1070_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_1(x,y),\phi_2(x,y)$" src="form_1070.png"/></picture> are not linear any more, and neither is any linear combination of them. Consequently, the linear functions are not within the range of the mapped <picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> polynomials.</p>
 <h3>Visualization of shape functions</h3>
 <p>In 2d, the shape functions of this element look as follows.</p>
 <h4><picture><source srcset="form_1071_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_0$" src="form_1071.png"/></picture> element</h4>
@@ -515,7 +515,7 @@
 <p class="endtd"></p>
 </td><td align="center"></td></tr>
 </table>
-<h4><picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> element</h4>
+<h4><picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> element</h4>
 <table class="doxtable">
 <tr>
 <td align="center"><div class="image">
@@ -527,9 +527,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> element, shape function 0 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> element, shape function 0 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> element, shape function 1  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> element, shape function 1  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -539,7 +539,7 @@
  <p class="endtd"></p>
 </td><td align="center"></td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> element, shape function 2 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> element, shape function 2 </p>
 <p class="endtd"></p>
 </td><td align="center"></td></tr>
 </table>
@@ -2484,17 +2484,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -2529,21 +2529,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -3356,7 +3356,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -4050,7 +4050,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -4158,7 +4158,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -4468,9 +4468,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -4505,11 +4505,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGPNonparametric.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGPNonparametric.html	2024-03-17 21:57:23.515111209 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGPNonparametric.html	2024-03-17 21:57:23.515111209 +0000
@@ -496,7 +496,7 @@
 <p class="endtd"></p>
 </td><td align="center"></td></tr>
 </table>
-<h4><picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> element</h4>
+<h4><picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> element</h4>
 <table class="doxtable">
 <tr>
 <td align="center"><div class="image">
@@ -508,9 +508,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> element, shape function 0 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> element, shape function 0 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> element, shape function 1  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> element, shape function 1  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -520,7 +520,7 @@
  <p class="endtd"></p>
 </td><td align="center"></td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_158.png"/></picture> element, shape function 2 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_1$" src="form_132.png"/></picture> element, shape function 2 </p>
 <p class="endtd"></p>
 </td><td align="center"></td></tr>
 </table>
@@ -2547,7 +2547,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3241,7 +3241,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3349,7 +3349,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3659,9 +3659,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -3696,11 +3696,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQ.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQ.html	2024-03-17 21:57:23.663112124 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQ.html	2024-03-17 21:57:23.671112173 +0000
@@ -506,7 +506,7 @@
 *  </pre><p> with node 13 being placed in the interior of the hex.</p>
 <p>Note, however, that these are just the Lagrange interpolation points of the shape functions. Even though they may physically be on the boundary of the cell, they are logically in the interior since there are no continuity requirements for these shape functions across cell boundaries. While discontinuous, when restricted to a single cell the shape functions of this element are exactly the same as those of the <a class="el" href="classFE__Q.html">FE_Q</a> element where they are shown visually.</p>
 <h3>Unit support point distribution and conditioning of interpolation</h3>
-<p>When constructing an <a class="el" href="classFE__DGQ.html">FE_DGQ</a> element at polynomial degrees one or two, equidistant support points at 0 and 1 (linear case) or 0, 0.5, and 1 (quadratic case) are used. The unit support or nodal points <em>x<sub>i</sub></em> are those points where the <em>j</em>th Lagrange polynomial satisfies the <picture><source srcset="form_144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_{ij}$" src="form_144.png"/></picture> property, i.e., where one polynomial is one and all the others are zero. For higher polynomial degrees, the support points are non-equidistant by default, and chosen to be the support points of the <code>(degree+1)</code>-order Gauss-Lobatto quadrature rule. This point distribution yields well-conditioned Lagrange interpolation at arbitrary polynomial degrees. By contrast, polynomials based on equidistant points get increasingly ill-conditioned as the polynomial degree increases. In interpolation, this effect is known as the Runge phenomenon. For Galerkin methods, the Runge phenomenon is typically not visible in the solution quality but rather in the condition number of the associated system matrices. For example, the elemental <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of equidistant points at degree 10 has condition number 2.6e6, whereas the condition number for Gauss-Lobatto points is around 400.</p>
+<p>When constructing an <a class="el" href="classFE__DGQ.html">FE_DGQ</a> element at polynomial degrees one or two, equidistant support points at 0 and 1 (linear case) or 0, 0.5, and 1 (quadratic case) are used. The unit support or nodal points <em>x<sub>i</sub></em> are those points where the <em>j</em>th Lagrange polynomial satisfies the <picture><source srcset="form_118_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_{ij}$" src="form_118.png"/></picture> property, i.e., where one polynomial is one and all the others are zero. For higher polynomial degrees, the support points are non-equidistant by default, and chosen to be the support points of the <code>(degree+1)</code>-order Gauss-Lobatto quadrature rule. This point distribution yields well-conditioned Lagrange interpolation at arbitrary polynomial degrees. By contrast, polynomials based on equidistant points get increasingly ill-conditioned as the polynomial degree increases. In interpolation, this effect is known as the Runge phenomenon. For Galerkin methods, the Runge phenomenon is typically not visible in the solution quality but rather in the condition number of the associated system matrices. For example, the elemental <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of equidistant points at degree 10 has condition number 2.6e6, whereas the condition number for Gauss-Lobatto points is around 400.</p>
 <p>The Gauss-Lobatto points in 1d include the end points 0 and +1 of the unit interval. The interior points are shifted towards the end points, which gives a denser point distribution close to the element boundary. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe__dgq_8h_source.html#href_anchor">112</a> of file <a class="el" href="fe__dgq_8h_source.html">fe_dgq.h</a>.</p>
@@ -2308,17 +2308,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -2353,21 +2353,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -2884,7 +2884,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3578,7 +3578,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3686,7 +3686,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3965,9 +3965,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQArbitraryNodes.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQArbitraryNodes.html	2024-03-17 21:57:23.815113063 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQArbitraryNodes.html	2024-03-17 21:57:23.823113112 +0000
@@ -2236,17 +2236,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -2281,21 +2281,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -2812,7 +2812,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3506,7 +3506,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3614,7 +3614,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3893,9 +3893,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQHermite.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQHermite.html	2024-03-17 21:57:23.967114002 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQHermite.html	2024-03-17 21:57:23.975114050 +0000
@@ -2240,17 +2240,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -2285,21 +2285,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -2816,7 +2816,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3510,7 +3510,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3618,7 +3618,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3897,9 +3897,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQLegendre.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQLegendre.html	2024-03-17 21:57:24.115114916 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGQLegendre.html	2024-03-17 21:57:24.119114940 +0000
@@ -2238,17 +2238,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -2283,21 +2283,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -2814,7 +2814,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3508,7 +3508,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3616,7 +3616,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3895,9 +3895,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGRaviartThomas.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGRaviartThomas.html	2024-03-17 21:57:24.263115830 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGRaviartThomas.html	2024-03-17 21:57:24.267115855 +0000
@@ -2590,7 +2590,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3284,7 +3284,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3392,7 +3392,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3702,9 +3702,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -3739,11 +3739,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGVector.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGVector.html	2024-03-17 21:57:24.411116744 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__DGVector.html	2024-03-17 21:57:24.415116769 +0000
@@ -2599,7 +2599,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3293,7 +3293,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3401,7 +3401,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3711,9 +3711,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -3748,11 +3748,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Enriched.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Enriched.html	2024-03-17 21:57:24.563117683 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Enriched.html	2024-03-17 21:57:24.567117708 +0000
@@ -484,12 +484,12 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim&gt;<br />
 class FE_Enriched&lt; dim, spacedim &gt;</div><p>Implementation of a partition of unity finite element method (PUM) by Babuska and Melenk which enriches a standard finite element with an enrichment function multiplied with another (usually linear) finite element:  </p><p class="formulaDsp">
-<picture><source srcset="form_1084_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1077_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 U(\mathbf x) = \sum_i N_i(\mathbf x) U_i + \sum_j N_j(\mathbf x) \sum_k
-F_k(\mathbf x) U_{jk} \]" src="form_1084.png"/></picture>
+F_k(\mathbf x) U_{jk} \]" src="form_1077.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1085_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ N_i(\mathbf x) $" src="form_1085.png"/></picture> and <picture><source srcset="form_1086_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ N_j(\mathbf x) $" src="form_1086.png"/></picture> are the underlying finite elements (including the mapping from the isoparametric element to the real element); <picture><source srcset="form_1087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ F_k(\mathbf x) $" src="form_1087.png"/></picture> are the scalar enrichment functions in real space (e.g. <picture><source srcset="form_1088_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ 1/r $" src="form_1088.png"/></picture>, <picture><source srcset="form_1089_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \exp(-r) $" src="form_1089.png"/></picture>, etc); <picture><source srcset="form_1090_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ U_i $" src="form_1090.png"/></picture> and <picture><source srcset="form_1091_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$
-U_{jk} $" src="form_1091.png"/></picture> are the standard and enriched DoFs. This allows to include in the finite element space a priori knowledge about the partial differential equation being solved which in turn improves the local approximation properties of the spaces. This can be useful for highly oscillatory solutions, problems with domain corners or on unbounded domains or sudden changes of boundary conditions. PUM method uses finite element spaces which satisfy the partition of unity property (e.g. <a class="el" href="classFE__Q.html">FE_Q</a>). Among other properties this makes the resulting space to reproduce enrichment functions exactly.</p>
+<p> where <picture><source srcset="form_1078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ N_i(\mathbf x) $" src="form_1078.png"/></picture> and <picture><source srcset="form_1079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ N_j(\mathbf x) $" src="form_1079.png"/></picture> are the underlying finite elements (including the mapping from the isoparametric element to the real element); <picture><source srcset="form_1080_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ F_k(\mathbf x) $" src="form_1080.png"/></picture> are the scalar enrichment functions in real space (e.g. <picture><source srcset="form_1081_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ 1/r $" src="form_1081.png"/></picture>, <picture><source srcset="form_1082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \exp(-r) $" src="form_1082.png"/></picture>, etc); <picture><source srcset="form_1083_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ U_i $" src="form_1083.png"/></picture> and <picture><source srcset="form_1084_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$
+U_{jk} $" src="form_1084.png"/></picture> are the standard and enriched DoFs. This allows to include in the finite element space a priori knowledge about the partial differential equation being solved which in turn improves the local approximation properties of the spaces. This can be useful for highly oscillatory solutions, problems with domain corners or on unbounded domains or sudden changes of boundary conditions. PUM method uses finite element spaces which satisfy the partition of unity property (e.g. <a class="el" href="classFE__Q.html">FE_Q</a>). Among other properties this makes the resulting space to reproduce enrichment functions exactly.</p>
 <p>The simplest constructor of this class takes two finite element objects and an enrichment function to be used. For example</p>
 <div class="fragment"><div class="line"><a class="code hl_class" href="classFE__Enriched.html">FE_Enriched&lt;dim&gt;</a> fe(<a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(2),</div>
 <div class="line">                    <a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(1),</div>
@@ -497,7 +497,7 @@
 <div class="ttc" id="aclassFE__Enriched_html"><div class="ttname"><a href="classFE__Enriched.html">FE_Enriched</a></div><div class="ttdef"><b>Definition</b> <a href="fe__enriched_8h_source.html#href_anchor">fe_enriched.h:177</a></div></div>
 <div class="ttc" id="aclassFE__Q_html"><div class="ttname"><a href="classFE__Q.html">FE_Q</a></div><div class="ttdef"><b>Definition</b> <a href="fe__q_8h_source.html#href_anchor">fe_q.h:551</a></div></div>
 </div><!-- fragment --><p>In this case, standard DoFs are distributed by <code>FE_Q&lt;dim&gt;(2)</code>, whereas enriched DoFs are coming from a single finite element <code>FE_Q&lt;dim&gt;(1)</code> used with a single enrichment function <code>function</code>. In this case, the total number of DoFs on the enriched element is the sum of DoFs from <code>FE_Q&lt;dim&gt;(2)</code> and <code>FE_Q&lt;dim&gt;(1)</code>.</p>
-<p>As an example of an enrichment function, consider <picture><source srcset="form_1092_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \exp(-x) $" src="form_1092.png"/></picture>, which leads to the following shape functions on the unit element: </p><table class="doxtable">
+<p>As an example of an enrichment function, consider <picture><source srcset="form_1085_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \exp(-x) $" src="form_1085.png"/></picture>, which leads to the following shape functions on the unit element: </p><table class="doxtable">
 <tr>
 <td align="center"><div class="image">
 <img src="fe_enriched_1d.png" alt=""/>
@@ -510,7 +510,7 @@
 <td align="center">1d element, base and enriched shape functions.  </td><td align="center">enriched shape function corresponding to the central vertex.   </td></tr>
 </table>
 <p>Note that evaluation of gradients (hessians) of the enriched shape functions or the finite element field requires evaluation of gradients (gradients and hessians) of the enrichment functions:  </p><p class="formulaDsp">
-<picture><source srcset="form_1093_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_1086_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   U(\mathbf x)
     &amp;= \sum_i N_i(\mathbf x) U_i
     + \sum_{j,k} N_j(\mathbf x) F_k(\mathbf x) U_{jk} \\
@@ -524,10 +524,10 @@
 F_k(\mathbf x) + \mathbf \nabla F_k(\mathbf x) \mathbf \nabla N_j(\mathbf x)
 + \mathbf \nabla N_j(\mathbf x) \mathbf \nabla F_k(\mathbf x) + N_j(\mathbf
 x) \mathbf \nabla \mathbf \nabla F_k(\mathbf x) \right] U_{jk}
-\end{align*}" src="form_1093.png"/></picture>
+\end{align*}" src="form_1086.png"/></picture>
 </p>
 <h3>Using enriched and non-enriched FEs together</h3>
-<p>In most applications it is beneficial to introduce enrichments only in some part of the domain (e.g. around a crack tip) and use standard FE (e.g. <a class="el" href="classFE__Q.html">FE_Q</a>) elsewhere. This can be achieved by using the hp-finite element framework in deal.II that allows for the use of different elements on different cells. To make the resulting space <picture><source srcset="form_1094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1094.png"/></picture> continuous, it is then necessary for the <a class="el" href="classDoFHandler.html">DoFHandler</a> class and <a class="el" href="group__constraints.html#href_anchor">DoFTools::make_hanging_node_constraints()</a> function to be able to figure out what to do at the interface between enriched and non-enriched cells. Specifically, we want the degrees of freedom corresponding to enriched shape functions to be zero at these interfaces. These classes and functions can not to do this automatically, but the effect can be achieved by using not just a regular <a class="el" href="classFE__Q.html">FE_Q</a> on cells without enrichment, but to wrap the <a class="el" href="classFE__Q.html">FE_Q</a> into an <a class="el" href="classFE__Enriched.html">FE_Enriched</a> object <em>without actually enriching it</em>. This can be done as follows: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFE__Enriched.html">FE_Enriched&lt;dim&gt;</a> fe_non_enriched(<a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(1));</div>
+<p>In most applications it is beneficial to introduce enrichments only in some part of the domain (e.g. around a crack tip) and use standard FE (e.g. <a class="el" href="classFE__Q.html">FE_Q</a>) elsewhere. This can be achieved by using the hp-finite element framework in deal.II that allows for the use of different elements on different cells. To make the resulting space <picture><source srcset="form_1087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1087.png"/></picture> continuous, it is then necessary for the <a class="el" href="classDoFHandler.html">DoFHandler</a> class and <a class="el" href="group__constraints.html#href_anchor">DoFTools::make_hanging_node_constraints()</a> function to be able to figure out what to do at the interface between enriched and non-enriched cells. Specifically, we want the degrees of freedom corresponding to enriched shape functions to be zero at these interfaces. These classes and functions can not to do this automatically, but the effect can be achieved by using not just a regular <a class="el" href="classFE__Q.html">FE_Q</a> on cells without enrichment, but to wrap the <a class="el" href="classFE__Q.html">FE_Q</a> into an <a class="el" href="classFE__Enriched.html">FE_Enriched</a> object <em>without actually enriching it</em>. This can be done as follows: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFE__Enriched.html">FE_Enriched&lt;dim&gt;</a> fe_non_enriched(<a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(1));</div>
 </div><!-- fragment --><p> This constructor is equivalent to calling </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFE__Enriched.html">FE_Enriched&lt;dim&gt;</a> fe_non_enriched(<a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(1),</div>
 <div class="line">                                 <a class="code hl_class" href="classFE__Nothing.html">FE_Nothing&lt;dim&gt;</a>(1,<span class="keyword">true</span>),</div>
 <div class="line">                                 <span class="keyword">nullptr</span>);</div>
@@ -2626,7 +2626,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3288,7 +3288,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3396,7 +3396,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3706,9 +3706,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -3743,11 +3743,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceP.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceP.html	2024-03-17 21:57:24.715118622 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceP.html	2024-03-17 21:57:24.719118646 +0000
@@ -2660,7 +2660,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3354,7 +3354,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3462,7 +3462,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3741,9 +3741,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -3778,11 +3778,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceP_3_011_00_01spacedim_01_4.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceP_3_011_00_01spacedim_01_4.html	2024-03-17 21:57:24.855119487 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceP_3_011_00_01spacedim_01_4.html	2024-03-17 21:57:24.859119512 +0000
@@ -2797,7 +2797,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 </div>
 </div>
@@ -3441,7 +3441,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3543,7 +3543,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3800,9 +3800,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -3835,11 +3835,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceQ.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceQ.html	2024-03-17 21:57:24.995120351 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceQ.html	2024-03-17 21:57:25.003120401 +0000
@@ -2701,7 +2701,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3395,7 +3395,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3503,7 +3503,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3782,9 +3782,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceQ_3_011_00_01spacedim_01_4.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceQ_3_011_00_01spacedim_01_4.html	2024-03-17 21:57:25.143121265 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__FaceQ_3_011_00_01spacedim_01_4.html	2024-03-17 21:57:25.147121290 +0000
@@ -2348,7 +2348,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 </div>
 </div>
@@ -2992,7 +2992,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3094,7 +3094,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3351,9 +3351,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -3386,11 +3386,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Nedelec.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Nedelec.html	2024-03-17 21:57:25.323122377 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Nedelec.html	2024-03-17 21:57:25.323122377 +0000
@@ -508,12 +508,12 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
 class FE_Nedelec&lt; dim &gt;</div><dl class="section warning"><dt>Warning</dt><dd>Several aspects of the implementation are experimental. For the moment, it is safe to use the element on globally refined meshes with consistent orientation of faces. See the todo entries below for more detailed caveats.</dd></dl>
-<p>Implementation of N&eacute;d&eacute;lec elements. The N&eacute;d&eacute;lec space is designed to solve problems in which the solution only lives in the space <picture><source srcset="form_1077_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^\text{curl}=\{ {\mathbf u} \in L_2: \text{curl}\, {\mathbf u} \in L_2\}$" src="form_1077.png"/></picture>, rather than in the more commonly used space <picture><source srcset="form_1078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1=\{ u \in L_2: \nabla u \in L_2\}$" src="form_1078.png"/></picture>. In other words, the solution must be a vector field whose curl is square integrable, but for which the gradient may not be square integrable. The typical application for this space (and these elements) is to the Maxwell equations and corresponding simplifications, such as the reduced version of the Maxwell equation that only involves the electric field <picture><source srcset="form_1079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf E$" src="form_1079.png"/></picture> which has to satisfy the equation <picture><source srcset="form_1080_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{curl}\, \text{curl}\, {\mathbf E} = 0$" src="form_1080.png"/></picture> in the time independent case when no currents are present, or the equation <picture><source srcset="form_1081_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{curl}\,\text{curl}\,{\mathbf A} = 4\pi{\mathbf j}$" src="form_1081.png"/></picture> that the magnetic vector potential <picture><source srcset="form_395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_395.png"/></picture> has to satisfy in the time independent case.</p>
-<p>The defining characteristic of functions in <picture><source srcset="form_1082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^\text{curl}$" src="form_1082.png"/></picture> is that they are in general discontinuous &ndash; but that if you draw a line in 2d (or a surface in 3d), then the <em>tangential</em> component(s) of the vector field must be continuous across the line (or surface) even though the normal component may not be. As a consequence, the N&eacute;d&eacute;lec element is constructed in such a way that (i) it is <a class="el" href="group__vector__valued.html">vector-valued</a>, (ii) the shape functions are discontinuous, but (iii) the tangential component(s) of the vector field represented by each shape function are continuous across the faces of cells.</p>
+<p>Implementation of N&eacute;d&eacute;lec elements. The N&eacute;d&eacute;lec space is designed to solve problems in which the solution only lives in the space <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^\text{curl}=\{ {\mathbf u} \in L_2: \text{curl}\, {\mathbf u} \in L_2\}$" src="form_1113.png"/></picture>, rather than in the more commonly used space <picture><source srcset="form_1114_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1=\{ u \in L_2: \nabla u \in L_2\}$" src="form_1114.png"/></picture>. In other words, the solution must be a vector field whose curl is square integrable, but for which the gradient may not be square integrable. The typical application for this space (and these elements) is to the Maxwell equations and corresponding simplifications, such as the reduced version of the Maxwell equation that only involves the electric field <picture><source srcset="form_1115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf E$" src="form_1115.png"/></picture> which has to satisfy the equation <picture><source srcset="form_1116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{curl}\, \text{curl}\, {\mathbf E} = 0$" src="form_1116.png"/></picture> in the time independent case when no currents are present, or the equation <picture><source srcset="form_1117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{curl}\,\text{curl}\,{\mathbf A} = 4\pi{\mathbf j}$" src="form_1117.png"/></picture> that the magnetic vector potential <picture><source srcset="form_401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_401.png"/></picture> has to satisfy in the time independent case.</p>
+<p>The defining characteristic of functions in <picture><source srcset="form_1118_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^\text{curl}$" src="form_1118.png"/></picture> is that they are in general discontinuous &ndash; but that if you draw a line in 2d (or a surface in 3d), then the <em>tangential</em> component(s) of the vector field must be continuous across the line (or surface) even though the normal component may not be. As a consequence, the N&eacute;d&eacute;lec element is constructed in such a way that (i) it is <a class="el" href="group__vector__valued.html">vector-valued</a>, (ii) the shape functions are discontinuous, but (iii) the tangential component(s) of the vector field represented by each shape function are continuous across the faces of cells.</p>
 <p>Other properties of the N&eacute;d&eacute;lec element are that (i) it is <a class="el" href="DEALGlossary.html#href_anchor">not a primitive element</a> ; (ii) the shape functions are defined so that certain integrals over the faces are either zero or one, rather than the common case of certain point values being either zero or one.</p>
 <p>We follow the commonly used &ndash; though confusing &ndash; definition of the "degree" of N&eacute;d&eacute;lec elements. Specifically, the "degree" of the element denotes the polynomial degree of the <em>largest complete polynomial subspace</em> contained in the finite element space, even if the space may contain shape functions of higher polynomial degree. The lowest order element is consequently <a class="el" href="classFE__Nedelec.html">FE_Nedelec(0)</a>, i.e., the Raviart-Thomas element "of degree
 zero", even though the functions of this space are in general polynomials of degree one in each variable. This choice of "degree" implies that the approximation order of the function itself is <em>degree+1</em>, as with usual polynomial spaces. The numbering so chosen implies the sequence  </p><p class="formulaDsp">
-<picture><source srcset="form_1083_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   Q_{k+1}
   \stackrel{\text{grad}}{\rightarrow}
   \text{Nedelec}_k
@@ -521,7 +521,7 @@
   \text{RaviartThomas}_k
   \stackrel{\text{div}}{\rightarrow}
   DGQ_{k}
-\]" src="form_1083.png"/></picture>
+\]" src="form_1119.png"/></picture>
 </p>
 <p> Note that this follows the convention of Brezzi and Raviart, though not the one used in the original paper by N&eacute;d&eacute;lec.</p>
 <p>This class is not implemented for the codimension one case (<code>spacedim != dim</code>).</p>
@@ -1373,11 +1373,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -3489,7 +3489,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -4183,7 +4183,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -4291,7 +4291,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -4570,9 +4570,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__NedelecSZ.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__NedelecSZ.html	2024-03-17 21:57:25.471123292 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__NedelecSZ.html	2024-03-17 21:57:25.467123267 +0000
@@ -2253,7 +2253,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 </div>
 </div>
@@ -2897,7 +2897,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -2999,7 +2999,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3283,9 +3283,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -3318,11 +3318,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__NedelecSZ_1_1InternalData.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__NedelecSZ_1_1InternalData.html	2024-03-17 21:57:25.507123514 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__NedelecSZ_1_1InternalData.html	2024-03-17 21:57:25.515123563 +0000
@@ -147,9 +147,9 @@
 class FE_NedelecSZ&lt; dim, spacedim &gt;::InternalData</div><p>Derived Internal data which is used to store cell-independent data. Note that due to the nature of this element, a number of useful pre-computed quantities are stored for the computation of cell-dependent shape functions.</p>
 <p>The main quantities which are stored are associated with edge and face parameterizations. These are: </p><ul>
 <li>
-<picture><source srcset="form_1114_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{i}$" src="form_1114.png"/></picture> - trilinear function, equal to one at the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>-th vertex and zero at all other vertices. </li>
+<picture><source srcset="form_1120_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{i}$" src="form_1120.png"/></picture> - trilinear function, equal to one at the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>-th vertex and zero at all other vertices. </li>
 <li>
-<picture><source srcset="form_1115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_{i}$" src="form_1115.png"/></picture> - linear functional associated with the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>-th vertex. </li>
+<picture><source srcset="form_1121_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_{i}$" src="form_1121.png"/></picture> - linear functional associated with the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>-th vertex. </li>
 </ul>
 <p>The definitions of these functionals, as well as the edge and face parameterizations and edge and face extension parameters, can be found on page 82 of Zaglmayr's thesis. The details of the definition of the globally-defined edge and face orientations can be found on page 67. </p>
 
@@ -280,9 +280,9 @@
       </table>
 </div><div class="memdoc">
 <p>Storage for all possible edge parameterization between vertices. These are required in the computation of edge- and face-based DoFs, which are cell-dependent.</p>
-<p>The edge parameterization of an edge, E, starting at vertex i and ending at vertex <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> is given by <picture><source srcset="form_1116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_{E} = \sigma_{i} - \sigma{j}$" src="form_1116.png"/></picture>.</p>
-<p>sigma_imj_values[q][i][j] stores the value of the edge parameterization connected by vertices <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> at the q-th quadrature point.</p>
-<p>Note that not all of the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> combinations result in valid edges on the hexahedral cell, but they are computed in this fashion for use with non-standard edge and face orientations. </p>
+<p>The edge parameterization of an edge, E, starting at vertex i and ending at vertex <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> is given by <picture><source srcset="form_1122_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_{E} = \sigma_{i} - \sigma{j}$" src="form_1122.png"/></picture>.</p>
+<p>sigma_imj_values[q][i][j] stores the value of the edge parameterization connected by vertices <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> at the q-th quadrature point.</p>
+<p>Note that not all of the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> combinations result in valid edges on the hexahedral cell, but they are computed in this fashion for use with non-standard edge and face orientations. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe__nedelec__sz_8h_source.html#href_anchor">287</a> of file <a class="el" href="fe__nedelec__sz_8h_source.html">fe_nedelec_sz.h</a>.</p>
 
@@ -302,8 +302,8 @@
       </table>
 </div><div class="memdoc">
 <p>Storage for gradients of all possible edge parameterizations between vertices. These are required in the computation of edge- and face-based DoFs, which are cell-dependent. Note that the components of the gradient are constant.</p>
-<p>The edge parameterization of an edge, <picture><source srcset="form_1117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E$" src="form_1117.png"/></picture>, starting at vertex <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> and ending at vertex <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> is given by <picture><source srcset="form_1116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_{E} = \sigma_{i} - \sigma{j}$" src="form_1116.png"/></picture>.</p>
-<p>sigma_imj_grads[i][j][d] stores the gradient of the edge parameterization connected by vertices <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> in component <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>.</p>
+<p>The edge parameterization of an edge, <picture><source srcset="form_1123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E$" src="form_1123.png"/></picture>, starting at vertex <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> and ending at vertex <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> is given by <picture><source srcset="form_1122_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_{E} = \sigma_{i} - \sigma{j}$" src="form_1122.png"/></picture>.</p>
+<p>sigma_imj_grads[i][j][d] stores the gradient of the edge parameterization connected by vertices <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> in component <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>.</p>
 <p>Note that the gradient of the edge parameterization is constant on an edge, so we do not need to store it at every quadrature point. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe__nedelec__sz_8h_source.html#href_anchor">304</a> of file <a class="el" href="fe__nedelec__sz_8h_source.html">fe_nedelec_sz.h</a>.</p>
@@ -366,10 +366,10 @@
       </table>
 </div><div class="memdoc">
 <p>Storage for edge extension parameters at quadrature points. These are stored for the 12 edges such that the global vertex numbering would follow the order defined by the "standard" deal.II cell.</p>
-<p>The edge extension parameter of an edge, <picture><source srcset="form_1117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E$" src="form_1117.png"/></picture>, starting at vertex <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> and ending at vertex <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> is given by <picture><source srcset="form_1118_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{E} = \lambda_{i} +
-\lambda_{j}$" src="form_1118.png"/></picture>.</p>
-<p>Note that under this definition, the values of <picture><source srcset="form_1119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{E}$" src="form_1119.png"/></picture> do not change with the orientation of the edge.</p>
-<p>edge_lambda_values[m][q] stores the edge extension parameter value at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>-th quadrature point on edge <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture>. </p>
+<p>The edge extension parameter of an edge, <picture><source srcset="form_1123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E$" src="form_1123.png"/></picture>, starting at vertex <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> and ending at vertex <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> is given by <picture><source srcset="form_1124_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{E} = \lambda_{i} +
+\lambda_{j}$" src="form_1124.png"/></picture>.</p>
+<p>Note that under this definition, the values of <picture><source srcset="form_1125_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{E}$" src="form_1125.png"/></picture> do not change with the orientation of the edge.</p>
+<p>edge_lambda_values[m][q] stores the edge extension parameter value at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>-th quadrature point on edge <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe__nedelec__sz_8h_source.html#href_anchor">347</a> of file <a class="el" href="fe__nedelec__sz_8h_source.html">fe_nedelec_sz.h</a>.</p>
 
@@ -389,7 +389,7 @@
       </table>
 </div><div class="memdoc">
 <p>Storage for gradients of edge extension parameters in 2d. In this case they are constant. These are stored for the 12 edges such that the global vertex numbering* would follow the order defined by the "standard" deal.II cell.</p>
-<p>edge_lambda_grads_2d[m][d] stores the gradient of the edge extension parameter for component <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> on edge <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture>. </p>
+<p>edge_lambda_grads_2d[m][d] stores the gradient of the edge extension parameter for component <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> on edge <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe__nedelec__sz_8h_source.html#href_anchor">358</a> of file <a class="el" href="fe__nedelec__sz_8h_source.html">fe_nedelec_sz.h</a>.</p>
 
@@ -409,7 +409,7 @@
       </table>
 </div><div class="memdoc">
 <p>Storage for gradients of edge extension parameters in 3d. In this case they are non-constant. These are stored for the 12 edges such that the global vertex numbering* would follow the order defined by the "standard" deal.II cell.</p>
-<p>edge_lambda_grads_3d[m][q][d] stores the gradient of the edge extension parameter for component <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>-th quadrature point on edge m. </p>
+<p>edge_lambda_grads_3d[m][q][d] stores the gradient of the edge extension parameter for component <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>-th quadrature point on edge m. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe__nedelec__sz_8h_source.html#href_anchor">369</a> of file <a class="el" href="fe__nedelec__sz_8h_source.html">fe_nedelec_sz.h</a>.</p>
 
@@ -429,7 +429,7 @@
       </table>
 </div><div class="memdoc">
 <p>Storage for 2nd derivatives of edge extension parameters in 3d, which are constant across the cell. These are stored for the 12 edges such that the global vertex numbering* would follow the order defined by the "standard" deal.II cell.</p>
-<p>edge_lambda_gradgrads_3d[m][d1][d2] stores the 2nd derivatives of the edge extension parameters with respect to components d1 and d2 on edge <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture>. </p>
+<p>edge_lambda_gradgrads_3d[m][d1][d2] stores the 2nd derivatives of the edge extension parameters with respect to components d1 and d2 on edge <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe__nedelec__sz_8h_source.html#href_anchor">381</a> of file <a class="el" href="fe__nedelec__sz_8h_source.html">fe_nedelec_sz.h</a>.</p>
 
@@ -449,10 +449,10 @@
       </table>
 </div><div class="memdoc">
 <p>Storage for the face extension parameters. These are stored for the 6 faces such that the global vertex numbering would follow the order defined by the "standard" deal.II cell.</p>
-<p>The face extension parameter of a face, F, defined by the vertices v1, v2, v3, v4 is given by  <picture><source srcset="form_1120_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{F} = \lambda_{v1} + \lambda_{v2} + \lambda_{v3} +
-\lambda_{v4}$" src="form_1120.png"/></picture>.</p>
-<p>Note that under this definition, the values of <picture><source srcset="form_1121_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{F}$" src="form_1121.png"/></picture> do not change with the orientation of the face.</p>
-<p>face_lambda_values[m][q] stores the face extension parameter value at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>-th quadrature point on face <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture>. </p>
+<p>The face extension parameter of a face, F, defined by the vertices v1, v2, v3, v4 is given by  <picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{F} = \lambda_{v1} + \lambda_{v2} + \lambda_{v3} +
+\lambda_{v4}$" src="form_1126.png"/></picture>.</p>
+<p>Note that under this definition, the values of <picture><source srcset="form_1127_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{F}$" src="form_1127.png"/></picture> do not change with the orientation of the face.</p>
+<p>face_lambda_values[m][q] stores the face extension parameter value at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>-th quadrature point on face <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe__nedelec__sz_8h_source.html#href_anchor">399</a> of file <a class="el" href="fe__nedelec__sz_8h_source.html">fe_nedelec_sz.h</a>.</p>
 
@@ -472,7 +472,7 @@
       </table>
 </div><div class="memdoc">
 <p>Storage for gradients of face extension parameters. These are stored for the 6 faces such that the global vertex numbering would follow the order defined by the "standard" deal.II cell.</p>
-<p>face_lambda_grads[m][d] stores the gradient of the face extension parameters for component <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> on face <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture>. </p>
+<p>face_lambda_grads[m][d] stores the gradient of the face extension parameters for component <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> on face <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe__nedelec__sz_8h_source.html#href_anchor">409</a> of file <a class="el" href="fe__nedelec__sz_8h_source.html">fe_nedelec_sz.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Nothing.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Nothing.html	2024-03-17 21:57:25.667124502 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Nothing.html	2024-03-17 21:57:25.667124502 +0000
@@ -466,7 +466,7 @@
 class FE_Nothing&lt; dim, spacedim &gt;</div><p>Definition of a finite element space with zero degrees of freedom and that, consequently, can only represent a single function: the zero function.</p>
 <p>This class is useful (in the context of an hp-method) to represent empty cells in the triangulation on which no degrees of freedom should be allocated, or to describe a field that is extended by zero to a part of the domain where we don't need it. Thus a triangulation may be divided into two regions: an active region where normal elements are used, and an inactive region where <a class="el" href="classFE__Nothing.html">FE_Nothing</a> elements are used. The <a class="el" href="classDoFHandler.html">DoFHandler</a> will therefore assign no degrees of freedom to the <a class="el" href="classFE__Nothing.html">FE_Nothing</a> cells, and this subregion is therefore implicitly deleted from the computation. <a class="el" href="step_10.html">step-10</a> and <a class="el" href="step_46.html">step-46</a> show use cases for this element. An interesting application for this element is also presented in the paper <b>[Cangiani2012]</b>.</p>
 <h3><a class="el" href="classFE__Nothing.html">FE_Nothing</a> as seen as a function space</h3>
-<p>Finite elements are often best interpreted as forming a <a href="https://en.wikipedia.org/wiki/Function_space">function space</a>, i.e., a set of functions that form a <a href="https://en.wikipedia.org/wiki/Vector_space">vector space</a>. One can indeed interpret <a class="el" href="classFE__Nothing.html">FE_Nothing</a> in this light: It corresponds to the function space <picture><source srcset="form_1095_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h=\{0\}$" src="form_1095.png"/></picture>, i.e., the set of functions that are zero everywhere. (The constructor can take an argument that, if greater than one, extends the space to one of vector-valued functions with more than one component, with all components equal to zero everywhere.) Indeed, this is a vector space since every linear combination of elements in the vector space is also an element in the vector space, as is every multiple of the single element zero. It is obvious that the function space has no degrees of freedom, thus the name of the class.</p>
+<p>Finite elements are often best interpreted as forming a <a href="https://en.wikipedia.org/wiki/Function_space">function space</a>, i.e., a set of functions that form a <a href="https://en.wikipedia.org/wiki/Vector_space">vector space</a>. One can indeed interpret <a class="el" href="classFE__Nothing.html">FE_Nothing</a> in this light: It corresponds to the function space <picture><source srcset="form_1128_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h=\{0\}$" src="form_1128.png"/></picture>, i.e., the set of functions that are zero everywhere. (The constructor can take an argument that, if greater than one, extends the space to one of vector-valued functions with more than one component, with all components equal to zero everywhere.) Indeed, this is a vector space since every linear combination of elements in the vector space is also an element in the vector space, as is every multiple of the single element zero. It is obvious that the function space has no degrees of freedom, thus the name of the class.</p>
 <h3><a class="el" href="classFE__Nothing.html">FE_Nothing</a> in combination with other elements</h3>
 <p>In situations such as those of <a class="el" href="step_46.html">step-46</a>, one uses <a class="el" href="classFE__Nothing.html">FE_Nothing</a> on cells where one is not interested in a solution variable. For example, in fluid structure interaction problems, the fluid velocity is only defined on cells inside the fluid part of the domain. One then uses <a class="el" href="classFE__Nothing.html">FE_Nothing</a> on cells in the solid part of the domain to describe the finite element space for the velocity. In other words, the velocity lives everywhere conceptually, but it is identically zero in those parts of the domain where it is not of interest and doesn't use up any degrees of freedom there.</p>
 <p>The question is what happens at the interface between areas where one is interested in the solution (and uses a "normal" finite element) and where one is not interested (and uses <a class="el" href="classFE__Nothing.html">FE_Nothing</a>): Should the solution at that interface be zero &ndash; i.e., we consider a "continuous" finite element field that happens to be zero in that area where <a class="el" href="classFE__Nothing.html">FE_Nothing</a> is used &ndash; or is there no requirement for continuity at the interface. In the deal.II language, this is encoded by what the function <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::compare_for_domination()</a> returns: If the <a class="el" href="classFE__Nothing.html">FE_Nothing</a> "dominates", then the solution must be zero at the interface; if it does not, then there is no requirement and one can think of <a class="el" href="classFE__Nothing.html">FE_Nothing</a> as a function space that is in general discontinuous (i.e., there is no requirement for any kind of continuity at cell interfaces) but on every cell equal to zero.</p>
@@ -2274,7 +2274,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -2968,7 +2968,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3076,7 +3076,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3355,9 +3355,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -3392,11 +3392,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__P1NC.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__P1NC.html	2024-03-17 21:57:25.811125392 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__P1NC.html	2024-03-17 21:57:25.819125441 +0000
@@ -473,13 +473,13 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>Implementation of the scalar version of the P1 nonconforming finite element, a piecewise linear element on quadrilaterals in 2d. This implementation is only for 2d cells in a 2d space (i.e., codimension 0).</p>
 <p>Unlike the usual continuous, <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture> conforming finite elements, the P1 nonconforming element does not enforce continuity across edges. However, it requires the continuity in an integral sense: any function in the space should have the same integral values on two sides of the common edge shared by two adjacent elements.</p>
-<p>Thus, each function in the nonconforming element space can be discontinuous, and consequently not included in <picture><source srcset="form_1096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1_0$" src="form_1096.png"/></picture>, just like the basis functions in Discontinuous Galerkin (DG) finite element spaces. On the other hand, basis functions in DG spaces are completely discontinuous across edges without any relation between the values from both sides. This is a reason why usual weak formulations for DG schemes contain additional penalty terms for jump across edges to control discontinuity. However, nonconforming elements usually do not need additional terms in their weak formulations because their integrals along edges are the same from both sides, i.e., there is <em>some level</em> of continuity.</p>
+<p>Thus, each function in the nonconforming element space can be discontinuous, and consequently not included in <picture><source srcset="form_1129_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1_0$" src="form_1129.png"/></picture>, just like the basis functions in Discontinuous Galerkin (DG) finite element spaces. On the other hand, basis functions in DG spaces are completely discontinuous across edges without any relation between the values from both sides. This is a reason why usual weak formulations for DG schemes contain additional penalty terms for jump across edges to control discontinuity. However, nonconforming elements usually do not need additional terms in their weak formulations because their integrals along edges are the same from both sides, i.e., there is <em>some level</em> of continuity.</p>
 <h3>Dice Rule</h3>
 <p>Since any function in the P1 nonconforming space is piecewise linear on each element, the function value at the midpoint of each edge is same as the mean value on the edge. Thus the continuity of the integral value across each edge is equivalent to the continuity of the midpoint value of each edge in this case.</p>
 <p>Thus for the P1 nonconforming element, the function values at midpoints on edges of a cell are important. The first attempt to define (local) degrees of freedom (DoFs) on a quadrilateral is by using midpoint values of a function.</p>
 <p>However, these 4 functionals are not linearly independent because a linear function on 2d is uniquely determined by only 3 independent values. A simple observation reads that any linear function on a quadrilateral should satisfy the 'dice rule': the sum of two function values at the midpoints of the edge pair on opposite sides of a cell is equal to the sum of those at the midpoints of the other edge pair. This is called the 'dice rule' because the number of points on opposite sides of a dice always adds up to the same number as well (in the case of dice, to seven).</p>
-<p>In formulas, the dice rule is written as <picture><source srcset="form_1097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi(m_0) + \phi(m_1) = \phi(m_2) +
-  \phi(m_3)$" src="form_1097.png"/></picture> for all <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> in the function space where <picture><source srcset="form_1098_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_j$" src="form_1098.png"/></picture> is the midpoint of the edge <picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_j$" src="form_1099.png"/></picture>. Here, we assume the standard numbering convention for edges used in deal.II and described in class <a class="el" href="structGeometryInfo.html">GeometryInfo</a>.</p>
+<p>In formulas, the dice rule is written as <picture><source srcset="form_1130_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi(m_0) + \phi(m_1) = \phi(m_2) +
+  \phi(m_3)$" src="form_1130.png"/></picture> for all <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> in the function space where <picture><source srcset="form_1131_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_j$" src="form_1131.png"/></picture> is the midpoint of the edge <picture><source srcset="form_1132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_j$" src="form_1132.png"/></picture>. Here, we assume the standard numbering convention for edges used in deal.II and described in class <a class="el" href="structGeometryInfo.html">GeometryInfo</a>.</p>
 <p>Conversely if 4 values at midpoints satisfying the dice rule are given, then there always exists the unique linear function which coincides with 4 midpoints values.</p>
 <p>Due to the dice rule, three values at any three midpoints can determine the last value at the last midpoint. It means that the number of independent local functionals on a cell is 3, and this is also the dimension of the linear polynomial space on a cell in 2d.</p>
 <h3>Shape functions</h3>
@@ -495,11 +495,11 @@
 *  |                   |
 *  |                   |
 *  0---------|---------1
-*  </pre><p>For each vertex <picture><source srcset="form_212_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_j$" src="form_212.png"/></picture> of given cell, there are two edges of which <picture><source srcset="form_212_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_j$" src="form_212.png"/></picture> is one of end points. Consider a linear function such that it has value 0.5 at the midpoints of two adjacent edges, and 0.0 at the two midpoints of the other edges. Note that the set of these values satisfies the dice rule which is described above. We denote such a function associated with vertex <picture><source srcset="form_212_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_j$" src="form_212.png"/></picture> by <picture><source srcset="form_1013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_j$" src="form_1013.png"/></picture>. Then the set of 4 shape functions is a partition of unity on a cell: <picture><source srcset="form_1100_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sum_{j=0}^{3} \phi_j = 1$" src="form_1100.png"/></picture>. (This is easy to see: at each edge midpoint, the sum of the four function adds up to one because two functions have value 0.5 and the other value 0.0. Because the function is globally linear, the only function that can have value 1 at four points must also be globally equal to one.)</p>
-<p>The following figures represent <picture><source srcset="form_1013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_j$" src="form_1013.png"/></picture> for <picture><source srcset="form_1101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=0,\cdots,3$" src="form_1101.png"/></picture> with their midpoint values:</p>
+*  </pre><p>For each vertex <picture><source srcset="form_186_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_j$" src="form_186.png"/></picture> of given cell, there are two edges of which <picture><source srcset="form_186_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_j$" src="form_186.png"/></picture> is one of end points. Consider a linear function such that it has value 0.5 at the midpoints of two adjacent edges, and 0.0 at the two midpoints of the other edges. Note that the set of these values satisfies the dice rule which is described above. We denote such a function associated with vertex <picture><source srcset="form_186_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_j$" src="form_186.png"/></picture> by <picture><source srcset="form_967_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_j$" src="form_967.png"/></picture>. Then the set of 4 shape functions is a partition of unity on a cell: <picture><source srcset="form_1133_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sum_{j=0}^{3} \phi_j = 1$" src="form_1133.png"/></picture>. (This is easy to see: at each edge midpoint, the sum of the four function adds up to one because two functions have value 0.5 and the other value 0.0. Because the function is globally linear, the only function that can have value 1 at four points must also be globally equal to one.)</p>
+<p>The following figures represent <picture><source srcset="form_967_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_j$" src="form_967.png"/></picture> for <picture><source srcset="form_1134_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=0,\cdots,3$" src="form_1134.png"/></picture> with their midpoint values:</p>
 <ul>
 <li>
-<p class="startli">shape function <picture><source srcset="form_1102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_0$" src="form_1102.png"/></picture>: </p><pre class="fragment">*  +--------0.0--------+
+<p class="startli">shape function <picture><source srcset="form_1135_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_0$" src="form_1135.png"/></picture>: </p><pre class="fragment">*  +--------0.0--------+
 *  |                   |
 *  |                   |
 *  |                   |
@@ -513,7 +513,7 @@
 *  </pre><p class="endli"></p>
 </li>
 <li>
-<p class="startli">shape function <picture><source srcset="form_1103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_1$" src="form_1103.png"/></picture>: </p><pre class="fragment">*  +--------0.0--------+
+<p class="startli">shape function <picture><source srcset="form_1136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_1$" src="form_1136.png"/></picture>: </p><pre class="fragment">*  +--------0.0--------+
 *  |                   |
 *  |                   |
 *  |                   |
@@ -527,7 +527,7 @@
 *  </pre><p class="endli"></p>
 </li>
 <li>
-<p class="startli">shape function <picture><source srcset="form_1104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_2$" src="form_1104.png"/></picture>: </p><pre class="fragment">*  +--------0.5--------+
+<p class="startli">shape function <picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_2$" src="form_1137.png"/></picture>: </p><pre class="fragment">*  +--------0.5--------+
 *  |                   |
 *  |                   |
 *  |                   |
@@ -541,7 +541,7 @@
 *  </pre><p class="endli"></p>
 </li>
 <li>
-<p class="startli">shape function <picture><source srcset="form_1105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_3$" src="form_1105.png"/></picture>: </p><pre class="fragment">*  +--------0.5--------+
+<p class="startli">shape function <picture><source srcset="form_1138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_3$" src="form_1138.png"/></picture>: </p><pre class="fragment">*  +--------0.5--------+
 *  |                   |
 *  |                   |
 *  |                   |
@@ -871,8 +871,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the coefficients of 4 local linear shape functions <picture><source srcset="form_1106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_j(x,y) = a
-x + b y + c$" src="form_1106.png"/></picture> on given cell. For each local shape function, the array consists of three coefficients is in order of a,b and c. </p>
+<p>Return the coefficients of 4 local linear shape functions <picture><source srcset="form_1139_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_j(x,y) = a
+x + b y + c$" src="form_1139.png"/></picture> on given cell. For each local shape function, the array consists of three coefficients is in order of a,b and c. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe__p1nc_8cc_source.html#href_anchor">89</a> of file <a class="el" href="fe__p1nc_8cc_source.html">fe_p1nc.cc</a>.</p>
 
@@ -2300,7 +2300,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 </div>
 </div>
@@ -2944,7 +2944,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3046,7 +3046,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3330,9 +3330,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -3365,11 +3365,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Poly.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Poly.html	2024-03-17 21:57:25.979126430 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Poly.html	2024-03-17 21:57:25.987126479 +0000
@@ -1400,17 +1400,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -1445,21 +1445,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -2397,7 +2397,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3091,7 +3091,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3199,7 +3199,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3509,9 +3509,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -3546,11 +3546,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PolyFace.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PolyFace.html	2024-03-17 21:57:26.143127443 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PolyFace.html	2024-03-17 21:57:26.143127443 +0000
@@ -2271,7 +2271,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -2965,7 +2965,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3073,7 +3073,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3383,9 +3383,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -3420,11 +3420,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PolyTensor.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PolyTensor.html	2024-03-17 21:57:26.299128406 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PolyTensor.html	2024-03-17 21:57:26.307128456 +0000
@@ -493,12 +493,12 @@
 <p>Similarly, in many cases, node functionals depend on the shape of the mesh cell, since they evaluate normal or tangential components on the faces. In order to allow for a set of transformations, the variable <a class="el" href="#href_anchor">mapping_kind</a> has been introduced. It needs be set in the constructor of a derived class.</p>
 <p>Any derived class must decide on the polynomial space to use. This polynomial space should be implemented simply as a set of vector valued polynomials like <a class="el" href="classPolynomialsBDM.html">PolynomialsBDM</a> and <a class="el" href="classPolynomialsRaviartThomas.html">PolynomialsRaviartThomas</a>. In order to facilitate this implementation, which basis the polynomial space chooses is not of importance to the current class &ndash; as described next, this class handles the transformation from the basis chosen by the polynomial space template argument to the basis we want to use for finite element computations internally.</p>
 <h4>Determining the correct basis</h4>
-<p>In most cases, the basis used by the class that describes the polynomial space, <picture><source srcset="form_1122_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\tilde\varphi_j(\hat{\mathbf x})\}$" src="form_1122.png"/></picture>, does not match the one we want to use for the finite element description, <picture><source srcset="form_1123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi_j(\hat{\mathbf x})\}$" src="form_1123.png"/></picture>. Rather, we need to express the finite element shape functions as a linear combination of the basis provided by the polynomial space:  </p><p class="formulaDsp">
-<picture><source srcset="form_1124_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>In most cases, the basis used by the class that describes the polynomial space, <picture><source srcset="form_1147_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\tilde\varphi_j(\hat{\mathbf x})\}$" src="form_1147.png"/></picture>, does not match the one we want to use for the finite element description, <picture><source srcset="form_1148_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi_j(\hat{\mathbf x})\}$" src="form_1148.png"/></picture>. Rather, we need to express the finite element shape functions as a linear combination of the basis provided by the polynomial space:  </p><p class="formulaDsp">
+<picture><source srcset="form_1149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \varphi_j = \sum_k c_{jk} \tilde\varphi_j.
-\end{align*}" src="form_1124.png"/></picture>
+\end{align*}" src="form_1149.png"/></picture>
 </p>
-<p> These expansion coefficients <picture><source srcset="form_1125_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_{jk}$" src="form_1125.png"/></picture> are typically computed in the constructors of derived classes. To facilitate this, this class at first (unless told otherwise, see below), assumes that the shape functions should be exactly the ones provided by the polynomial space. In the constructor of the derived class, one then typically has code of the form </p><div class="fragment"><div class="line"><span class="comment">// Now compute the inverse node matrix, generating the correct</span></div>
+<p> These expansion coefficients <picture><source srcset="form_1150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_{jk}$" src="form_1150.png"/></picture> are typically computed in the constructors of derived classes. To facilitate this, this class at first (unless told otherwise, see below), assumes that the shape functions should be exactly the ones provided by the polynomial space. In the constructor of the derived class, one then typically has code of the form </p><div class="fragment"><div class="line"><span class="comment">// Now compute the inverse node matrix, generating the correct</span></div>
 <div class="line"><span class="comment">// basis functions from the raw ones. For a discussion of what</span></div>
 <div class="line"><span class="comment">// exactly happens here, see FETools::compute_node_matrix.</span></div>
 <div class="line"><span class="keyword">const</span> <a class="code hl_class" href="classFullMatrix.html">FullMatrix&lt;double&gt;</a> M = <a class="code hl_function" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix</a>(*<span class="keyword">this</span>);</div>
@@ -511,7 +511,7 @@
 <div class="ttc" id="aclassFullMatrix_html"><div class="ttname"><a href="classFullMatrix.html">FullMatrix</a></div><div class="ttdef"><b>Definition</b> <a href="full__matrix_8h_source.html#href_anchor">full_matrix.h:79</a></div></div>
 <div class="ttc" id="aclassFullMatrix_html_a940ea10266174ad366d10bd806177ace"><div class="ttname"><a href="classFullMatrix.html#href_anchor">FullMatrix::invert</a></div><div class="ttdeci">void invert(const FullMatrix&lt; number2 &gt; &amp;M)</div></div>
 <div class="ttc" id="anamespaceFETools_html_aec3d342cc4d853430f07ad49d8bf2eab"><div class="ttname"><a href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix</a></div><div class="ttdeci">FullMatrix&lt; double &gt; compute_node_matrix(const FiniteElement&lt; dim, spacedim &gt; &amp;fe)</div></div>
-</div><!-- fragment --><p> The <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function explains in more detail what exactly it computes, and how; in any case, the result is that <code>inverse_node_matrix</code> now contains the expansion coefficients <picture><source srcset="form_1125_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_{jk}$" src="form_1125.png"/></picture>, and the fact that this block of code now sets the matrix to a non-zero size indicates to the functions of the current class that it should from then on use the expanded basis, <picture><source srcset="form_1123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi_j(\hat{\mathbf x})\}$" src="form_1123.png"/></picture>, and no longer the original, "raw" basis <picture><source srcset="form_1122_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\tilde\varphi_j(\hat{\mathbf x})\}$" src="form_1122.png"/></picture> when asked for values or derivatives of shape functions.</p>
+</div><!-- fragment --><p> The <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function explains in more detail what exactly it computes, and how; in any case, the result is that <code>inverse_node_matrix</code> now contains the expansion coefficients <picture><source srcset="form_1150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_{jk}$" src="form_1150.png"/></picture>, and the fact that this block of code now sets the matrix to a non-zero size indicates to the functions of the current class that it should from then on use the expanded basis, <picture><source srcset="form_1148_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi_j(\hat{\mathbf x})\}$" src="form_1148.png"/></picture>, and no longer the original, "raw" basis <picture><source srcset="form_1147_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\tilde\varphi_j(\hat{\mathbf x})\}$" src="form_1147.png"/></picture> when asked for values or derivatives of shape functions.</p>
 <p>In order for this scheme to work, it is important to ensure that the size of the <code>inverse_node_matrix</code> be zero at the time when <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> is called; thus, the call to this function cannot be inlined into the last line &ndash; the result of the call really does need to be stored in the temporary object <code>M</code>.</p>
 <h4>Setting the transformation</h4>
 <p>In most cases, vector valued basis functions must be transformed when mapped from the reference cell to the actual grid cell. These transformations can be selected from the set MappingKind and stored in <a class="el" href="#href_anchor">mapping_kind</a>. Therefore, each constructor should contain a line like: </p><div class="fragment"><div class="line">this-&gt;<a class="code hl_variable" href="#href_anchor">mapping_kind</a> = {<a class="code hl_enumvalue" href="group__mapping.html#href_anchor">mapping_none</a>};</div>
@@ -2308,7 +2308,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3002,7 +3002,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3110,7 +3110,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3420,9 +3420,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -3457,11 +3457,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PyramidDGP.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PyramidDGP.html	2024-03-17 21:57:26.455129370 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PyramidDGP.html	2024-03-17 21:57:26.463129419 +0000
@@ -700,11 +700,11 @@
 </div><div class="memdoc">
 
 <p></p>
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -1773,17 +1773,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -1818,21 +1818,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -2708,7 +2708,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3402,7 +3402,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3510,7 +3510,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3820,9 +3820,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PyramidP.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PyramidP.html	2024-03-17 21:57:26.603130285 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PyramidP.html	2024-03-17 21:57:26.611130333 +0000
@@ -837,11 +837,11 @@
 </div><div class="memdoc">
 
 <p></p>
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -1910,17 +1910,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -1955,21 +1955,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -2724,7 +2724,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3418,7 +3418,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3526,7 +3526,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3836,9 +3836,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PyramidPoly.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PyramidPoly.html	2024-03-17 21:57:26.759131247 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__PyramidPoly.html	2024-03-17 21:57:26.763131272 +0000
@@ -642,11 +642,11 @@
 </div><div class="memdoc">
 
 <p></p>
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -1715,17 +1715,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -1760,21 +1760,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -2712,7 +2712,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3406,7 +3406,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3514,7 +3514,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3824,9 +3824,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q.html	2024-03-17 21:57:26.923132261 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q.html	2024-03-17 21:57:26.927132285 +0000
@@ -484,7 +484,7 @@
 <p>The constructor creates a <a class="el" href="classTensorProductPolynomials.html">TensorProductPolynomials</a> object that includes the tensor product of <code>LagrangeEquidistant</code> polynomials of degree <code>p</code>. This <code><a class="el" href="classTensorProductPolynomials.html">TensorProductPolynomials</a></code> object provides all values and derivatives of the shape functions. In case a quadrature rule is given, the constructor creates a <a class="el" href="classTensorProductPolynomials.html">TensorProductPolynomials</a> object that includes the tensor product of <code>Lagrange</code> polynomials with the support points from <code>points</code>.</p>
 <p>Furthermore the constructor fills the <code>interface_constraints</code>, the <code>prolongation</code> (embedding) and the <code>restriction</code> matrices. These are implemented only up to a certain degree and may not be available for very high polynomial degree.</p>
 <h3>Unit support point distribution and conditioning of interpolation</h3>
-<p>When constructing an <a class="el" href="classFE__Q.html">FE_Q</a> element at polynomial degrees one or two, equidistant support points at 0 and 1 (linear case) or 0, 0.5, and 1 (quadratic case) are used. The unit support or nodal points <em>x<sub>i</sub></em> are those points where the <em>j</em>th Lagrange polynomial satisfies the <picture><source srcset="form_144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_{ij}$" src="form_144.png"/></picture> property, i.e., where one polynomial is one and all the others are zero. For higher polynomial degrees, the support points are non-equidistant by default, and chosen to be the support points of the <code>(degree+1)</code>-order Gauss-Lobatto quadrature rule. This point distribution yields well-conditioned Lagrange interpolation at arbitrary polynomial degrees. By contrast, polynomials based on equidistant points get increasingly ill-conditioned as the polynomial degree increases. In interpolation, this effect is known as the Runge phenomenon. For Galerkin methods, the Runge phenomenon is typically not visible in the solution quality but rather in the condition number of the associated system matrices. For example, the elemental <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of equidistant points at degree 10 has condition number 2.6e6, whereas the condition number for Gauss-Lobatto points is around 400.</p>
+<p>When constructing an <a class="el" href="classFE__Q.html">FE_Q</a> element at polynomial degrees one or two, equidistant support points at 0 and 1 (linear case) or 0, 0.5, and 1 (quadratic case) are used. The unit support or nodal points <em>x<sub>i</sub></em> are those points where the <em>j</em>th Lagrange polynomial satisfies the <picture><source srcset="form_118_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_{ij}$" src="form_118.png"/></picture> property, i.e., where one polynomial is one and all the others are zero. For higher polynomial degrees, the support points are non-equidistant by default, and chosen to be the support points of the <code>(degree+1)</code>-order Gauss-Lobatto quadrature rule. This point distribution yields well-conditioned Lagrange interpolation at arbitrary polynomial degrees. By contrast, polynomials based on equidistant points get increasingly ill-conditioned as the polynomial degree increases. In interpolation, this effect is known as the Runge phenomenon. For Galerkin methods, the Runge phenomenon is typically not visible in the solution quality but rather in the condition number of the associated system matrices. For example, the elemental <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of equidistant points at degree 10 has condition number 2.6e6, whereas the condition number for Gauss-Lobatto points is around 400.</p>
 <p>The Gauss-Lobatto points in 1d include the end points 0 and +1 of the unit interval. The interior points are shifted towards the end points, which gives a denser point distribution close to the element boundary.</p>
 <p>If combined with Gauss-Lobatto quadrature, <a class="el" href="classFE__Q.html">FE_Q</a> based on the default support points gives diagonal mass matrices. This case is demonstrated in <a class="el" href="step_48.html">step-48</a>. However, this element can be combined with arbitrary quadrature rules through the usual <a class="el" href="classFEValues.html">FEValues</a> approach, including full Gauss quadrature. In the general case, the mass matrix is non-diagonal.</p>
 <h3>Numbering of the degrees of freedom (DoFs)</h3>
@@ -670,9 +670,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> element, shape function 0 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> element, shape function 0 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> element, shape function 1  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> element, shape function 1  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -685,9 +685,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> element, shape function 2 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> element, shape function 2 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> element, shape function 3  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> element, shape function 3  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -700,9 +700,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> element, shape function 4 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> element, shape function 4 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> element, shape function 5  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> element, shape function 5  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -715,9 +715,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> element, shape function 6 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> element, shape function 6 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> element, shape function 7  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> element, shape function 7  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -727,7 +727,7 @@
  <p class="endtd"></p>
 </td><td align="center"></td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> element, shape function 8 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> element, shape function 8 </p>
 <p class="endtd"></p>
 </td><td align="center"></td></tr>
 </table>
@@ -896,9 +896,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 0 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 0 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 1  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 1  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -911,9 +911,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 2 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 2 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 3  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 3  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -926,9 +926,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 4 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 4 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 5  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 5  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -941,9 +941,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 6 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 6 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 7  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 7  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -956,9 +956,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 8 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 8 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 9  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 9  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -971,9 +971,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 10 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 10 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 11  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 11  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -986,9 +986,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 12 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 12 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 13  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 13  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -1001,9 +1001,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 14 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 14 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 15  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 15  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -1016,9 +1016,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 16 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 16 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 17  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 17  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -1031,9 +1031,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 18 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 18 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 19  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 19  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -1046,9 +1046,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 20 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 20 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> element, shape function 21  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> element, shape function 21  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__Base.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__Base.html	2024-03-17 21:57:27.079133224 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__Base.html	2024-03-17 21:57:27.079133224 +0000
@@ -2287,17 +2287,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -2332,21 +2332,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -3587,7 +3587,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3695,7 +3695,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3974,9 +3974,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -4011,11 +4011,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__Bubbles.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__Bubbles.html	2024-03-17 21:57:27.227134138 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__Bubbles.html	2024-03-17 21:57:27.235134188 +0000
@@ -485,17 +485,17 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim&gt;<br />
-class FE_Q_Bubbles&lt; dim, spacedim &gt;</div><p>Implementation of a scalar Lagrange finite element <picture><source srcset="form_1132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_p^+$" src="form_1132.png"/></picture> that yields the finite element space of continuous, piecewise polynomials of degree <code>p</code> in each coordinate direction plus some (non-normalized) bubble enrichment space spanned by the additional shape function  <picture><source srcset="form_1133_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(\mathbf x)
+class FE_Q_Bubbles&lt; dim, spacedim &gt;</div><p>Implementation of a scalar Lagrange finite element <picture><source srcset="form_1156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_p^+$" src="form_1156.png"/></picture> that yields the finite element space of continuous, piecewise polynomials of degree <code>p</code> in each coordinate direction plus some (non-normalized) bubble enrichment space spanned by the additional shape function  <picture><source srcset="form_1157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(\mathbf x)
 = 2^{p-1}\left(x_j-\frac 12\right)^{p-1}
-\left[\prod_{i=0}^{dim-1}(x_i(1-x_i))\right]$" src="form_1133.png"/></picture>. for <picture><source srcset="form_868_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=0,\ldots,dim-1$" src="form_868.png"/></picture>. If <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> is one, then the first factor disappears and one receives the usual bubble function centered at the mid-point of the cell. Because these last shape functions have polynomial degree is <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>, the overall polynomial degree of the shape functions in the space described by this class is <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>.</p>
+\left[\prod_{i=0}^{dim-1}(x_i(1-x_i))\right]$" src="form_1157.png"/></picture>. for <picture><source srcset="form_878_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=0,\ldots,dim-1$" src="form_878.png"/></picture>. If <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> is one, then the first factor disappears and one receives the usual bubble function centered at the mid-point of the cell. Because these last shape functions have polynomial degree is <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>, the overall polynomial degree of the shape functions in the space described by this class is <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>.</p>
 <p>This class is realized using tensor product polynomials based on equidistant or given support points, in the same way as one can provide support points to the <a class="el" href="classFE__Q.html">FE_Q</a> class's constructors.</p>
 <p>For more information about the <code>spacedim</code> template parameter check the documentation of the <a class="el" href="classFiniteElement.html">FiniteElement</a> class, or the one of <a class="el" href="classTriangulation.html">Triangulation</a>.</p>
-<p>Due to the fact that the enrichments are small almost everywhere for large <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>, the condition number for the mass and <a class="el" href="DEALGlossary.html#href_anchor">stiffness matrix</a> quickly increaseses with increasing <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>. Below you see a comparison with <a class="el" href="classFE__Q.html">FE_Q</a>(<a class="el" href="classQGaussLobatto.html">QGaussLobatto</a>(p+1)) for dim=1.</p>
+<p>Due to the fact that the enrichments are small almost everywhere for large <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>, the condition number for the mass and <a class="el" href="DEALGlossary.html#href_anchor">stiffness matrix</a> quickly increaseses with increasing <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>. Below you see a comparison with <a class="el" href="classFE__Q.html">FE_Q</a>(<a class="el" href="classQGaussLobatto.html">QGaussLobatto</a>(p+1)) for dim=1.</p>
 <p align="center"></p>
 <div class="image">
 <img src="fe_q_bubbles_conditioning.png" alt=""/>
 </div>
- <p>Therefore, this element should be used with care for <picture><source srcset="form_1134_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p&gt;3$" src="form_1134.png"/></picture>.</p>
+ <p>Therefore, this element should be used with care for <picture><source srcset="form_1158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p&gt;3$" src="form_1158.png"/></picture>.</p>
 <h3>Implementation</h3>
 <p>The constructor creates a <a class="el" href="classTensorProductPolynomials.html">TensorProductPolynomials</a> object that includes the tensor product of <code>LagrangeEquidistant</code> polynomials of degree <code>p</code> plus the bubble enrichments. This <code><a class="el" href="classTensorProductPolynomialsBubbles.html">TensorProductPolynomialsBubbles</a></code> object provides all values and derivatives of the shape functions. In case a quadrature rule is given, the constructor creates a <a class="el" href="classTensorProductPolynomialsBubbles.html">TensorProductPolynomialsBubbles</a> object that includes the tensor product of <code>Lagrange</code> polynomials with the support points from <code>points</code> and the bubble enrichments as defined above.</p>
 <p>Furthermore the constructor fills the <code>interface_constrains</code>, the <code>prolongation</code> (embedding) and the <code>restriction</code> matrices.</p>
@@ -714,11 +714,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -2497,17 +2497,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -2542,21 +2542,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -3704,7 +3704,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3812,7 +3812,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -4091,9 +4091,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__DG0.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__DG0.html	2024-03-17 21:57:27.383135102 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__DG0.html	2024-03-17 21:57:27.383135102 +0000
@@ -885,11 +885,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -2666,17 +2666,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -2711,21 +2711,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -3873,7 +3873,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3981,7 +3981,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -4260,9 +4260,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__Hierarchical.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__Hierarchical.html	2024-03-17 21:57:27.551136140 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__Hierarchical.html	2024-03-17 21:57:27.555136164 +0000
@@ -520,7 +520,7 @@
 <h3>Numbering of the degrees of freedom (DoFs)</h3>
 <p>The original ordering of the shape functions represented by the <a class="el" href="classTensorProductPolynomials.html">TensorProductPolynomials</a> is a tensor product numbering. However, the shape functions on a cell are renumbered beginning with the shape functions whose support points are at the vertices, then on the line, on the quads, and finally (for 3d) on the hexes. To be explicit, these numberings are listed in the following:</p>
 <h4>Q1 elements</h4>
-<p>The <picture><source srcset="form_1135_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^H$" src="form_1135.png"/></picture> element is of polynomial degree one and, consequently, is exactly the same as the <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> element in class <a class="el" href="classFE__Q.html">FE_Q</a>. In particular, the shape function are defined in the exact same way:</p>
+<p>The <picture><source srcset="form_1159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^H$" src="form_1159.png"/></picture> element is of polynomial degree one and, consequently, is exactly the same as the <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> element in class <a class="el" href="classFE__Q.html">FE_Q</a>. In particular, the shape function are defined in the exact same way:</p>
 <ul>
 <li>
 <p class="startli">1d case: </p><pre class="fragment">*      0-------1
@@ -576,9 +576,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1135_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^H$" src="form_1135.png"/></picture> element, shape function 0 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^H$" src="form_1159.png"/></picture> element, shape function 0 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1135_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^H$" src="form_1135.png"/></picture> element, shape function 1  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^H$" src="form_1159.png"/></picture> element, shape function 1  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -591,9 +591,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1135_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^H$" src="form_1135.png"/></picture> element, shape function 2 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^H$" src="form_1159.png"/></picture> element, shape function 2 </p>
 <p class="endtd"></p>
-</td><td align="center"><picture><source srcset="form_1135_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^H$" src="form_1135.png"/></picture> element, shape function 3   </td></tr>
+</td><td align="center"><picture><source srcset="form_1159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^H$" src="form_1159.png"/></picture> element, shape function 3   </td></tr>
 </table>
 <h4>Q2 elements</h4>
 <ul>
@@ -701,9 +701,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1136.png"/></picture> element, shape function 0 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1160.png"/></picture> element, shape function 0 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1136.png"/></picture> element, shape function 1  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1160.png"/></picture> element, shape function 1  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -716,9 +716,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1136.png"/></picture> element, shape function 2 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1160.png"/></picture> element, shape function 2 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1136.png"/></picture> element, shape function 3  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1160.png"/></picture> element, shape function 3  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -731,9 +731,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1136.png"/></picture> element, shape function 4 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1160.png"/></picture> element, shape function 4 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1136.png"/></picture> element, shape function 5  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1160.png"/></picture> element, shape function 5  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -746,9 +746,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1136.png"/></picture> element, shape function 6 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1160.png"/></picture> element, shape function 6 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1136.png"/></picture> element, shape function 7  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1160.png"/></picture> element, shape function 7  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -758,7 +758,7 @@
  <p class="endtd"></p>
 </td><td align="center"></td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1136.png"/></picture> element, shape function 8 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^H$" src="form_1160.png"/></picture> element, shape function 8 </p>
 <p class="endtd"></p>
 </td><td align="center"></td></tr>
 </table>
@@ -789,9 +789,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1137.png"/></picture> element, shape function 0 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1161.png"/></picture> element, shape function 0 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1137.png"/></picture> element, shape function 1  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1161.png"/></picture> element, shape function 1  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -804,9 +804,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1137.png"/></picture> element, shape function 2 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1161.png"/></picture> element, shape function 2 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1137.png"/></picture> element, shape function 3  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1161.png"/></picture> element, shape function 3  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -819,9 +819,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1137.png"/></picture> element, shape function 4 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1161.png"/></picture> element, shape function 4 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1137.png"/></picture> element, shape function 5  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1161.png"/></picture> element, shape function 5  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -834,9 +834,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1137.png"/></picture> element, shape function 6 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1161.png"/></picture> element, shape function 6 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1137.png"/></picture> element, shape function 7  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1161.png"/></picture> element, shape function 7  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -849,9 +849,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1137.png"/></picture> element, shape function 8 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1161.png"/></picture> element, shape function 8 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1137.png"/></picture> element, shape function 9  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1161.png"/></picture> element, shape function 9  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -864,9 +864,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1137.png"/></picture> element, shape function 10 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1161.png"/></picture> element, shape function 10 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1137.png"/></picture> element, shape function 11  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1161.png"/></picture> element, shape function 11  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -879,9 +879,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1137.png"/></picture> element, shape function 12 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1161.png"/></picture> element, shape function 12 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1137.png"/></picture> element, shape function 13  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1161.png"/></picture> element, shape function 13  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
@@ -894,9 +894,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1137.png"/></picture> element, shape function 14 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1161.png"/></picture> element, shape function 14 </p>
 <p class="endtd"></p>
-</td><td align="center"><picture><source srcset="form_1137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1137.png"/></picture> element, shape function 15   </td></tr>
+</td><td align="center"><picture><source srcset="form_1161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3^H$" src="form_1161.png"/></picture> element, shape function 15   </td></tr>
 </table>
 <h4>Q4 elements</h4>
 <ul>
@@ -927,9 +927,9 @@
 </div>
    </td></tr>
 <tr>
-<td align="center"><p class="starttd"><picture><source srcset="form_1138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4^H$" src="form_1138.png"/></picture> element, shape function 0 </p>
+<td align="center"><p class="starttd"><picture><source srcset="form_1162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4^H$" src="form_1162.png"/></picture> element, shape function 0 </p>
 <p class="endtd"></p>
-</td><td align="center"><p class="starttd"><picture><source srcset="form_1138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4^H$" src="form_1138.png"/></picture> element, shape function 1  </p>
+</td><td align="center"><p class="starttd"><picture><source srcset="form_1162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4^H$" src="form_1162.png"/></picture> element, shape function 1  </p>
 <p class="endtd"></p>
 </td></tr>
 <tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__iso__Q1.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__iso__Q1.html	2024-03-17 21:57:27.707137103 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__Q__iso__Q1.html	2024-03-17 21:57:27.707137103 +0000
@@ -487,7 +487,7 @@
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">Stokes/Navier Stokes systems such as the one discussed in <a class="el" href="step_22.html">step-22</a> could be solved with Q2-iso-Q1 elements for velocities instead of <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements. Combined with <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> pressures they give a stable mixed element pair. However, they perform worse than the standard (Taylor-Hood <picture><source srcset="form_1049_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2\times Q_1$" src="form_1049.png"/></picture>) approach in most situations. (See, for example, <b>[Boffi2011]</b> .) This combination of subdivided elements for the velocity and non-subdivided elements for the pressure is sometimes called the "Bercovier-Pironneau
+<p class="startli">Stokes/Navier Stokes systems such as the one discussed in <a class="el" href="step_22.html">step-22</a> could be solved with Q2-iso-Q1 elements for velocities instead of <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements. Combined with <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> pressures they give a stable mixed element pair. However, they perform worse than the standard (Taylor-Hood <picture><source srcset="form_1049_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2\times Q_1$" src="form_1049.png"/></picture>) approach in most situations. (See, for example, <b>[Boffi2011]</b> .) This combination of subdivided elements for the velocity and non-subdivided elements for the pressure is sometimes called the "Bercovier-Pironneau
 element" and dates back to around the same time as the Taylor-Hood element (namely, the mid-1970s). For more information, see the paper by Bercovier and Pironneau from 1979 <b>[Bercovier1979]</b>, and for the origins of the comparable Taylor-Hood element see <b>[Taylor73]</b> from 1973.</p>
 <p class="endli"></p>
 </li>
@@ -2444,17 +2444,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -2489,21 +2489,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -3651,7 +3651,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3759,7 +3759,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -4038,9 +4038,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RT__Bubbles.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RT__Bubbles.html	2024-03-17 21:57:27.863138067 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RT__Bubbles.html	2024-03-17 21:57:27.867138092 +0000
@@ -493,12 +493,12 @@
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
 class FE_RT_Bubbles&lt; dim &gt;</div><p>This class implements a curl-enhanced Raviart-Thomas elements, conforming with <em>H<sup>div</sup></em> space. The node functionals are defined as point values in Gauss-Lobatto points. These elements generate vector fields with normal components continuous between mesh cells. The purpose of this finite element is in localizing the interactions between degrees of freedom around the nodes when an appropriate quadrature rule is used, leading to a block-diagonal <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> (even with full-tensor coefficient).</p>
 <p>The elements are defined through enrichment of classical Raviart-Thomas elements with extra curls, so that the <em>H<sup>div</sup></em> conformity is preserved, and the total number of degrees of freedom of <a class="el" href="classFE__RT__Bubbles.html">FE_RT_Bubbles</a> of order k is equal to the number of DoFs in <em>dim</em> copies of <a class="el" href="classFE__Q.html">FE_Q</a> of order <em>k</em>.</p>
-<dl class="section note"><dt>Note</dt><dd>Unlike Raviart-Thomas, the lowest possible order for this enhanced finite element is 1, i.e. <picture><source srcset="form_1179_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k \ge 1$" src="form_1179.png"/></picture>.</dd></dl>
-<p>The matching pressure space for <a class="el" href="classFE__RT__Bubbles.html">FE_RT_Bubbles</a> of order <em>k</em> is <a class="el" href="classFE__DGQ.html">FE_DGQ</a> of order <em>k-1</em>. With the exact integration, this pair yields <picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(k+1)$" src="form_1145.png"/></picture>-st order of convergence in <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture>-norm for a vector variable and <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>-th order in <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture>-norm for a scalar one (same as <picture><source srcset="form_1180_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$BDM_k \times P_{k-1}$" src="form_1180.png"/></picture>).</p>
+<dl class="section note"><dt>Note</dt><dd>Unlike Raviart-Thomas, the lowest possible order for this enhanced finite element is 1, i.e. <picture><source srcset="form_1171_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k \ge 1$" src="form_1171.png"/></picture>.</dd></dl>
+<p>The matching pressure space for <a class="el" href="classFE__RT__Bubbles.html">FE_RT_Bubbles</a> of order <em>k</em> is <a class="el" href="classFE__DGQ.html">FE_DGQ</a> of order <em>k-1</em>. With the exact integration, this pair yields <picture><source srcset="form_1169_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(k+1)$" src="form_1169.png"/></picture>-st order of convergence in <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture>-norm for a vector variable and <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>-th order in <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture>-norm for a scalar one (same as <picture><source srcset="form_1172_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$BDM_k \times P_{k-1}$" src="form_1172.png"/></picture>).</p>
 <p>For this enhanced Raviart-Thomas element, the node values are not cell and face moments with respect to certain polynomials, but the values in Gauss-Lobatto quadrature points. The nodal values on edges (faces in <em>3d</em>) are evaluated first, according to the natural ordering of the edges (faces) of a cell. The interior degrees of freedom are evaluated last.</p>
 <p>For an RT-Bubbles element of degree <em>k</em>, we choose <em>(k+1)<sup>dim-1</sup></em> Gauss-Lobatto points on each face. These points are ordered lexicographically with respect to the orientation of the face. In the interior of the cells, the values are computed using an anisotropic Gauss-Lobatto formula for integration. The mass matrix assembled with the use of this same quadrature rule, is block diagonal with blocks corresponding to quadrature points. See <em><a href="https://arxiv.org/abs/1710.06742">"Higher order multipoint flux
 mixed finite element methods on quadrilaterals and hexahedra"</a></em> for more details.</p>
-<p>The elements of degree <picture><source srcset="form_1181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=3$" src="form_1181.png"/></picture> in <em>2d</em> and <picture><source srcset="form_1182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=2$" src="form_1182.png"/></picture> in <em>3d</em> are shown in the figures below (filled arrows indicate DoFs for which continuity across the edges (faces in <em>3d</em>) is required).</p>
+<p>The elements of degree <picture><source srcset="form_1173_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=3$" src="form_1173.png"/></picture> in <em>2d</em> and <picture><source srcset="form_1174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=2$" src="form_1174.png"/></picture> in <em>3d</em> are shown in the figures below (filled arrows indicate DoFs for which continuity across the edges (faces in <em>3d</em>) is required).</p>
 <table class="doxtable">
 <tr>
 <td align="center"><div class="image">
@@ -733,11 +733,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -2748,7 +2748,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3442,7 +3442,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3550,7 +3550,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3860,9 +3860,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RannacherTurek.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RannacherTurek.html	2024-03-17 21:57:28.035139130 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RannacherTurek.html	2024-03-17 21:57:28.031139105 +0000
@@ -714,11 +714,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -1847,17 +1847,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -1892,21 +1892,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -2782,7 +2782,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3476,7 +3476,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3584,7 +3584,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3894,9 +3894,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RaviartThomas.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RaviartThomas.html	2024-03-17 21:57:28.195140118 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RaviartThomas.html	2024-03-17 21:57:28.195140118 +0000
@@ -503,11 +503,11 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class FE_RaviartThomas&lt; dim &gt;</div><p>Implementation of Raviart-Thomas (RT) elements. The Raviart-Thomas space is designed to solve problems in which the solution only lives in the space <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^\text{div}=\{ {\mathbf u} \in L_2: \text{div}\, {\mathbf u} \in L_2\}$" src="form_1141.png"/></picture>, rather than in the more commonly used space <picture><source srcset="form_1078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1=\{ u \in L_2: \nabla u \in L_2\}$" src="form_1078.png"/></picture>. In other words, the solution must be a vector field whose divergence is square integrable, but for which the gradient may not be square integrable. The typical application for this space (and these elements) is to the mixed formulation of the Laplace equation and related situations, see for example <a class="el" href="step_20.html">step-20</a>. The defining characteristic of functions in <picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^\text{div}$" src="form_1142.png"/></picture> is that they are in general discontinuous &ndash; but that if you draw a line in 2d (or a surface in 3d), then the <em>normal</em> component of the vector field must be continuous across the line (or surface) even though the tangential component may not be. As a consequence, the Raviart-Thomas element is constructed in such a way that (i) it is <a class="el" href="group__vector__valued.html">vector-valued</a>, (ii) the shape functions are discontinuous, but (iii) the normal component of the vector field represented by each shape function is continuous across the faces of cells.</p>
+class FE_RaviartThomas&lt; dim &gt;</div><p>Implementation of Raviart-Thomas (RT) elements. The Raviart-Thomas space is designed to solve problems in which the solution only lives in the space <picture><source srcset="form_1165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^\text{div}=\{ {\mathbf u} \in L_2: \text{div}\, {\mathbf u} \in L_2\}$" src="form_1165.png"/></picture>, rather than in the more commonly used space <picture><source srcset="form_1114_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1=\{ u \in L_2: \nabla u \in L_2\}$" src="form_1114.png"/></picture>. In other words, the solution must be a vector field whose divergence is square integrable, but for which the gradient may not be square integrable. The typical application for this space (and these elements) is to the mixed formulation of the Laplace equation and related situations, see for example <a class="el" href="step_20.html">step-20</a>. The defining characteristic of functions in <picture><source srcset="form_1166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^\text{div}$" src="form_1166.png"/></picture> is that they are in general discontinuous &ndash; but that if you draw a line in 2d (or a surface in 3d), then the <em>normal</em> component of the vector field must be continuous across the line (or surface) even though the tangential component may not be. As a consequence, the Raviart-Thomas element is constructed in such a way that (i) it is <a class="el" href="group__vector__valued.html">vector-valued</a>, (ii) the shape functions are discontinuous, but (iii) the normal component of the vector field represented by each shape function is continuous across the faces of cells.</p>
 <p>Other properties of the Raviart-Thomas element are that (i) it is <a class="el" href="DEALGlossary.html#href_anchor">not a primitive element</a> ; (ii) the shape functions are defined so that certain integrals over the faces are either zero or one, rather than the common case of certain point values being either zero or one. (There is, however, the <a class="el" href="classFE__RaviartThomasNodal.html">FE_RaviartThomasNodal</a> element that uses point values.)</p>
 <p>We follow the commonly used &ndash; though confusing &ndash; definition of the "degree" of RT elements. Specifically, the "degree" of the element denotes the polynomial degree of the <em>largest complete polynomial subspace</em> contained in the finite element space, even if the space may contain shape functions of higher polynomial degree. The lowest order element is consequently <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas(0)</a>, i.e., the Raviart-Thomas element "of
 degree zero", even though the functions of this space are in general polynomials of degree one in each variable. This choice of "degree" implies that the approximation order of the function itself is <em>degree+1</em>, as with usual polynomial spaces. The numbering so chosen implies the sequence  </p><p class="formulaDsp">
-<picture><source srcset="form_1083_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   Q_{k+1}
   \stackrel{\text{grad}}{\rightarrow}
   \text{Nedelec}_k
@@ -515,7 +515,7 @@
   \text{RaviartThomas}_k
   \stackrel{\text{div}}{\rightarrow}
   DGQ_{k}
-\]" src="form_1083.png"/></picture>
+\]" src="form_1119.png"/></picture>
 </p>
 <p>This class is not implemented for the codimension one case (<code>spacedim != dim</code>).</p>
 <h3>Interpolation</h3>
@@ -782,11 +782,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -985,7 +985,7 @@
 </div><div class="memdoc">
 <p>Fill the necessary tables defined in base classes such as <code>adjust_quad_dof_index_for_face_orientation_table</code> declared in <a class="el" href="fe_8cc.html">fe.cc</a>. We need to fill it with the correct values in case of non-standard, flipped (rotated by +180 degrees) or rotated (rotated by +90 degrees) faces. These are given in the form three flags (face_orientation, face_flip, face_rotation), see the documentation in GeometryInfo&lt;dim&gt; and this <a class="el" href="DEALGlossary.html#href_anchor">glossary entry on face orientation</a>.</p>
 <h3>Example: Raviart-Thomas Elements of order 2 (tensor polynomial degree 3)</h3>
-<p>The dofs on a face are connected to a <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n\times n$" src="form_1146.png"/></picture> matrix where here <code>n=3</code>. In our example we can imagine the following dofs on a quad (face):</p>
+<p>The dofs on a face are connected to a <picture><source srcset="form_1170_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n\times n$" src="form_1170.png"/></picture> matrix where here <code>n=3</code>. In our example we can imagine the following dofs on a quad (face):</p>
 <pre class="fragment">*  ___________
 * |           |
 * |  6  7  8  |
@@ -2861,7 +2861,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3555,7 +3555,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3663,7 +3663,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3942,9 +3942,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RaviartThomasNodal.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RaviartThomasNodal.html	2024-03-17 21:57:28.359141131 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__RaviartThomasNodal.html	2024-03-17 21:57:28.359141131 +0000
@@ -488,8 +488,8 @@
 class FE_RaviartThomasNodal&lt; dim &gt;</div><p>The Raviart-Thomas elements with node functionals defined as point values in Gauss-Lobatto points.</p>
 <h3>Description of node values</h3>
 <p>For this Raviart-Thomas element, the node values are not cell and face moments with respect to certain polynomials, but the values at quadrature points. Following the general scheme for numbering degrees of freedom, the node values on faces (edges in 2d, quads in 3d) are first, face by face, according to the natural ordering of the faces of a cell. The interior degrees of freedom are last.</p>
-<p>For an RT-element of degree <em>k</em>, we choose <em>(k+1)<sup>d-1</sup></em> Gauss-Lobatto points on each face, as defined by <a class="el" href="classQGaussLobatto.html">QGaussLobatto</a>. For degree <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=0$" src="form_1143.png"/></picture>, the midpoint is chosen. These points are ordered lexicographically with respect to the orientation of the face. This way, the normal component which is in <em>Q<sub>k</sub></em>, is uniquely determined.</p>
-<p>These face polynomials are extended into the interior by the means of a <a class="el" href="classQGaussLobatto.html">QGaussLobatto</a> formula for the normal direction. In other words, the polynomials are the tensor product of Lagrange polynomials on the points of a <a class="el" href="classQGaussLobatto.html">QGaussLobatto</a> formula with <picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(k+2)$" src="form_1144.png"/></picture> points in the normal direction with Lagrange polynomials on the points of a <a class="el" href="classQGaussLobatto.html">QGaussLobatto</a> quadrature formula with <picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(k+1)$" src="form_1145.png"/></picture> points.</p>
+<p>For an RT-element of degree <em>k</em>, we choose <em>(k+1)<sup>d-1</sup></em> Gauss-Lobatto points on each face, as defined by <a class="el" href="classQGaussLobatto.html">QGaussLobatto</a>. For degree <picture><source srcset="form_1167_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=0$" src="form_1167.png"/></picture>, the midpoint is chosen. These points are ordered lexicographically with respect to the orientation of the face. This way, the normal component which is in <em>Q<sub>k</sub></em>, is uniquely determined.</p>
+<p>These face polynomials are extended into the interior by the means of a <a class="el" href="classQGaussLobatto.html">QGaussLobatto</a> formula for the normal direction. In other words, the polynomials are the tensor product of Lagrange polynomials on the points of a <a class="el" href="classQGaussLobatto.html">QGaussLobatto</a> formula with <picture><source srcset="form_1168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(k+2)$" src="form_1168.png"/></picture> points in the normal direction with Lagrange polynomials on the points of a <a class="el" href="classQGaussLobatto.html">QGaussLobatto</a> quadrature formula with <picture><source srcset="form_1169_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(k+1)$" src="form_1169.png"/></picture> points.</p>
 <dl class="section note"><dt>Note</dt><dd>The degree stored in the member variable <a class="el" href="classFiniteElementData.html#href_anchor">FiniteElementData&lt;dim&gt;::degree</a> is higher by one than the constructor argument! </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe__raviart__thomas_8h_source.html#href_anchor">336</a> of file <a class="el" href="fe__raviart__thomas_8h_source.html">fe_raviart_thomas.h</a>.</p>
@@ -787,11 +787,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -2866,7 +2866,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3560,7 +3560,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3668,7 +3668,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3978,9 +3978,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexDGP.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexDGP.html	2024-03-17 21:57:28.499141995 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexDGP.html	2024-03-17 21:57:28.503142020 +0000
@@ -466,7 +466,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim&gt;<br />
-class FE_SimplexDGP&lt; dim, spacedim &gt;</div><p>Implementation of a scalar discontinuous Lagrange finite element <picture><source srcset="form_1176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_k$" src="form_1176.png"/></picture>, sometimes denoted as <picture><source srcset="form_1177_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_{-k}$" src="form_1177.png"/></picture>, that yields the finite element space of discontinuous, piecewise polynomials of degree <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>.</p>
+class FE_SimplexDGP&lt; dim, spacedim &gt;</div><p>Implementation of a scalar discontinuous Lagrange finite element <picture><source srcset="form_1198_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_k$" src="form_1198.png"/></picture>, sometimes denoted as <picture><source srcset="form_1199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_{-k}$" src="form_1199.png"/></picture>, that yields the finite element space of discontinuous, piecewise polynomials of degree <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>.</p>
 <p>Also see <a class="el" href="group__simplex.html">Simplex support</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe__simplex__p_8h_source.html#href_anchor">185</a> of file <a class="el" href="fe__simplex__p_8h_source.html">fe_simplex_p.h</a>.</p>
@@ -1028,11 +1028,11 @@
 </div><div class="memdoc">
 
 <p></p>
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -2101,17 +2101,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -2146,21 +2146,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -2769,7 +2769,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3463,7 +3463,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3571,7 +3571,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3850,9 +3850,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexP.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexP.html	2024-03-17 21:57:28.639142861 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexP.html	2024-03-17 21:57:28.647142909 +0000
@@ -466,7 +466,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim&gt;<br />
-class FE_SimplexP&lt; dim, spacedim &gt;</div><p>Implementation of a scalar Lagrange finite element <picture><source srcset="form_1176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_k$" src="form_1176.png"/></picture> that yields the finite element space of continuous, piecewise polynomials of degree <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>.</p>
+class FE_SimplexP&lt; dim, spacedim &gt;</div><p>Implementation of a scalar Lagrange finite element <picture><source srcset="form_1198_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_k$" src="form_1198.png"/></picture> that yields the finite element space of continuous, piecewise polynomials of degree <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>.</p>
 <p>Also see <a class="el" href="group__simplex.html">Simplex support</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="fe__simplex__p_8h_source.html#href_anchor">129</a> of file <a class="el" href="fe__simplex__p_8h_source.html">fe_simplex_p.h</a>.</p>
@@ -1028,11 +1028,11 @@
 </div><div class="memdoc">
 
 <p></p>
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -2101,17 +2101,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -2146,21 +2146,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -2769,7 +2769,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3463,7 +3463,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3571,7 +3571,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3850,9 +3850,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexP__Bubbles.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexP__Bubbles.html	2024-03-17 21:57:28.795143825 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexP__Bubbles.html	2024-03-17 21:57:28.803143873 +0000
@@ -935,11 +935,11 @@
 </div><div class="memdoc">
 
 <p></p>
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -2008,17 +2008,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -2053,21 +2053,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -2767,7 +2767,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3461,7 +3461,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3569,7 +3569,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3848,9 +3848,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexPoly.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexPoly.html	2024-03-17 21:57:28.951144787 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__SimplexPoly.html	2024-03-17 21:57:28.959144837 +0000
@@ -875,11 +875,11 @@
 </div><div class="memdoc">
 
 <p></p>
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -1948,17 +1948,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -1993,21 +1993,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -2769,7 +2769,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3463,7 +3463,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3571,7 +3571,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3850,9 +3850,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__TraceQ.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__TraceQ.html	2024-03-17 21:57:29.111145776 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__TraceQ.html	2024-03-17 21:57:29.115145801 +0000
@@ -2694,7 +2694,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3388,7 +3388,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3496,7 +3496,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3775,9 +3775,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__TraceQ_3_011_00_01spacedim_01_4.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__TraceQ_3_011_00_01spacedim_01_4.html	2024-03-17 21:57:29.251146641 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__TraceQ_3_011_00_01spacedim_01_4.html	2024-03-17 21:57:29.255146665 +0000
@@ -2797,7 +2797,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 </div>
 </div>
@@ -3441,7 +3441,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3543,7 +3543,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3800,9 +3800,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -3835,11 +3835,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__WedgeDGP.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__WedgeDGP.html	2024-03-17 21:57:29.395147530 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__WedgeDGP.html	2024-03-17 21:57:29.403147580 +0000
@@ -700,11 +700,11 @@
 </div><div class="memdoc">
 
 <p></p>
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -1773,17 +1773,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -1818,21 +1818,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -2708,7 +2708,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3402,7 +3402,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3510,7 +3510,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3820,9 +3820,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__WedgeP.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__WedgeP.html	2024-03-17 21:57:29.551148494 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__WedgeP.html	2024-03-17 21:57:29.559148543 +0000
@@ -837,11 +837,11 @@
 </div><div class="memdoc">
 
 <p></p>
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -1910,17 +1910,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -1955,21 +1955,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -2724,7 +2724,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3418,7 +3418,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3526,7 +3526,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3836,9 +3836,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFE__WedgePoly.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__WedgePoly.html	2024-03-17 21:57:29.711149482 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFE__WedgePoly.html	2024-03-17 21:57:29.707149457 +0000
@@ -642,11 +642,11 @@
 </div><div class="memdoc">
 
 <p></p>
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="classFiniteElement.html#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
@@ -1715,17 +1715,17 @@
 </div><div class="memdoc">
 <p>Correct the shape Hessians by subtracting the terms corresponding to the Jacobian pushed forward gradient.</p>
 <p>Before the correction, the Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijk} = \frac{d^2\phi_i}{d \hat x_J d \hat x_K} (J_{jJ})^{-1}
 (J_{kK})^{-1},
-\]" src="form_1107.png"/></picture>
+\]" src="form_1140.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct Hessians would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^2 \phi_i}{d x_j d x_k} = D_{ijk} - H_{mjk} \frac{d \phi_i}{d x_m},
-\]" src="form_1109.png"/></picture>
+\]" src="form_1142.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative. </p>
 
 </div>
 </div>
@@ -1760,21 +1760,21 @@
 </div><div class="memdoc">
 <p>Correct the shape third derivatives by subtracting the terms corresponding to the Jacobian pushed forward gradient and second derivative.</p>
 <p>Before the correction, the third derivatives would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 D_{ijkl} = \frac{d^3\phi_i}{d \hat x_J d \hat x_K d \hat x_L} (J_{jJ})^{-1}
 (J_{kK})^{-1} (J_{lL})^{-1},
-\]" src="form_1111.png"/></picture>
+\]" src="form_1144.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1108.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iI}=\frac{d x_i}{d \hat x_I}$" src="form_1141.png"/></picture>. After the correction, the correct third derivative would be given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d^3\phi_i}{d x_j d x_k d x_l} = D_{ijkl} - H_{mjl} \frac{d^2
 \phi_i}{d x_k d x_m}
 - H_{mkl} \frac{d^2 \phi_i}{d x_j d x_m} - H_{mjk} \frac{d^2 \phi_i}{d x_l
 d x_m}
 - K_{mjkl} \frac{d \phi_i}{d x_m},
-\]" src="form_1112.png"/></picture>
+\]" src="form_1145.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1110.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1113.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
+<p> where <picture><source srcset="form_1143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}$" src="form_1143.png"/></picture> is the Jacobian pushed-forward derivative and <picture><source srcset="form_1146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}$" src="form_1146.png"/></picture> is the Jacobian pushed-forward second derivative. </p>
 
 </div>
 </div>
@@ -2712,7 +2712,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -3406,7 +3406,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -3514,7 +3514,7 @@
 </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -3824,9 +3824,9 @@
 </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFiniteElement.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFiniteElement.html	2024-03-17 21:57:29.875150495 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFiniteElement.html	2024-03-17 21:57:29.867150445 +0000
@@ -484,8 +484,8 @@
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim&gt;<br />
 class FiniteElement&lt; dim, spacedim &gt;</div><p>This is the base class for finite elements in arbitrary dimensions. It declares the interface both in terms of member variables and public member functions through which properties of a concrete implementation of a finite element can be accessed. This interface generally consists of a number of groups of variables and functions that can roughly be delineated as follows:</p><ul>
 <li>Basic information about the finite element, such as the number of degrees of freedom per vertex, edge, or cell. This kind of data is stored in the <a class="el" href="classFiniteElementData.html">FiniteElementData</a> base class. (Though the <a class="el" href="#href_anchor">FiniteElement::get_name()</a> member function also falls into this category.)</li>
-<li>A description of the shape functions and their derivatives on the reference cell <picture><source srcset="form_872_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]^d$" src="form_872.png"/></picture>, if an element is indeed defined by mapping shape functions from the reference cell to an actual cell.</li>
-<li>Matrices (and functions that access them) that describe how an element's shape functions related to those on parent or child cells (restriction or prolongation) or neighboring cells (for hanging node constraints), as well as to other finite element spaces defined on the same cell (e.g., when doing <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> refinement).</li>
+<li>A description of the shape functions and their derivatives on the reference cell <picture><source srcset="form_870_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]^d$" src="form_870.png"/></picture>, if an element is indeed defined by mapping shape functions from the reference cell to an actual cell.</li>
+<li>Matrices (and functions that access them) that describe how an element's shape functions related to those on parent or child cells (restriction or prolongation) or neighboring cells (for hanging node constraints), as well as to other finite element spaces defined on the same cell (e.g., when doing <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> refinement).</li>
 <li>Functions that describe the properties of individual shape functions, for example which <a class="el" href="DEALGlossary.html#href_anchor">vector components</a> of a <a class="el" href="group__vector__valued.html">vector-valued finite element's</a> shape function is nonzero, or whether an element is <a class="el" href="DEALGlossary.html#href_anchor">primitive</a>.</li>
 <li>For elements that are interpolatory, such as the common <picture><source srcset="form_276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_p$" src="form_276.png"/></picture> Lagrange elements, data that describes where their <a class="el" href="DEALGlossary.html#href_anchor">support points</a> are located.</li>
 <li>Functions that define the interface to the <a class="el" href="classFEValues.html">FEValues</a> class that is almost always used to access finite element shape functions from user code.</li>
@@ -569,8 +569,8 @@
 <tr class="markdownTableRowEven">
 <td class="markdownTableBodyCenter">21   </td><td class="markdownTableBodyCenter">1   </td><td class="markdownTableBodyCenter">0   </td><td class="markdownTableBodyCenter">8   </td><td class="markdownTableBodyCenter">1   </td></tr>
 </table>
-<p>What we see is the following: there are a total of 22 degrees-of-freedom on this element with components ranging from 0 to 2. Each DoF corresponds to one of the two base elements used to build <a class="el" href="classFESystem.html">FESystem</a> : <picture><source srcset="form_963_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb Q_2$" src="form_963.png"/></picture> or <picture><source srcset="form_964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb
-  Q_1$" src="form_964.png"/></picture>. Since <a class="el" href="classFE__Q.html">FE_Q</a> are primitive elements, we have a total of 9 distinct scalar-valued shape functions for the quadratic element and 4 for the linear element. Finally, for DoFs corresponding to the first base element multiplicity is either zero or one, meaning that we use the same scalar valued <picture><source srcset="form_963_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb Q_2$" src="form_963.png"/></picture> for both <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> and <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> components of the velocity field <picture><source srcset="form_965_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb Q_2 \otimes \mathbb Q_2$" src="form_965.png"/></picture>. For DoFs corresponding to the second base element multiplicity is zero.</p>
+<p>What we see is the following: there are a total of 22 degrees-of-freedom on this element with components ranging from 0 to 2. Each DoF corresponds to one of the two base elements used to build <a class="el" href="classFESystem.html">FESystem</a> : <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb Q_2$" src="form_997.png"/></picture> or <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb
+  Q_1$" src="form_998.png"/></picture>. Since <a class="el" href="classFE__Q.html">FE_Q</a> are primitive elements, we have a total of 9 distinct scalar-valued shape functions for the quadratic element and 4 for the linear element. Finally, for DoFs corresponding to the first base element multiplicity is either zero or one, meaning that we use the same scalar valued <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb Q_2$" src="form_997.png"/></picture> for both <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> and <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> components of the velocity field <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb Q_2 \otimes \mathbb Q_2$" src="form_999.png"/></picture>. For DoFs corresponding to the second base element multiplicity is zero.</p>
 <h4>Support points</h4>
 <p>Finite elements are frequently defined by defining a polynomial space and a set of dual functionals. If these functionals involve point evaluations, then the element is "interpolatory" and it is possible to interpolate an arbitrary (but sufficiently smooth) function onto the finite element space by evaluating it at these points. We call these points "support points".</p>
 <p>Most finite elements are defined by mapping from the reference cell to a concrete cell. Consequently, the support points are then defined on the reference ("unit") cell, see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>. The support points on a concrete cell can then be computed by mapping the unit support points, using the <a class="el" href="classMapping.html" title="Abstract base class for mapping classes.">Mapping</a> class interface and derived classes, typically via the <a class="el" href="classFEValues.html">FEValues</a> class.</p>
@@ -596,14 +596,14 @@
 <h4>Interpolation matrices in one dimension</h4>
 <p>In one space dimension (i.e., for <code>dim==1</code> and any value of <code>spacedim</code>), finite element classes implementing the interface of the current base class need only set the <a class="el" href="#href_anchor">restriction</a> and <a class="el" href="#href_anchor">prolongation</a> matrices that describe the interpolation of the finite element space on one cell to that of its parent cell, and to that on its children, respectively. The constructor of the current class in one dimension presets the <a class="el" href="#href_anchor">interface_constraints</a> matrix (used to describe hanging node constraints at the interface between cells of different refinement levels) to have size zero because there are no hanging nodes in 1d.</p>
 <h4>Interpolation matrices in two dimensions</h4>
-<p>In addition to the fields discussed above for 1d, a constraint matrix is needed to describe hanging node constraints if the finite element has degrees of freedom located on edges or vertices. These constraints are represented by an <picture><source srcset="form_966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m\times n$" src="form_966.png"/></picture>-matrix <a class="el" href="#href_anchor">interface_constraints</a>, where <em>m</em> is the number of degrees of freedom on the refined side without the corner vertices (those dofs on the middle vertex plus those on the two lines), and <em>n</em> is that of the unrefined side (those dofs on the two vertices plus those on the line). The matrix is thus a rectangular one. The <picture><source srcset="form_966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m\times n$" src="form_966.png"/></picture> size of the <a class="el" href="#href_anchor">interface_constraints</a> matrix can also be accessed through the <a class="el" href="#href_anchor">interface_constraints_size()</a> function.</p>
-<p>The mapping of the dofs onto the indices of the matrix on the unrefined side is as follows: let <picture><source srcset="form_967_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_v$" src="form_967.png"/></picture> be the number of dofs on a vertex, <picture><source srcset="form_968_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_l$" src="form_968.png"/></picture> that on a line, then <picture><source srcset="form_969_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=0...d_v-1$" src="form_969.png"/></picture> refers to the dofs on vertex zero of the unrefined line, <picture><source srcset="form_970_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=d_v...2d_v-1$" src="form_970.png"/></picture> to those on vertex one, <picture><source srcset="form_971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=2d_v...2d_v+d_l-1$" src="form_971.png"/></picture> to those on the line.</p>
-<p>Similarly, <picture><source srcset="form_972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=0...d_v-1$" src="form_972.png"/></picture> refers to the dofs on the middle vertex of the refined side (vertex one of child line zero, vertex zero of child line one), <picture><source srcset="form_973_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=d_v...d_v+d_l-1$" src="form_973.png"/></picture> refers to the dofs on child line zero, <picture><source srcset="form_974_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=d_v+d_l...d_v+2d_l-1$" src="form_974.png"/></picture> refers to the dofs on child line one. Please note that we do not need to reserve space for the dofs on the end vertices of the refined lines, since these must be mapped one-to-one to the appropriate dofs of the vertices of the unrefined line.</p>
+<p>In addition to the fields discussed above for 1d, a constraint matrix is needed to describe hanging node constraints if the finite element has degrees of freedom located on edges or vertices. These constraints are represented by an <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m\times n$" src="form_1000.png"/></picture>-matrix <a class="el" href="#href_anchor">interface_constraints</a>, where <em>m</em> is the number of degrees of freedom on the refined side without the corner vertices (those dofs on the middle vertex plus those on the two lines), and <em>n</em> is that of the unrefined side (those dofs on the two vertices plus those on the line). The matrix is thus a rectangular one. The <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m\times n$" src="form_1000.png"/></picture> size of the <a class="el" href="#href_anchor">interface_constraints</a> matrix can also be accessed through the <a class="el" href="#href_anchor">interface_constraints_size()</a> function.</p>
+<p>The mapping of the dofs onto the indices of the matrix on the unrefined side is as follows: let <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_v$" src="form_1001.png"/></picture> be the number of dofs on a vertex, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_l$" src="form_1002.png"/></picture> that on a line, then <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=0...d_v-1$" src="form_1003.png"/></picture> refers to the dofs on vertex zero of the unrefined line, <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=d_v...2d_v-1$" src="form_1004.png"/></picture> to those on vertex one, <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=2d_v...2d_v+d_l-1$" src="form_1005.png"/></picture> to those on the line.</p>
+<p>Similarly, <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=0...d_v-1$" src="form_1006.png"/></picture> refers to the dofs on the middle vertex of the refined side (vertex one of child line zero, vertex zero of child line one), <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=d_v...d_v+d_l-1$" src="form_1007.png"/></picture> refers to the dofs on child line zero, <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=d_v+d_l...d_v+2d_l-1$" src="form_1008.png"/></picture> refers to the dofs on child line one. Please note that we do not need to reserve space for the dofs on the end vertices of the refined lines, since these must be mapped one-to-one to the appropriate dofs of the vertices of the unrefined line.</p>
 <p>Through this construction, the degrees of freedom on the child faces are constrained to the degrees of freedom on the parent face. The information so provided is typically consumed by the <a class="el" href="group__constraints.html#href_anchor">DoFTools::make_hanging_node_constraints()</a> function.</p>
 <dl class="section note"><dt>Note</dt><dd>The hanging node constraints described by these matrices are only relevant to the case where the same finite element space is used on neighboring (but differently refined) cells. The case that the finite element spaces on different sides of a face are different, i.e., the <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture> case (see <a class="el" href="group__hp.html">hp-finite element support</a>) is handled by separate functions. See the <a class="el" href="#href_anchor">FiniteElement::get_face_interpolation_matrix()</a> and <a class="el" href="#href_anchor">FiniteElement::get_subface_interpolation_matrix()</a> functions.</dd></dl>
 <h4>Interpolation matrices in three dimensions</h4>
-<p>For the interface constraints, the 3d case is similar to the 2d case. The numbering for the indices <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> on the mother face is obvious and keeps to the usual numbering of degrees of freedom on quadrilaterals.</p>
-<p>The numbering of the degrees of freedom on the interior of the refined faces for the index <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> is as follows: let <picture><source srcset="form_967_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_v$" src="form_967.png"/></picture> and <picture><source srcset="form_968_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_l$" src="form_968.png"/></picture> be as above, and <picture><source srcset="form_975_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_q$" src="form_975.png"/></picture> be the number of degrees of freedom per quadrilateral (and therefore per face), then <picture><source srcset="form_972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=0...d_v-1$" src="form_972.png"/></picture> denote the dofs on the vertex at the center, <picture><source srcset="form_976_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=d_v...5d_v-1$" src="form_976.png"/></picture> for the dofs on the vertices at the center of the bounding lines of the quadrilateral, <picture><source srcset="form_977_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=5d_v..5d_v+4*d_l-1$" src="form_977.png"/></picture> are for the degrees of freedom on the four lines connecting the center vertex to the outer boundary of the mother face, <picture><source srcset="form_978_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=5d_v+4*d_l...5d_v+4*d_l+8*d_l-1$" src="form_978.png"/></picture> for the degrees of freedom on the small lines surrounding the quad, and <picture><source srcset="form_979_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=5d_v+12*d_l...5d_v+12*d_l+4*d_q-1$" src="form_979.png"/></picture> for the dofs on the four child faces. Note the direction of the lines at the boundary of the quads, as shown below.</p>
+<p>For the interface constraints, the 3d case is similar to the 2d case. The numbering for the indices <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> on the mother face is obvious and keeps to the usual numbering of degrees of freedom on quadrilaterals.</p>
+<p>The numbering of the degrees of freedom on the interior of the refined faces for the index <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> is as follows: let <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_v$" src="form_1001.png"/></picture> and <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_l$" src="form_1002.png"/></picture> be as above, and <picture><source srcset="form_1009_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_q$" src="form_1009.png"/></picture> be the number of degrees of freedom per quadrilateral (and therefore per face), then <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=0...d_v-1$" src="form_1006.png"/></picture> denote the dofs on the vertex at the center, <picture><source srcset="form_1010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=d_v...5d_v-1$" src="form_1010.png"/></picture> for the dofs on the vertices at the center of the bounding lines of the quadrilateral, <picture><source srcset="form_1011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=5d_v..5d_v+4*d_l-1$" src="form_1011.png"/></picture> are for the degrees of freedom on the four lines connecting the center vertex to the outer boundary of the mother face, <picture><source srcset="form_1012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=5d_v+4*d_l...5d_v+4*d_l+8*d_l-1$" src="form_1012.png"/></picture> for the degrees of freedom on the small lines surrounding the quad, and <picture><source srcset="form_1013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=5d_v+12*d_l...5d_v+12*d_l+4*d_q-1$" src="form_1013.png"/></picture> for the dofs on the four child faces. Note the direction of the lines at the boundary of the quads, as shown below.</p>
 <p>The order of the twelve lines and the four child faces can be extracted from the following sketch, where the overall order of the different dof groups is depicted: </p><pre class="fragment">*    *--15--4--16--*
 *    |      |      |
 *    10 19  6  20  12
@@ -644,7 +644,7 @@
 <li>
 Compute the basis <em>v<sub>j</sub></em> of the finite element shape function space by applying <em>M<sup>-1</sup></em> to the basis <em>w<sub>j</sub></em>. </li>
 </ol>
-<p>The matrix <em>M</em> may be computed with <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a>. This function relies on the existence of <a class="el" href="#href_anchor">generalized_support_points</a> and <a class="el" href="#href_anchor">FiniteElement::convert_generalized_support_point_values_to_dof_values()</a> (see the <a class="el" href="DEALGlossary.html#href_anchor">glossary entry on generalized support points</a> for more information). With this, one can then use the following piece of code in the constructor of a class derived from <a class="el" href="classFiniteElement.html">FiniteElement</a> to compute the <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> matrix: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFullMatrix.html">FullMatrix&lt;double&gt;</a> M(this-&gt;<a class="code hl_function" href="classFiniteElementData.html#href_anchor">n_dofs_per_cell</a>(), this-&gt;<a class="code hl_function" href="classFiniteElementData.html#href_anchor">n_dofs_per_cell</a>());</div>
+<p>The matrix <em>M</em> may be computed with <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a>. This function relies on the existence of <a class="el" href="#href_anchor">generalized_support_points</a> and <a class="el" href="#href_anchor">FiniteElement::convert_generalized_support_point_values_to_dof_values()</a> (see the <a class="el" href="DEALGlossary.html#href_anchor">glossary entry on generalized support points</a> for more information). With this, one can then use the following piece of code in the constructor of a class derived from <a class="el" href="classFiniteElement.html">FiniteElement</a> to compute the <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> matrix: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFullMatrix.html">FullMatrix&lt;double&gt;</a> M(this-&gt;<a class="code hl_function" href="classFiniteElementData.html#href_anchor">n_dofs_per_cell</a>(), this-&gt;<a class="code hl_function" href="classFiniteElementData.html#href_anchor">n_dofs_per_cell</a>());</div>
 <div class="line"><a class="code hl_function" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix</a>(M, *<span class="keyword">this</span>);</div>
 <div class="line">this-&gt;inverse_node_matrix.reinit(this-&gt;<a class="code hl_function" href="classFiniteElementData.html#href_anchor">n_dofs_per_cell</a>(),</div>
 <div class="line">this-&gt;<a class="code hl_function" href="classFiniteElementData.html#href_anchor">n_dofs_per_cell</a>()); this-&gt;inverse_node_matrix.invert(M);</div>
@@ -661,7 +661,7 @@
 <div class="line"><a class="code hl_function" href="namespaceFETools.html#href_anchor">FETools::compute_embedding_matrices</a> (*<span class="keyword">this</span>, this-&gt;<a class="code hl_variable" href="#href_anchor">prolongation</a>);</div>
 <div class="ttc" id="aclassFiniteElement_html_afbc42f850096c429fd39cfcbde1b6b56"><div class="ttname"><a href="#href_anchor">FiniteElement::prolongation</a></div><div class="ttdeci">std::vector&lt; std::vector&lt; FullMatrix&lt; double &gt; &gt; &gt; prolongation</div><div class="ttdef"><b>Definition</b> <a href="include_2deal_8II_2fe_2fe_8h_source.html#href_anchor">fe.h:2416</a></div></div>
 <div class="ttc" id="anamespaceFETools_html_ab655f76abed08ac8040373bea77ea419"><div class="ttname"><a href="namespaceFETools.html#href_anchor">FETools::compute_embedding_matrices</a></div><div class="ttdeci">void compute_embedding_matrices(const FiniteElement&lt; dim, spacedim &gt; &amp;fe, std::vector&lt; std::vector&lt; FullMatrix&lt; number &gt; &gt; &gt; &amp;matrices, const bool isotropic_only=false, const double threshold=1.e-12)</div></div>
-</div><!-- fragment --><p> As in this example, prolongation is almost always implemented via embedding, i.e., the nodal values of the function on the children may be different from the nodal values of the function on the parent cell, but as a function of <picture><source srcset="form_980_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x\in{\mathbb R}^\text{spacedim}$" src="form_980.png"/></picture>, the finite element field on the child is the same as on the parent.</p>
+</div><!-- fragment --><p> As in this example, prolongation is almost always implemented via embedding, i.e., the nodal values of the function on the children may be different from the nodal values of the function on the parent cell, but as a function of <picture><source srcset="form_1014_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x\in{\mathbb R}^\text{spacedim}$" src="form_1014.png"/></picture>, the finite element field on the child is the same as on the parent.</p>
 <h5>Computing restriction matrices</h5>
 <p>The opposite operation, restricting a finite element function defined on the children to the parent cell is typically implemented by interpolating the finite element function on the children to the nodal values of the parent cell. In deal.II, the restriction operation is implemented as a loop over the children of a cell that each apply a matrix to the vector of unknowns on that child cell (these matrices are stored in <a class="el" href="#href_anchor">restriction</a> and are accessed by <a class="el" href="#href_anchor">get_restriction_matrix()</a>). The operation that then needs to be implemented turns out to be surprisingly difficult to describe, but is instructive to describe because it also defines the meaning of the <a class="el" href="#href_anchor">restriction_is_additive_flags</a> array (accessed via the <a class="el" href="#href_anchor">restriction_is_additive()</a> function).</p>
 <p>To give a concrete example, assume we use a <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> element in 1d, and that on each of the parent and child cells degrees of freedom are (locally and globally) numbered as follows: </p><div class="fragment"><div class="line">meshes:             *-------*                        *---*---*</div>
@@ -669,42 +669,42 @@
 <div class="line">global DoF <a class="code hl_namespace" href="namespacenumbers.html">numbers</a>: 0       1                        0   1   2</div>
 <div class="ttc" id="anamespacenumbers_html"><div class="ttname"><a href="namespacenumbers.html">numbers</a></div><div class="ttdef"><b>Definition</b> <a href="numbers_8h_source.html#href_anchor">numbers.h:230</a></div></div>
 </div><!-- fragment --><p> Then we want the restriction operation to take the value of the zeroth DoF on child 0 as the value of the zeroth DoF on the parent, and take the value of the first DoF on child 1 as the value of the first DoF on the parent. Ideally, we would like to write this follows  </p><p class="formulaDsp">
-<picture><source srcset="form_981_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1015_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     U^\text{coarse}|_\text{parent}
     = \sum_{\text{child}=0}^1 R_\text{child} U^\text{fine}|_\text{child}
-  \]" src="form_981.png"/></picture>
+  \]" src="form_1015.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_982_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\text{fine}|_\text{child=0}=(U^\text{fine}_0,U^\text{fine}_1)^T$" src="form_982.png"/></picture> and <picture><source srcset="form_983_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\text{fine}|_\text{child=1}=(U^\text{fine}_1,U^\text{fine}_2)^T$" src="form_983.png"/></picture>. Writing the requested operation like this would here be possible by choosing  </p><p class="formulaDsp">
-<picture><source srcset="form_984_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_1016_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\text{fine}|_\text{child=0}=(U^\text{fine}_0,U^\text{fine}_1)^T$" src="form_1016.png"/></picture> and <picture><source srcset="form_1017_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\text{fine}|_\text{child=1}=(U^\text{fine}_1,U^\text{fine}_2)^T$" src="form_1017.png"/></picture>. Writing the requested operation like this would here be possible by choosing  </p><p class="formulaDsp">
+<picture><source srcset="form_1018_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     R_0 = \left(\begin{matrix}1 &amp; 0 \\ 0 &amp; 0\end{matrix}\right),
     \qquad\qquad
     R_1 = \left(\begin{matrix}0 &amp; 0 \\ 0 &amp; 1\end{matrix}\right).
-  \]" src="form_984.png"/></picture>
+  \]" src="form_1018.png"/></picture>
 </p>
-<p> However, this approach already fails if we go to a <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> element with the following degrees of freedom: </p><div class="fragment"><div class="line">meshes:             *-------*                        *----*----*</div>
+<p> However, this approach already fails if we go to a <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> element with the following degrees of freedom: </p><div class="fragment"><div class="line">meshes:             *-------*                        *----*----*</div>
 <div class="line">local DoF <a class="code hl_namespace" href="namespacenumbers.html">numbers</a>:  0   2   1                        0 2 1|0 2 1</div>
 <div class="line">global DoF <a class="code hl_namespace" href="namespacenumbers.html">numbers</a>: 0   2   1                        0 2  1  4 3</div>
-</div><!-- fragment --><p> Writing things as the sum over matrix operations as above would not easily work because we have to add nonzero values to <picture><source srcset="form_985_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\text{coarse}_2$" src="form_985.png"/></picture> twice, once for each child.</p>
+</div><!-- fragment --><p> Writing things as the sum over matrix operations as above would not easily work because we have to add nonzero values to <picture><source srcset="form_1019_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\text{coarse}_2$" src="form_1019.png"/></picture> twice, once for each child.</p>
 <p>Consequently, restriction is typically implemented as a <em>concatenation</em> operation. I.e., we first compute the individual restrictions from each child,  </p><p class="formulaDsp">
-<picture><source srcset="form_986_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     \tilde U^\text{coarse}_\text{child}
     = R_\text{child} U^\text{fine}|_\text{child},
-  \]" src="form_986.png"/></picture>
+  \]" src="form_1020.png"/></picture>
 </p>
-<p> and then compute the values of <picture><source srcset="form_987_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\text{coarse}|_\text{parent}$" src="form_987.png"/></picture> with the following code: </p><div class="fragment"><div class="line"><span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> child=0; child&lt;cell-&gt;n_children(); ++child)</div>
+<p> and then compute the values of <picture><source srcset="form_1021_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\text{coarse}|_\text{parent}$" src="form_1021.png"/></picture> with the following code: </p><div class="fragment"><div class="line"><span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> child=0; child&lt;cell-&gt;n_children(); ++child)</div>
 <div class="line">  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;<a class="code hl_variable" href="classFiniteElementData.html#href_anchor">dofs_per_cell</a>; ++i)</div>
 <div class="line">    <span class="keywordflow">if</span> (U_tilde_coarse[child][i] != 0)</div>
 <div class="line">      U_coarse_on_parent[i] = U_tilde_coarse[child][i];</div>
 <div class="ttc" id="aclassFiniteElementData_html_ae2fa3b8d578ba488b4f37061bb0278bb"><div class="ttname"><a href="classFiniteElementData.html#href_anchor">FiniteElementData::dofs_per_cell</a></div><div class="ttdeci">const unsigned int dofs_per_cell</div><div class="ttdef"><b>Definition</b> <a href="fe__data_8h_source.html#href_anchor">fe_data.h:437</a></div></div>
-</div><!-- fragment --><p> In other words, each nonzero element of <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde
-  U^\text{coarse}_\text{child}$" src="form_988.png"/></picture> <em>overwrites</em>, rather than adds to the corresponding element of <picture><source srcset="form_987_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\text{coarse}|_\text{parent}$" src="form_987.png"/></picture>. This typically also implies that the restriction matrices from two different cells should agree on a value for coarse degrees of freedom that they both want to touch (otherwise the result would depend on the order in which we loop over children, which would be unreasonable because the order of children is an otherwise arbitrary convention). For example, in the example above, the restriction matrices will be  </p><p class="formulaDsp">
-<picture><source srcset="form_989_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+</div><!-- fragment --><p> In other words, each nonzero element of <picture><source srcset="form_1022_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde
+  U^\text{coarse}_\text{child}$" src="form_1022.png"/></picture> <em>overwrites</em>, rather than adds to the corresponding element of <picture><source srcset="form_1021_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\text{coarse}|_\text{parent}$" src="form_1021.png"/></picture>. This typically also implies that the restriction matrices from two different cells should agree on a value for coarse degrees of freedom that they both want to touch (otherwise the result would depend on the order in which we loop over children, which would be unreasonable because the order of children is an otherwise arbitrary convention). For example, in the example above, the restriction matrices will be  </p><p class="formulaDsp">
+<picture><source srcset="form_1023_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     R_0 = \left(\begin{matrix}1 &amp; 0 &amp; 0 \\ 0 &amp; 0 &amp; 0 \\ 0 &amp; 1 &amp; 0
   \end{matrix}\right), \qquad\qquad R_1 = \left(\begin{matrix}0 &amp; 0 &amp; 0 \\ 0 &amp;
   1 &amp; 0 \\ 1 &amp; 0 &amp; 0 \end{matrix}\right),
-  \]" src="form_989.png"/></picture>
+  \]" src="form_1023.png"/></picture>
 </p>
-<p> and the compatibility condition is the <picture><source srcset="form_990_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R_{0,21}=R_{1,20}$" src="form_990.png"/></picture> because they both indicate that <picture><source srcset="form_991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\text{coarse}|_\text{parent,2}$" src="form_991.png"/></picture> should be set to one times <picture><source srcset="form_992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\text{fine}|_\text{child=0,1}$" src="form_992.png"/></picture> and <picture><source srcset="form_993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\text{fine}|_\text{child=1,0}$" src="form_993.png"/></picture>.</p>
+<p> and the compatibility condition is the <picture><source srcset="form_1024_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R_{0,21}=R_{1,20}$" src="form_1024.png"/></picture> because they both indicate that <picture><source srcset="form_1025_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\text{coarse}|_\text{parent,2}$" src="form_1025.png"/></picture> should be set to one times <picture><source srcset="form_1026_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\text{fine}|_\text{child=0,1}$" src="form_1026.png"/></picture> and <picture><source srcset="form_1027_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\text{fine}|_\text{child=1,0}$" src="form_1027.png"/></picture>.</p>
 <p>Unfortunately, not all finite elements allow to write the restriction operation in this way. For example, for the piecewise constant <a class="el" href="classFE__DGQ.html">FE_DGQ(0)</a> element, the value of the finite element field on the parent cell can not be determined by interpolation from the children. Rather, the only reasonable choice is to take it as the <em>average</em> value between the children &ndash; so we are back to the sum operation, rather than the concatenation. Further thought shows that whether restriction should be additive or not is a property of the individual shape function, not of the finite element as a whole. Consequently, the <a class="el" href="#href_anchor">FiniteElement::restriction_is_additive()</a> function returns whether a particular shape function should act via concatenation (a return value of <code>false</code>) or via addition (return value of <code>true</code>), and the correct code for the overall operation is then as follows (and as, in fact, implemented in DoFAccessor::get_interpolated_dof_values()): </p><div class="fragment"><div class="line"><span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> child=0; child&lt;cell-&gt;n_children(); ++child)</div>
 <div class="line">  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;<a class="code hl_variable" href="classFiniteElementData.html#href_anchor">dofs_per_cell</a>; ++i)</div>
 <div class="line">    <span class="keywordflow">if</span> (fe.restriction_is_additive(i) == <span class="keyword">true</span>)</div>
@@ -2087,7 +2087,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>The index of this degree of freedom within the set of degrees of freedom on the entire cell. The returned value will be between zero and dofs_per_cell.</dd></dl>
-<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_994.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function exists in this class because that is where it was first implemented. However, it can't really work in the most general case without knowing what element we have. The reason is that when a face is flipped or rotated, we also need to know whether we need to swap the degrees of freedom on this face, or whether they are immune from this. For this, consider the situation of a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> element in 2d. If face_flip is true, then we need to consider the two degrees of freedom on the edge in reverse order. On the other hand, if the element were a <picture><source srcset="form_1028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1^2$" src="form_1028.png"/></picture>, then because the two degrees of freedom on this edge belong to different vector components, they should not be considered in reverse order. What all of this shows is that the function can't work if there are more than one degree of freedom per line or quad, and that in these cases the function will throw an exception pointing out that this functionality will need to be provided by a derived class that knows what degrees of freedom actually represent. </dd></dl>
 
 <p>Reimplemented in <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, dim &gt;</a>, <a class="el" href="classFE__Q__Base.html#href_anchor">FE_Q_Base&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>, <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, dim &gt;</a>, and <a class="el" href="classFESystem.html#href_anchor">FESystem&lt; dim, spacedim &gt;</a>.</p>
 
@@ -2621,7 +2621,7 @@
       </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">scalar</td><td>An object that represents a single scalar vector component of this finite element. </td></tr>
@@ -2705,7 +2705,7 @@
       </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">component_mask</td><td>The mask that selects individual components of the finite element </td></tr>
@@ -2959,9 +2959,9 @@
       </table>
 </div><div class="memdoc">
 <p>For a given degree of freedom, return whether it is logically associated with a vertex, line, quad or hex.</p>
-<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
-<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
-<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_995.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
+<p>For instance, for continuous finite elements this coincides with the lowest dimensional object the support point of the degree of freedom lies on. To give an example, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements in 3d, every degree of freedom is defined by a shape function that we get by interpolating using support points that lie on the vertices of the cell. The support of these points of course extends to all edges connected to this vertex, as well as the adjacent faces and the cell interior, but we say that logically the degree of freedom is associated with the vertex as this is the lowest- dimensional object it is associated with. Likewise, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements in 3d, the degrees of freedom with support points at edge midpoints would yield a value of <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a> from this function, whereas those on the centers of faces in 3d would return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a>.</p>
+<p>To make this more formal, the kind of object returned by this function represents the object so that the support of the shape function corresponding to the degree of freedom, (i.e., that part of the domain where the function "lives") is the union of all of the cells sharing this object. To return to the example above, for <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> in 3d, the shape function with support point at an edge midpoint has support on all cells that share the edge and not only the cells that share the adjacent faces, and consequently the function will return <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::line</a>.</p>
+<p>On the other hand, for discontinuous elements of type <picture><source srcset="form_1029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_2$" src="form_1029.png"/></picture>, a degree of freedom associated with an interpolation polynomial that has its support point physically located at a line bounding a cell, but is nonzero only on one cell. Consequently, it is logically associated with the interior of that cell (i.e., with a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::quad</a> in 2d and a <a class="el" href="classGeometryPrimitive.html#href_anchor">GeometryPrimitive::hex</a> in 3d).</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">cell_dof_index</td><td>The index of a shape function or degree of freedom. This index must be in the range <code>[0,dofs_per_cell)</code>.</td></tr>
@@ -2996,11 +2996,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given the values of a function <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture>, where <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_997.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, i.e.,  <picture><source srcset="form_999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
-$" src="form_999.png"/></picture> is the finite element interpolant of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
-<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_141.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, the result must have the form <picture><source srcset="form_1001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1001.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> applied to <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at <picture><source srcset="form_1000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1000.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, or any other kind of information.</p>
-<p>The exact form of <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1003.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1004.png"/></picture> where <picture><source srcset="form_145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_145.png"/></picture> is the result of the <a class="el" href="#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1002.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1005.png"/></picture> where <picture><source srcset="form_1006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1006.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
-<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1007.png"/></picture> then you will get out a vector <picture><source srcset="form_1008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1008.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> equals <code>dofs_per_cell</code>.</p>
+<p>Given the values of a function <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> at the (generalized) support points of the reference cell, this function then computes what the nodal values of the element are, i.e., <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture>, where <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are the node functionals of the element (see also <a class="el" href="DEALGlossary.html#href_anchor">Node values or node functionals</a>). The values <picture><source srcset="form_1031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[f]$" src="form_1031.png"/></picture> are then the expansion coefficients for the shape functions of the finite element function that <em>interpolates</em> the given function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, i.e.,  <picture><source srcset="form_1033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ f_h(\mathbf x) = \sum_i \Psi_i[f] \varphi_i(\mathbf x)
+$" src="form_1033.png"/></picture> is the finite element interpolant of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> with the current element. The operation described here is used, for example, in the <a class="el" href="namespaceFETools.html#href_anchor">FETools::compute_node_matrix()</a> function.</p>
+<p>In more detail, let us assume that the generalized support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) of the current element are <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture> and that the node functionals associated with the current element are <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\cdot]$" src="form_115.png"/></picture>. Then, the fact that the element is based on generalized support points, implies that if we apply <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to a (possibly vector-valued) finite element function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, the result must have the form <picture><source srcset="form_1035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = f_i(\varphi(\hat{\mathbf x}_i))$" src="form_1035.png"/></picture> &ndash; in other words, the value of the node functional <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> applied to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>only</em> depends on the <em>values of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}_i$" src="form_1034.png"/></picture></em> and not on values anywhere else, or integrals of <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, or any other kind of information.</p>
+<p>The exact form of <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> depends on the element. For example, for scalar <a class="el" href="DEALGlossary.html#href_anchor">Lagrange elements</a>, we have that in fact <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)$" src="form_1037.png"/></picture>. If you combine multiple scalar Lagrange elements via an <a class="el" href="classFESystem.html">FESystem</a> object, then <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi] = \varphi(\hat{\mathbf x}_i)_{c(i)}$" src="form_1038.png"/></picture> where <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(i)$" src="form_119.png"/></picture> is the result of the <a class="el" href="#href_anchor">FiniteElement::system_to_component_index()</a> function's return value's first component. In these two cases, <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i$" src="form_1036.png"/></picture> is therefore simply the identity (in the scalar case) or a function that selects a particular vector component of its argument. On the other hand, for Raviart-Thomas elements, one would have that <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i(\mathbf y) = \mathbf y \cdot \mathbf n_i$" src="form_1039.png"/></picture> where <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n_i$" src="form_1040.png"/></picture> is the normal vector of the face at which the shape function is defined.</p>
+<p>Given all of this, what this function does is the following: If you input a list of values of a function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> at all generalized support points (where each value is in fact a vector of values with as many components as the element has), then this function returns a vector of values obtained by applying the node functionals to these values. In other words, if you pass in <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi(\hat{\mathbf x}_i)\}_{i=0}^{N-1}$" src="form_1041.png"/></picture> then you will get out a vector <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi[\varphi]\}_{i=0}^{N-1}$" src="form_1042.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> equals <code>dofs_per_cell</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">support_point_values</td><td>An array of size <code>dofs_per_cell</code> (which equals the number of points the <a class="el" href="#href_anchor">get_generalized_support_points()</a> function will return) where each element is a vector with as many entries as the element has vector components. This array should contain the values of a function at the generalized support points of the current element. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFiniteSizeHistory.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFiniteSizeHistory.html	2024-03-17 21:57:29.903150668 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFiniteSizeHistory.html	2024-03-17 21:57:29.903150668 +0000
@@ -129,7 +129,7 @@
 <div class="textblock"><div class="compoundTemplParams">template&lt;typename T&gt;<br />
 class FiniteSizeHistory&lt; T &gt;</div><p>A helper class to store a finite-size collection of objects of type <code>T</code>. If the number of elements exceeds the specified maximum size of the container, the oldest element is removed. Additionally, random access and removal of elements is implemented. Indexing is done relative to the last added element.</p>
 <p>In order to optimize the container for usage with memory-demanding objects (i.e. linear algebra vectors), the removal of an element does not free the memory. Instead the element is being kept in a separate cache so that subsequent addition does not require re-allocation of memory.</p>
-<p>The primary usage of this class is in solvers to store a history of vectors. That is, if at the iteration <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> we store <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> vectors from previous iterations <picture><source srcset="form_2204_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{k-1,k-2,...,k-m\}$" src="form_2204.png"/></picture>, then addition of the new element will make the object contain elements from iterations <picture><source srcset="form_2205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{k,k-1,k-2,...,k-m+1\}$" src="form_2205.png"/></picture>. </p>
+<p>The primary usage of this class is in solvers to store a history of vectors. That is, if at the iteration <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> we store <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> vectors from previous iterations <picture><source srcset="form_2204_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{k-1,k-2,...,k-m\}$" src="form_2204.png"/></picture>, then addition of the new element will make the object contain elements from iterations <picture><source srcset="form_2205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{k,k-1,k-2,...,k-m+1\}$" src="form_2205.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="history_8h_source.html#href_anchor">49</a> of file <a class="el" href="history_8h_source.html">history.h</a>.</p>
 </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFlatManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFlatManifold.html	2024-03-17 21:57:29.951150964 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFlatManifold.html	2024-03-17 21:57:29.955150989 +0000
@@ -491,7 +491,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a vector that, at <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1427.png"/></picture>. For the current class, we assume that the manifold is flat, so the geodesic is the straight line between the two points, and we return <picture><source srcset="form_1436_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2-\mathbf x_1$" src="form_1436.png"/></picture>. The normalization of the vector is chosen so that it fits the convention described in <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a>.</p>
+<p>Return a vector that, at <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1429.png"/></picture>. For the current class, we assume that the manifold is flat, so the geodesic is the straight line between the two points, and we return <picture><source srcset="form_1437_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2-\mathbf x_1$" src="form_1437.png"/></picture>. The normalization of the vector is chosen so that it fits the convention described in <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a>.</p>
 <dl class="section note"><dt>Note</dt><dd>If you use this class as a stepping stone to build a manifold that only "slightly" deviates from a flat manifold, by overloading the <a class="el" href="#href_anchor">project_to_manifold()</a> function.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -500,7 +500,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>A "direction" vector tangential to the geodesic. Here, this is <picture><source srcset="form_1436_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2-\mathbf x_1$" src="form_1436.png"/></picture>, possibly modified by the periodicity of the domain as set in the constructor, to use the "shortest" connection between the points through the periodic boundary as necessary. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>A "direction" vector tangential to the geodesic. Here, this is <picture><source srcset="form_1437_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2-\mathbf x_1$" src="form_1437.png"/></picture>, possibly modified by the periodicity of the domain as set in the constructor, to use the "shortest" connection between the points through the periodic boundary as necessary. </dd></dl>
 
 <p>Reimplemented from <a class="el" href="classManifold.html#href_anchor">Manifold&lt; dim, spacedim &gt;</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classFullMatrix.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFullMatrix.html	2024-03-17 21:57:30.023151409 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFullMatrix.html	2024-03-17 21:57:30.031151459 +0000
@@ -1081,8 +1081,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the <em>l<sub>1</sub></em>-norm of the matrix, where <picture><source srcset="form_1631_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$||M||_1 =
-\max_j \sum_i |M_{ij}|$" src="form_1631.png"/></picture> (maximum of the sums over columns). </p>
+<p>Return the <em>l<sub>1</sub></em>-norm of the matrix, where <picture><source srcset="form_1634_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$||M||_1 =
+\max_j \sum_i |M_{ij}|$" src="form_1634.png"/></picture> (maximum of the sums over columns). </p>
 
 </div>
 </div>
@@ -1102,8 +1102,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of the matrix, where <picture><source srcset="form_1632_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$||M||_\infty = \max_i
-\sum_j |M_{ij}|$" src="form_1632.png"/></picture> (maximum of the sums over rows). </p>
+<p>Return the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of the matrix, where <picture><source srcset="form_1635_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$||M||_\infty = \max_i
+\sum_j |M_{ij}|$" src="form_1635.png"/></picture> (maximum of the sums over rows). </p>
 
 </div>
 </div>
@@ -2056,7 +2056,7 @@
 </div><div class="memdoc">
 <p>A=Inverse(A). A must be a square matrix. Inversion of this matrix by Gauss-Jordan algorithm with partial pivoting. This process is well-behaved for positive definite matrices, but be aware of round-off errors in the indefinite case.</p>
 <p>In case deal.II was configured with LAPACK, the functions Xgetrf and Xgetri build an LU factorization and invert the matrix upon that factorization, providing best performance up to matrices with a few hundreds rows and columns.</p>
-<p>The numerical effort to invert an <picture><source srcset="form_1618_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n \times n$" src="form_1618.png"/></picture> matrix is of the order <picture><source srcset="form_1633_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n^3$" src="form_1633.png"/></picture>. </p>
+<p>The numerical effort to invert an <picture><source srcset="form_1618_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n \times n$" src="form_1618.png"/></picture> matrix is of the order <picture><source srcset="form_1636_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n^3$" src="form_1636.png"/></picture>. </p>
 
 </div>
 </div>
@@ -2100,7 +2100,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Assign the Cholesky decomposition <picture><source srcset="form_1634_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A=:L L^T$" src="form_1634.png"/></picture> of the given matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> to <code>*this</code>, where <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture> is lower triangular matrix. The given matrix must be symmetric positive definite.</p>
+<p>Assign the Cholesky decomposition <picture><source srcset="form_1637_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A=:L L^T$" src="form_1637.png"/></picture> of the given matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> to <code>*this</code>, where <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture> is lower triangular matrix. The given matrix must be symmetric positive definite.</p>
 <p>ExcMatrixNotPositiveDefinite will be thrown in the case that the matrix is not positive definite. </p>
 
 </div>
@@ -2124,7 +2124,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classVector.html">Vector</a>&lt; number2 &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>W</em></span>&#href_anchor"memdoc">
-<p><code>*this(i,j)</code> = <picture><source srcset="form_1635_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(i) W(j)$" src="form_1635.png"/></picture> where <picture><source srcset="form_1636_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V,W$" src="form_1636.png"/></picture> are vectors of the same length. </p>
+<p><code>*this(i,j)</code> = <picture><source srcset="form_1638_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(i) W(j)$" src="form_1638.png"/></picture> where <picture><source srcset="form_1639_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V,W$" src="form_1639.png"/></picture> are vectors of the same length. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunction.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunction.html	2024-03-17 21:57:30.091151829 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunction.html	2024-03-17 21:57:30.095151854 +0000
@@ -250,7 +250,7 @@
 C}^{n_\text{components}}$" src="form_455.png"/></picture>. In such cases, you can choose a value different than the default <code>double</code> for the second template argument of this class: it describes the scalar type to be used for each component of your return values. It defaults to <code>double</code>, but in the example above, it could be set to <code>std::complex&lt;double&gt;</code>. <a class="el" href="step_58.html">step-58</a> is an example of this.</p>
 <dl class="tparams"><dt>Template Parameters</dt><dd>
   <table class="tparams">
-    <tr><td class="paramname">dim</td><td>The space dimension of the range space within which the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> of the function lies. Consequently, the function will be evaluated at objects of type <code>Point&lt;dim&gt;</code>. </td></tr>
+    <tr><td class="paramname">dim</td><td>The space dimension of the range space within which the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> of the function lies. Consequently, the function will be evaluated at objects of type <code>Point&lt;dim&gt;</code>. </td></tr>
     <tr><td class="paramname">RangeNumberType</td><td>The scalar type of the vector space that is the range (or image) of this function. As discussed above, objects of the current type represent functions from <picture><source srcset="form_456_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb
   R}^\text{dim}$" src="form_456.png"/></picture> to <picture><source srcset="form_457_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^{n_\text{components}}$" src="form_457.png"/></picture> where <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> is the underlying scalar type of the vector space. The type of <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> is given by the <code>RangeNumberType</code> template argument. </td></tr>
   </table>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctionDerivative.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctionDerivative.html	2024-03-17 21:57:30.155152225 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctionDerivative.html	2024-03-17 21:57:30.163152274 +0000
@@ -349,27 +349,27 @@
 <p>Names of difference formulas. </p>
 <table class="fieldtable">
 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a8e3a3152c1a97076b961dcb35a3bb36babf0b91e6181d44127eb8d23ff080f286" name="a8e3a3152c1a97076b961dcb35a3bb36babf0b91e6181d44127eb8d23ff080f286"></a>Euler&#160;</td><td class="fielddoc"><p>The symmetric Euler formula of second order:  </p><p class="formulaDsp">
-<picture><source srcset="form_351_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_359_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u'(t) \approx
 \frac{u(t+h) -
 u(t-h)}{2h}.
-\]" src="form_351.png"/></picture>
+\]" src="form_359.png"/></picture>
 </p>
  </td></tr>
 <tr><td class="fieldname"><a id="a8e3a3152c1a97076b961dcb35a3bb36bab261116ff92510dff59a179b43fdb444" name="a8e3a3152c1a97076b961dcb35a3bb36bab261116ff92510dff59a179b43fdb444"></a>UpwindEuler&#160;</td><td class="fielddoc"><p>The upwind Euler formula of first order:  </p><p class="formulaDsp">
-<picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u'(t) \approx
 \frac{u(t) -
 u(t-h)}{h}.
-\]" src="form_352.png"/></picture>
+\]" src="form_360.png"/></picture>
 </p>
  </td></tr>
 <tr><td class="fieldname"><a id="a8e3a3152c1a97076b961dcb35a3bb36ba1d80de60e448c04501ec359c16b6c08d" name="a8e3a3152c1a97076b961dcb35a3bb36ba1d80de60e448c04501ec359c16b6c08d"></a>FourthOrder&#160;</td><td class="fielddoc"><p>The fourth order scheme  </p><p class="formulaDsp">
-<picture><source srcset="form_353_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_361_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u'(t) \approx
 \frac{u(t-2h) - 8u(t-h)
 +  8u(t+h) - u(t+2h)}{12h}.
-\]" src="form_353.png"/></picture>
+\]" src="form_361.png"/></picture>
 </p>
  </td></tr>
 </table>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctionManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctionManifold.html	2024-03-17 21:57:30.215152595 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctionManifold.html	2024-03-17 21:57:30.223152644 +0000
@@ -558,7 +558,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> that maps from the sub_manifold coordinate system to the Euclidean coordinate system. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
+<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> that maps from the sub_manifold coordinate system to the Euclidean coordinate system. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
 <p>This function is used in the computations required by the <a class="el" href="classChartManifold.html#href_anchor">get_tangent_vector()</a> function. The default implementation calls the get_gradient() method of the <a class="el" href="#href_anchor">FunctionManifold::push_forward_function()</a> member class. If you construct this object using the constructor that takes two string expression, then the default implementation of this method uses a finite difference scheme to compute the gradients(see the
 AutoDerivativeFunction() class for details), and you can specify the size of the spatial step size at construction time with the <code>h</code> parameter.</p>
 <p>Refer to the general documentation of this class for more information. </p>
@@ -735,24 +735,24 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a vector that, at <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1427.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
-<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1442.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
-<picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>Return a vector that, at <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1429.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
+<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1439.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
+<picture><source srcset="form_1440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \zeta(t) &amp;= \xi_1 +  t (\xi_2-\xi_1)
  \\          &amp;= F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                             -F^{-1}(\mathbf x_1)\right]
-\end{align*}" src="form_1443.png"/></picture>
+\end{align*}" src="form_1440.png"/></picture>
 </p>
 <p> In image space, i.e., in the space in which we operate, this leads to the curve  </p><p class="formulaDsp">
-<picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_1441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s(t) &amp;= F(\zeta(t))
  \\          &amp;= F(\xi_1 +  t (\xi_2-\xi_1))
  \\          &amp;= F\left(F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                     -F^{-1}(\mathbf x_1)\right]\right).
-\end{align*}" src="form_1444.png"/></picture>
+\end{align*}" src="form_1441.png"/></picture>
 </p>
-<p> What the current function is supposed to return is <picture><source srcset="form_1431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1431.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
-<picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> What the current function is supposed to return is <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1433.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
+<picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s'(0) &amp;=
     \frac{d}{dt}\left. F\left(F^{-1}(\mathbf x_1)
                        + t\left[F^{-1}(\mathbf x_2)
@@ -761,11 +761,11 @@
 \\ &amp;= \nabla_\xi F\left(F^{-1}(\mathbf x_1)\right)
                    \left[F^{-1}(\mathbf x_2)
                                 -F^{-1}(\mathbf x_1)\right].
-\end{align*}" src="form_1445.png"/></picture>
+\end{align*}" src="form_1442.png"/></picture>
 </p>
 <p> This formula may then have to be slightly modified by considering any periodicity that was assumed in the call to the constructor.</p>
-<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1446.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1447.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
-x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1448.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
+<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1443.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1444.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
+x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1445.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">x1</td><td>The first point that describes the geodesic, and the one at which the "direction" is to be evaluated. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctionParser.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctionParser.html	2024-03-17 21:57:30.291153064 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctionParser.html	2024-03-17 21:57:30.295153089 +0000
@@ -510,27 +510,27 @@
 <p>Names of difference formulas. </p>
 <table class="fieldtable">
 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a8e3a3152c1a97076b961dcb35a3bb36babf0b91e6181d44127eb8d23ff080f286" name="a8e3a3152c1a97076b961dcb35a3bb36babf0b91e6181d44127eb8d23ff080f286"></a>Euler&#160;</td><td class="fielddoc"><p>The symmetric Euler formula of second order:  </p><p class="formulaDsp">
-<picture><source srcset="form_351_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_359_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u'(t) \approx
 \frac{u(t+h) -
 u(t-h)}{2h}.
-\]" src="form_351.png"/></picture>
+\]" src="form_359.png"/></picture>
 </p>
  </td></tr>
 <tr><td class="fieldname"><a id="a8e3a3152c1a97076b961dcb35a3bb36bab261116ff92510dff59a179b43fdb444" name="a8e3a3152c1a97076b961dcb35a3bb36bab261116ff92510dff59a179b43fdb444"></a>UpwindEuler&#160;</td><td class="fielddoc"><p>The upwind Euler formula of first order:  </p><p class="formulaDsp">
-<picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u'(t) \approx
 \frac{u(t) -
 u(t-h)}{h}.
-\]" src="form_352.png"/></picture>
+\]" src="form_360.png"/></picture>
 </p>
  </td></tr>
 <tr><td class="fieldname"><a id="a8e3a3152c1a97076b961dcb35a3bb36ba1d80de60e448c04501ec359c16b6c08d" name="a8e3a3152c1a97076b961dcb35a3bb36ba1d80de60e448c04501ec359c16b6c08d"></a>FourthOrder&#160;</td><td class="fielddoc"><p>The fourth order scheme  </p><p class="formulaDsp">
-<picture><source srcset="form_353_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_361_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u'(t) \approx
 \frac{u(t-2h) - 8u(t-h)
 +  8u(t+h) - u(t+2h)}{12h}.
-\]" src="form_353.png"/></picture>
+\]" src="form_361.png"/></picture>
 </p>
  </td></tr>
 </table>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1CoordinateRestriction.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1CoordinateRestriction.html	2024-03-17 21:57:30.355153460 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1CoordinateRestriction.html	2024-03-17 21:57:30.351153435 +0000
@@ -217,7 +217,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class Functions::CoordinateRestriction&lt; dim &gt;</div><p>This class takes a function in <code>dim + 1</code> dimensions and creates a new function in one dimension lower by restricting one of the coordinates to a given value. Mathematically this corresponds to taking a function <picture><source srcset="form_503_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f = f(x, y, z)$" src="form_503.png"/></picture>, a fixed value, <picture><source srcset="form_504_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Z$" src="form_504.png"/></picture>, and defining a new function (the restriction) <picture><source srcset="form_505_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g = g(x, y) = f(x, y, Z)$" src="form_505.png"/></picture>. Using this class, this translates to </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFunction.html">Function&lt;3&gt;</a> &amp;            <a class="code hl_variable" href="#href_anchor">function</a>             = ...</div>
+class Functions::CoordinateRestriction&lt; dim &gt;</div><p>This class takes a function in <code>dim + 1</code> dimensions and creates a new function in one dimension lower by restricting one of the coordinates to a given value. Mathematically this corresponds to taking a function <picture><source srcset="form_505_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f = f(x, y, z)$" src="form_505.png"/></picture>, a fixed value, <picture><source srcset="form_506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Z$" src="form_506.png"/></picture>, and defining a new function (the restriction) <picture><source srcset="form_507_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g = g(x, y) = f(x, y, Z)$" src="form_507.png"/></picture>. Using this class, this translates to </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFunction.html">Function&lt;3&gt;</a> &amp;            <a class="code hl_variable" href="#href_anchor">function</a>             = ...</div>
 <div class="line">double                   z                    = ...</div>
 <div class="line">unsigned <span class="keywordtype">int</span>             <a class="code hl_variable" href="#href_anchor">restricted_direction</a> = 2;</div>
 <div class="line"><a class="code hl_class" href="classFunctions_1_1CoordinateRestriction.html">CoordinateRestriction&lt;2&gt;</a> restriction(<a class="code hl_variable" href="#href_anchor">function</a>, <a class="code hl_variable" href="#href_anchor">restricted_direction</a>, z);</div>
@@ -225,7 +225,7 @@
 <div class="ttc" id="aclassFunctions_1_1CoordinateRestriction_html"><div class="ttname"><a href="classFunctions_1_1CoordinateRestriction.html">Functions::CoordinateRestriction</a></div><div class="ttdef"><b>Definition</b> <a href="function__restriction_8h_source.html#href_anchor">function_restriction.h:52</a></div></div>
 <div class="ttc" id="aclassFunctions_1_1CoordinateRestriction_html_a85a9602dd71d1da401c60e407fe320b1"><div class="ttname"><a href="#href_anchor">Functions::CoordinateRestriction::restricted_direction</a></div><div class="ttdeci">const unsigned int restricted_direction</div><div class="ttdef"><b>Definition</b> <a href="function__restriction_8h_source.html#href_anchor">function_restriction.h:81</a></div></div>
 <div class="ttc" id="aclassFunctions_1_1CoordinateRestriction_html_a9743ab1caee903ab7d1388bddc85888d"><div class="ttname"><a href="#href_anchor">Functions::CoordinateRestriction::function</a></div><div class="ttdeci">const SmartPointer&lt; const Function&lt; dim+1 &gt; &gt; function</div><div class="ttdef"><b>Definition</b> <a href="function__restriction_8h_source.html#href_anchor">function_restriction.h:78</a></div></div>
-</div><!-- fragment --><p>The <code>dim</code>-dimensional coordinates on the restriction are ordered starting from the restricted (<code>dim + 1</code>)-coordinate. In particular, this means that if the <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>-coordinate is locked to <picture><source srcset="form_506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Y$" src="form_506.png"/></picture> in 3d, the coordinates are ordered as <picture><source srcset="form_507_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(z, x)$" src="form_507.png"/></picture> on the restriction: <picture><source srcset="form_508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g = g(z, x) = f(x, Y, z)$" src="form_508.png"/></picture>. This is the same convention as in <a class="el" href="classBoundingBox.html#href_anchor">BoundingBox::cross_section</a>. </p>
+</div><!-- fragment --><p>The <code>dim</code>-dimensional coordinates on the restriction are ordered starting from the restricted (<code>dim + 1</code>)-coordinate. In particular, this means that if the <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>-coordinate is locked to <picture><source srcset="form_508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Y$" src="form_508.png"/></picture> in 3d, the coordinates are ordered as <picture><source srcset="form_509_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(z, x)$" src="form_509.png"/></picture> on the restriction: <picture><source srcset="form_510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g = g(z, x) = f(x, Y, z)$" src="form_510.png"/></picture>. This is the same convention as in <a class="el" href="classBoundingBox.html#href_anchor">BoundingBox::cross_section</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="function__restriction_8h_source.html#href_anchor">51</a> of file <a class="el" href="function__restriction_8h_source.html">function_restriction.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1CutOffFunctionCinfty.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1CutOffFunctionCinfty.html	2024-03-17 21:57:30.403153757 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1CutOffFunctionCinfty.html	2024-03-17 21:57:30.407153781 +0000
@@ -240,7 +240,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class Functions::CutOffFunctionCinfty&lt; dim &gt;</div><p>Cut-off function for an arbitrary ball. This is the traditional cut-off function in C-infinity for a ball of certain <code>radius</code> around <code>center</code>, <picture><source srcset="form_482_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(r)=exp(1-1/(1-r**2/s**2))$" src="form_482.png"/></picture>, where <picture><source srcset="form_414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_414.png"/></picture> is the distance to the center, and <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> is the radius of the sphere. If vector valued, it can be restricted to a single component. </p>
+class Functions::CutOffFunctionCinfty&lt; dim &gt;</div><p>Cut-off function for an arbitrary ball. This is the traditional cut-off function in C-infinity for a ball of certain <code>radius</code> around <code>center</code>, <picture><source srcset="form_482_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(r)=exp(1-1/(1-r**2/s**2))$" src="form_482.png"/></picture>, where <picture><source srcset="form_378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_378.png"/></picture> is the distance to the center, and <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> is the radius of the sphere. If vector valued, it can be restricted to a single component. </p>
 
 <p class="definition">Definition at line <a class="el" href="function__lib_8h_source.html#href_anchor">1259</a> of file <a class="el" href="function__lib_8h_source.html">function_lib.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1InterpolatedTensorProductGridData.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1InterpolatedTensorProductGridData.html	2024-03-17 21:57:30.459154102 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1InterpolatedTensorProductGridData.html	2024-03-17 21:57:30.459154102 +0000
@@ -232,7 +232,7 @@
 x=(x,y,z)$" src="form_492.png"/></picture> will find the box so that <picture><source srcset="form_493_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_k\le x\le x_{k+1}, y_l\le y\le
 y_{l+1}, z_m\le z\le z_{m+1}$" src="form_493.png"/></picture>, and do a trilinear interpolation of the data on this cell. Similar operations are done in lower dimensions.</p>
 <p>This class is most often used for either evaluating coefficients or right hand sides that are provided experimentally at a number of points inside the domain, or for comparing outputs of a solution on a finite element mesh against previously obtained data defined on a grid.</p>
-<dl class="section note"><dt>Note</dt><dd>If the points <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture> are actually equally spaced on an interval <picture><source srcset="form_494_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[x_0,x_1]$" src="form_494.png"/></picture> and the same is true for the other data points in higher dimensions, you should use the <a class="el" href="classFunctions_1_1InterpolatedUniformGridData.html">InterpolatedUniformGridData</a> class instead.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>If the points <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture> are actually equally spaced on an interval <picture><source srcset="form_494_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[x_0,x_1]$" src="form_494.png"/></picture> and the same is true for the other data points in higher dimensions, you should use the <a class="el" href="classFunctions_1_1InterpolatedUniformGridData.html">InterpolatedUniformGridData</a> class instead.</dd></dl>
 <p>If a point is requested outside the box defined by the end points of the coordinate arrays, then the function is assumed to simply extend by constant values beyond the last data point in each coordinate direction. (The class does not throw an error if a point lies outside the box since it frequently happens that a point lies just outside the box by an amount on the order of numerical roundoff.)</p>
 <dl class="section note"><dt>Note</dt><dd>The use of the related class <a class="el" href="classFunctions_1_1InterpolatedUniformGridData.html">InterpolatedUniformGridData</a> is discussed in <a class="el" href="step_53.html">step-53</a>.</dd></dl>
 <h3>Dealing with large data sets</h3>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1InterpolatedUniformGridData.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1InterpolatedUniformGridData.html	2024-03-17 21:57:30.519154473 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1InterpolatedUniformGridData.html	2024-03-17 21:57:30.523154498 +0000
@@ -224,7 +224,7 @@
 class Functions::InterpolatedUniformGridData&lt; dim &gt;</div><p>A scalar function that computes its values by (bi-, tri-)linear interpolation from a set of point data that are arranged on a uniformly spaced tensor product mesh. In other words, considering the three- dimensional case, let there be points <picture><source srcset="form_487_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0,\ldots, x_{K-1}$" src="form_487.png"/></picture> that result from a uniform subdivision of the interval <picture><source srcset="form_495_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[x_0,x_{K-1}]$" src="form_495.png"/></picture> into <picture><source srcset="form_496_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K-1$" src="form_496.png"/></picture> sub-intervals of size <picture><source srcset="form_497_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta x = (x_{K-1}-x_0)/(K-1)$" src="form_497.png"/></picture>, and similarly <picture><source srcset="form_488_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_0,\ldots,y_{L-1}$" src="form_488.png"/></picture>, <picture><source srcset="form_489_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_1,\ldots,z_{M-1}$" src="form_489.png"/></picture>. Also consider data <picture><source srcset="form_490_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_{klm}$" src="form_490.png"/></picture> defined at point <picture><source srcset="form_491_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_k,y_l,z_m)^T$" src="form_491.png"/></picture>, then evaluating the function at a point <picture><source srcset="form_498_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x=(x,y,z)$" src="form_498.png"/></picture> will find the box so that <picture><source srcset="form_499_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_k\le x\le x_{k+1},
 y_l\le y\le y_{l+1}, z_m\le z\le z_{m+1}$" src="form_499.png"/></picture>, and do a trilinear interpolation of the data on this cell. Similar operations are done in lower dimensions.</p>
 <p>This class is most often used for either evaluating coefficients or right hand sides that are provided experimentally at a number of points inside the domain, or for comparing outputs of a solution on a finite element mesh against previously obtained data defined on a grid.</p>
-<dl class="section note"><dt>Note</dt><dd>If you have a problem where the points <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture> are not equally spaced (e.g., they result from a computation on a graded mesh that is denser closer to one boundary), then use the <a class="el" href="classFunctions_1_1InterpolatedTensorProductGridData.html">InterpolatedTensorProductGridData</a> class instead.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>If you have a problem where the points <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture> are not equally spaced (e.g., they result from a computation on a graded mesh that is denser closer to one boundary), then use the <a class="el" href="classFunctions_1_1InterpolatedTensorProductGridData.html">InterpolatedTensorProductGridData</a> class instead.</dd></dl>
 <p>If a point is requested outside the box defined by the end points of the coordinate arrays, then the function is assumed to simply extend by constant values beyond the last data point in each coordinate direction. (The class does not throw an error if a point lies outside the box since it frequently happens that a point lies just outside the box by an amount on the order of numerical roundoff.)</p>
 <dl class="section note"><dt>Note</dt><dd>The use of this class is discussed in <a class="el" href="step_53.html">step-53</a>.</dd></dl>
 <h3>Dealing with large data sets</h3>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1LSingularityFunction.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1LSingularityFunction.html	2024-03-17 21:57:30.571154794 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1LSingularityFunction.html	2024-03-17 21:57:30.571154794 +0000
@@ -218,13 +218,13 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>A function that solves the Laplace equation (with specific boundary values but zero right hand side) and that has a singularity at the center of the L-shaped domain in 2d (i.e., at the location of the re-entrant corner of this non-convex domain).</p>
 <p>The function is given in polar coordinates by <picture><source srcset="form_466_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r^{\frac{2}{3}}
-\sin(\frac{2}{3} \phi)$" src="form_466.png"/></picture> with a singularity at the origin and should be used with <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_L()</a>. Here, <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> is defined as the <em>clockwise</em> angle against the positive <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>-axis.</p>
+\sin(\frac{2}{3} \phi)$" src="form_466.png"/></picture> with a singularity at the origin and should be used with <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_L()</a>. Here, <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> is defined as the <em>clockwise</em> angle against the positive <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>-axis.</p>
 <p>This function is often used to illustrate that the solutions of the Laplace equation  </p><p class="formulaDsp">
 <picture><source srcset="form_468_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   -\Delta u = 0
 \]" src="form_468.png"/></picture>
 </p>
-<p> can be singular even if the boundary values are smooth. (Here, if the domain is the L-shaped domain <picture><source srcset="form_469_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(-1,1)^2 \backslash [0,1]^2$" src="form_469.png"/></picture>, the boundary values for <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> are zero on the two line segments adjacent to the origin, and equal to <picture><source srcset="form_470_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r^{\frac{2}{3}} \sin(\frac{2}{3} \phi)$" src="form_470.png"/></picture> on the remaining parts of the boundary.) The function itself remains bounded on the domain, but its gradient is of the form <picture><source srcset="form_471_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r^{-1/3}$" src="form_471.png"/></picture> in the vicinity of the origin and consequently diverges as one approaches the origin. </p>
+<p> can be singular even if the boundary values are smooth. (Here, if the domain is the L-shaped domain <picture><source srcset="form_469_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(-1,1)^2 \backslash [0,1]^2$" src="form_469.png"/></picture>, the boundary values for <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> are zero on the two line segments adjacent to the origin, and equal to <picture><source srcset="form_470_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r^{\frac{2}{3}} \sin(\frac{2}{3} \phi)$" src="form_470.png"/></picture> on the remaining parts of the boundary.) The function itself remains bounded on the domain, but its gradient is of the form <picture><source srcset="form_471_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r^{-1/3}$" src="form_471.png"/></picture> in the vicinity of the origin and consequently diverges as one approaches the origin. </p>
 
 <p class="definition">Definition at line <a class="el" href="function__lib_8h_source.html#href_anchor">410</a> of file <a class="el" href="function__lib_8h_source.html">function_lib.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1ParsedFunction.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1ParsedFunction.html	2024-03-17 21:57:30.627155140 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1ParsedFunction.html	2024-03-17 21:57:30.635155189 +0000
@@ -381,27 +381,27 @@
 <p>Names of difference formulas. </p>
 <table class="fieldtable">
 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a8e3a3152c1a97076b961dcb35a3bb36babf0b91e6181d44127eb8d23ff080f286" name="a8e3a3152c1a97076b961dcb35a3bb36babf0b91e6181d44127eb8d23ff080f286"></a>Euler&#160;</td><td class="fielddoc"><p>The symmetric Euler formula of second order:  </p><p class="formulaDsp">
-<picture><source srcset="form_351_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_359_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u'(t) \approx
 \frac{u(t+h) -
 u(t-h)}{2h}.
-\]" src="form_351.png"/></picture>
+\]" src="form_359.png"/></picture>
 </p>
  </td></tr>
 <tr><td class="fieldname"><a id="a8e3a3152c1a97076b961dcb35a3bb36bab261116ff92510dff59a179b43fdb444" name="a8e3a3152c1a97076b961dcb35a3bb36bab261116ff92510dff59a179b43fdb444"></a>UpwindEuler&#160;</td><td class="fielddoc"><p>The upwind Euler formula of first order:  </p><p class="formulaDsp">
-<picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u'(t) \approx
 \frac{u(t) -
 u(t-h)}{h}.
-\]" src="form_352.png"/></picture>
+\]" src="form_360.png"/></picture>
 </p>
  </td></tr>
 <tr><td class="fieldname"><a id="a8e3a3152c1a97076b961dcb35a3bb36ba1d80de60e448c04501ec359c16b6c08d" name="a8e3a3152c1a97076b961dcb35a3bb36ba1d80de60e448c04501ec359c16b6c08d"></a>FourthOrder&#160;</td><td class="fielddoc"><p>The fourth order scheme  </p><p class="formulaDsp">
-<picture><source srcset="form_353_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_361_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u'(t) \approx
 \frac{u(t-2h) - 8u(t-h)
 +  8u(t+h) - u(t+2h)}{12h}.
-\]" src="form_353.png"/></picture>
+\]" src="form_361.png"/></picture>
 </p>
  </td></tr>
 </table>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1PointRestriction.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1PointRestriction.html	2024-03-17 21:57:30.687155510 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1PointRestriction.html	2024-03-17 21:57:30.683155486 +0000
@@ -220,7 +220,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class Functions::PointRestriction&lt; dim &gt;</div><p>This class creates a 1-dimensional function from a <code>dim + 1</code> dimensional function by restricting <code>dim</code> of the coordinate values to a given point. Mathematically this corresponds to taking a function, <picture><source srcset="form_503_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f = f(x, y, z)$" src="form_503.png"/></picture>, and a point <picture><source srcset="form_521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(Y, Z)$" src="form_521.png"/></picture>, and defining a new function <picture><source srcset="form_522_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g = g(x) = f(x, Y, Z)$" src="form_522.png"/></picture>. Using this class, this translates to </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFunction.html">Function&lt;3&gt;</a> &amp;       <a class="code hl_variable" href="#href_anchor">function</a> = ...</div>
+class Functions::PointRestriction&lt; dim &gt;</div><p>This class creates a 1-dimensional function from a <code>dim + 1</code> dimensional function by restricting <code>dim</code> of the coordinate values to a given point. Mathematically this corresponds to taking a function, <picture><source srcset="form_505_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f = f(x, y, z)$" src="form_505.png"/></picture>, and a point <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(Y, Z)$" src="form_511.png"/></picture>, and defining a new function <picture><source srcset="form_512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g = g(x) = f(x, Y, Z)$" src="form_512.png"/></picture>. Using this class, this translates to </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFunction.html">Function&lt;3&gt;</a> &amp;       <a class="code hl_variable" href="#href_anchor">function</a> = ...</div>
 <div class="line">Point&lt;2&gt;            <a class="code hl_variable" href="#href_anchor">point</a>(y, z);</div>
 <div class="line"><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>        <a class="code hl_variable" href="#href_anchor">open_direction</a> = 0;</div>
 <div class="line"><a class="code hl_class" href="classFunctions_1_1PointRestriction.html">PointRestriction&lt;2&gt;</a> restriction(<a class="code hl_variable" href="#href_anchor">function</a>, <a class="code hl_variable" href="#href_anchor">open_direction</a>, <a class="code hl_variable" href="#href_anchor">point</a>);</div>
@@ -229,7 +229,7 @@
 <div class="ttc" id="aclassFunctions_1_1PointRestriction_html_a23c2ee35cf2fe56f977710742971c7a7"><div class="ttname"><a href="#href_anchor">Functions::PointRestriction::open_direction</a></div><div class="ttdeci">const unsigned int open_direction</div><div class="ttdef"><b>Definition</b> <a href="function__restriction_8h_source.html#href_anchor">function_restriction.h:140</a></div></div>
 <div class="ttc" id="aclassFunctions_1_1PointRestriction_html_a8931a676106b37def1bf548060274a49"><div class="ttname"><a href="#href_anchor">Functions::PointRestriction::point</a></div><div class="ttdeci">const Point&lt; dim &gt; point</div><div class="ttdef"><b>Definition</b> <a href="function__restriction_8h_source.html#href_anchor">function_restriction.h:143</a></div></div>
 <div class="ttc" id="aclassFunctions_1_1PointRestriction_html_a9f37f97645a8720999dc167482091621"><div class="ttname"><a href="#href_anchor">Functions::PointRestriction::function</a></div><div class="ttdeci">const SmartPointer&lt; const Function&lt; dim+1 &gt; &gt; function</div><div class="ttdef"><b>Definition</b> <a href="function__restriction_8h_source.html#href_anchor">function_restriction.h:137</a></div></div>
-</div><!-- fragment --><p>The coordinates of the point will be expanded in the higher-dimensional functions coordinates starting from the open-direction (and wrapping around). In particular, if we restrict to a point <picture><source srcset="form_523_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(Z, X)$" src="form_523.png"/></picture> and choose to keep the y-direction open, the restriction that is created is the function <picture><source srcset="form_524_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(y) = f(X, y, Z)$" src="form_524.png"/></picture>. This is consistent with the convention in <a class="el" href="classBoundingBox.html#href_anchor">BoundingBox::cross_section</a>. </p>
+</div><!-- fragment --><p>The coordinates of the point will be expanded in the higher-dimensional functions coordinates starting from the open-direction (and wrapping around). In particular, if we restrict to a point <picture><source srcset="form_513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(Z, X)$" src="form_513.png"/></picture> and choose to keep the y-direction open, the restriction that is created is the function <picture><source srcset="form_514_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(y) = f(X, y, Z)$" src="form_514.png"/></picture>. This is consistent with the convention in <a class="el" href="classBoundingBox.html#href_anchor">BoundingBox::cross_section</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="function__restriction_8h_source.html#href_anchor">110</a> of file <a class="el" href="function__restriction_8h_source.html">function_restriction.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1Polynomial.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1Polynomial.html	2024-03-17 21:57:30.743155856 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1Polynomial.html	2024-03-17 21:57:30.747155881 +0000
@@ -321,8 +321,8 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const std::vector&lt; double &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>coefficients</em></span>&#href_anchor"memdoc">
-<p>Constructor. The coefficients and the exponents of the polynomial are passed as arguments. The <a class="el" href="classTable.html">Table&lt;2, double&gt;</a> exponents has a number of rows equal to the number of monomials of the polynomial and a number of columns equal to dim. The i-th row of the exponents table contains the <picture><source srcset="form_540_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\alpha_{i,d}}$" src="form_540.png"/></picture> exponents of the i-th monomial <picture><source srcset="form_541_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{i}\prod_{d=1}^{dim}
-x_{d}^{\alpha_{i,d}}$" src="form_541.png"/></picture>. The i-th element of the coefficients vector contains the coefficient <picture><source srcset="form_501_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{i}$" src="form_501.png"/></picture> for the i-th monomial. </p>
+<p>Constructor. The coefficients and the exponents of the polynomial are passed as arguments. The <a class="el" href="classTable.html">Table&lt;2, double&gt;</a> exponents has a number of rows equal to the number of monomials of the polynomial and a number of columns equal to dim. The i-th row of the exponents table contains the <picture><source srcset="form_503_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\alpha_{i,d}}$" src="form_503.png"/></picture> exponents of the i-th monomial <picture><source srcset="form_504_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{i}\prod_{d=1}^{dim}
+x_{d}^{\alpha_{i,d}}$" src="form_504.png"/></picture>. The i-th element of the coefficients vector contains the coefficient <picture><source srcset="form_501_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{i}$" src="form_501.png"/></picture> for the i-th monomial. </p>
 
 <p class="definition">Definition at line <a class="el" href="function__lib_8cc_source.html#href_anchor">2838</a> of file <a class="el" href="function__lib_8cc_source.html">function_lib.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Ellipsoid.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Ellipsoid.html	2024-03-17 21:57:30.811156276 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Ellipsoid.html	2024-03-17 21:57:30.811156276 +0000
@@ -227,11 +227,11 @@
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
 class Functions::SignedDistance::Ellipsoid&lt; dim &gt;</div><p>Signed-distance level set function to an ellipsoid defined by:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_518_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_527_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \sum_{i=1}^{dim} \frac{(x_i - c_i)^2}{R_i^2} = 1
-\]" src="form_518.png"/></picture>
+\]" src="form_527.png"/></picture>
 </p>
-<p>Here, <picture><source srcset="form_519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_i$" src="form_519.png"/></picture> are the coordinates of the center of the ellipsoid and <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R_i$" src="form_520.png"/></picture> are the elliptic radii. This function is zero on the ellipsoid, negative inside the ellipsoid and positive outside the ellipsoid. </p>
+<p>Here, <picture><source srcset="form_528_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_i$" src="form_528.png"/></picture> are the coordinates of the center of the ellipsoid and <picture><source srcset="form_529_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R_i$" src="form_529.png"/></picture> are the elliptic radii. This function is zero on the ellipsoid, negative inside the ellipsoid and positive outside the ellipsoid. </p>
 
 <p class="definition">Definition at line <a class="el" href="function__signed__distance_8h_source.html#href_anchor">145</a> of file <a class="el" href="function__signed__distance_8h_source.html">function_signed_distance.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
@@ -451,9 +451,9 @@
 </div><div class="memdoc">
 <p>Evaluates the ellipsoid function:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_531_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 f(\vec{x}) = \sum_{i=1}^{dim} \frac{(x_i - c_i)^2}{R_i^2} - 1
-\]" src="form_531.png"/></picture>
+\]" src="form_533.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="function__signed__distance_8cc_source.html#href_anchor">201</a> of file <a class="el" href="function__signed__distance_8cc_source.html">function_signed_distance.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Plane.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Plane.html	2024-03-17 21:57:30.855156549 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Plane.html	2024-03-17 21:57:30.859156573 +0000
@@ -215,7 +215,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class Functions::SignedDistance::Plane&lt; dim &gt;</div><p>Signed level set function of a plane in <picture><source srcset="form_512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^{dim}$" src="form_512.png"/></picture>: <picture><source srcset="form_515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x) = n \cdot (x - x_p)$" src="form_515.png"/></picture>. Here, <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> is the plane normal and <picture><source srcset="form_516_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_p$" src="form_516.png"/></picture> is a point in the plane. Thus, with respect to the direction of the normal, this function is positive above the plane, zero in the plane, and negative below the plane. If the normal is normalized, <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_517.png"/></picture> will be the signed distance to the closest point in the plane. </p>
+class Functions::SignedDistance::Plane&lt; dim &gt;</div><p>Signed level set function of a plane in <picture><source srcset="form_521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^{dim}$" src="form_521.png"/></picture>: <picture><source srcset="form_524_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x) = n \cdot (x - x_p)$" src="form_524.png"/></picture>. Here, <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> is the plane normal and <picture><source srcset="form_525_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_p$" src="form_525.png"/></picture> is a point in the plane. Thus, with respect to the direction of the normal, this function is positive above the plane, zero in the plane, and negative below the plane. If the normal is normalized, <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_526.png"/></picture> will be the signed distance to the closest point in the plane. </p>
 
 <p class="definition">Definition at line <a class="el" href="function__signed__distance_8h_source.html#href_anchor">105</a> of file <a class="el" href="function__signed__distance_8h_source.html">function_signed_distance.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Rectangle.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Rectangle.html	2024-03-17 21:57:30.911156894 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Rectangle.html	2024-03-17 21:57:30.915156920 +0000
@@ -215,7 +215,7 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
 class Functions::SignedDistance::Rectangle&lt; dim &gt;</div><p>Signed-distance level set function of a rectangle.</p>
-<p>This function is zero on the rectangle, negative "inside" and positive in the rest of <picture><source srcset="form_512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^{dim}$" src="form_512.png"/></picture>.</p>
+<p>This function is zero on the rectangle, negative "inside" and positive in the rest of <picture><source srcset="form_521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^{dim}$" src="form_521.png"/></picture>.</p>
 <p>Contour surfaces of the signed distance function of a 3D rectangle are illustrated below:</p>
 <div class="image">
 <img src="signed_distance_hyper_rectangle.png" alt=""/>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Sphere.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Sphere.html	2024-03-17 21:57:30.971157265 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1Sphere.html	2024-03-17 21:57:30.967157240 +0000
@@ -215,9 +215,9 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class Functions::SignedDistance::Sphere&lt; dim &gt;</div><p>Signed-distance level set function of a sphere: <picture><source srcset="form_509_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x) = \| x - x^c \| - R$" src="form_509.png"/></picture>. Here, <picture><source srcset="form_510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x^c$" src="form_510.png"/></picture> is the center of the sphere and <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> is its radius. This function is thus zero on the sphere, negative "inside" the ball having the sphere as its boundary, and positive in the rest of <picture><source srcset="form_512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^{dim}$" src="form_512.png"/></picture>.</p>
-<p>This function has gradient and Hessian equal to <picture><source srcset="form_513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_i \psi(x) = (x - x^c)/\| x - x^c \|$" src="form_513.png"/></picture>,  <picture><source srcset="form_514_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_i \partial_j \psi =
-\delta_{ij}/\| x - x^c \| - (x_i - x_i^c)(x_j - x_j^c)/\| x - x^c \|^3$" src="form_514.png"/></picture>, where <picture><source srcset="form_144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_{ij}$" src="form_144.png"/></picture> is the Kronecker delta function. </p>
+class Functions::SignedDistance::Sphere&lt; dim &gt;</div><p>Signed-distance level set function of a sphere: <picture><source srcset="form_518_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x) = \| x - x^c \| - R$" src="form_518.png"/></picture>. Here, <picture><source srcset="form_519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x^c$" src="form_519.png"/></picture> is the center of the sphere and <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> is its radius. This function is thus zero on the sphere, negative "inside" the ball having the sphere as its boundary, and positive in the rest of <picture><source srcset="form_521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^{dim}$" src="form_521.png"/></picture>.</p>
+<p>This function has gradient and Hessian equal to <picture><source srcset="form_522_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_i \psi(x) = (x - x^c)/\| x - x^c \|$" src="form_522.png"/></picture>,  <picture><source srcset="form_523_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_i \partial_j \psi =
+\delta_{ij}/\| x - x^c \| - (x_i - x_i^c)(x_j - x_j^c)/\| x - x^c \|^3$" src="form_523.png"/></picture>, where <picture><source srcset="form_118_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_{ij}$" src="form_118.png"/></picture> is the Kronecker delta function. </p>
 
 <p class="definition">Definition at line <a class="el" href="function__signed__distance_8h_source.html#href_anchor">49</a> of file <a class="el" href="function__signed__distance_8h_source.html">function_signed_distance.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1ZalesakDisk.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1ZalesakDisk.html	2024-03-17 21:57:31.023157586 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1SignedDistance_1_1ZalesakDisk.html	2024-03-17 21:57:31.031157636 +0000
@@ -216,8 +216,8 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
 class Functions::SignedDistance::ZalesakDisk&lt; dim &gt;</div><p>Signed-distance level set function of Zalesak's disk proposed in <b>[zalesak1979fully]</b>.</p>
-<p>It is calculated by the set difference <picture><source srcset="form_525_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x) = \max(\psi_{S}(x),
--\psi_{N}(x))$" src="form_525.png"/></picture> of the level set functions of a sphere <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_{S}$" src="form_526.png"/></picture> and a rectangle <picture><source srcset="form_527_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_{N}$" src="form_527.png"/></picture>. This function is zero on the surface of the disk, negative "inside" and positive in the rest of <picture><source srcset="form_512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^{dim}$" src="form_512.png"/></picture>.</p>
+<p>It is calculated by the set difference <picture><source srcset="form_530_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x) = \max(\psi_{S}(x),
+-\psi_{N}(x))$" src="form_530.png"/></picture> of the level set functions of a sphere <picture><source srcset="form_531_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_{S}$" src="form_531.png"/></picture> and a rectangle <picture><source srcset="form_532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_{N}$" src="form_532.png"/></picture>. This function is zero on the surface of the disk, negative "inside" and positive in the rest of <picture><source srcset="form_521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^{dim}$" src="form_521.png"/></picture>.</p>
 <p>Contour surfaces of the signed distance function of a 3D Zalesak's disk are illustrated below:</p>
 <div class="image">
 <img src="https://www.dealii.org/images/grids/signed_distance_zalesak_disk.png" alt=""/>
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1Spherical.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1Spherical.html	2024-03-17 21:57:31.091158006 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1Spherical.html	2024-03-17 21:57:31.091158006 +0000
@@ -218,7 +218,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class Functions::Spherical&lt; dim &gt;</div><p>An abstract base class for a scalar-valued function <picture><source srcset="form_532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=f(r,\theta,\phi)$" src="form_532.png"/></picture> defined in spherical coordinates. This class wraps transformation of values, gradients and hessians from spherical coordinates to the Cartesian coordinate system used by the <a class="el" href="classFunction.html">Function</a> base class. Therefore derived classes only need to implement those functions in spherical coordinates (specifically <a class="el" href="#href_anchor">svalue()</a>, <a class="el" href="#href_anchor">sgradient()</a> and <a class="el" href="#href_anchor">shessian()</a> ). The convention for angles is the same as in <a class="el" href="namespaceGeometricUtilities_1_1Coordinates.html">GeometricUtilities::Coordinates</a>.</p>
+class Functions::Spherical&lt; dim &gt;</div><p>An abstract base class for a scalar-valued function <picture><source srcset="form_534_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=f(r,\theta,\phi)$" src="form_534.png"/></picture> defined in spherical coordinates. This class wraps transformation of values, gradients and hessians from spherical coordinates to the Cartesian coordinate system used by the <a class="el" href="classFunction.html">Function</a> base class. Therefore derived classes only need to implement those functions in spherical coordinates (specifically <a class="el" href="#href_anchor">svalue()</a>, <a class="el" href="#href_anchor">sgradient()</a> and <a class="el" href="#href_anchor">shessian()</a> ). The convention for angles is the same as in <a class="el" href="namespaceGeometricUtilities_1_1Coordinates.html">GeometricUtilities::Coordinates</a>.</p>
 <dl class="section note"><dt>Note</dt><dd>This function is currently only implemented for dim==3 . </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="function__spherical_8h_source.html#href_anchor">44</a> of file <a class="el" href="function__spherical_8h_source.html">function_spherical.h</a>.</p>
@@ -517,7 +517,7 @@
 </table>
 </div><div class="memdoc">
 <p>Return the gradient in spherical coordinates.</p>
-<p>The returned object should contain derivatives in the following order: <picture><source srcset="form_542_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{ f_{,r},\, f_{,\theta},\, f_{,\phi}\}$" src="form_542.png"/></picture>. </p>
+<p>The returned object should contain derivatives in the following order: <picture><source srcset="form_535_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{ f_{,r},\, f_{,\theta},\, f_{,\phi}\}$" src="form_535.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="function__spherical_8cc_source.html#href_anchor">330</a> of file <a class="el" href="function__spherical_8cc_source.html">function_spherical.cc</a>.</p>
 
@@ -548,8 +548,8 @@
 </table>
 </div><div class="memdoc">
 <p>Return the Hessian in spherical coordinates.</p>
-<p>The returned object should contain derivatives in the following order:  <picture><source srcset="form_543_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{ f_{,rr},\, f_{,\theta\theta},\, f_{,\phi\phi},\, f_{,r\theta},\,
-f_{,r\phi},\, f_{,\theta\phi}\}$" src="form_543.png"/></picture>. </p>
+<p>The returned object should contain derivatives in the following order:  <picture><source srcset="form_536_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{ f_{,rr},\, f_{,\theta\theta},\, f_{,\phi\phi},\, f_{,r\theta},\,
+f_{,r\phi},\, f_{,\theta\phi}\}$" src="form_536.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="function__spherical_8cc_source.html#href_anchor">341</a> of file <a class="el" href="function__spherical_8cc_source.html">function_spherical.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1StokesLSingularity.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1StokesLSingularity.html	2024-03-17 21:57:31.155158402 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classFunctions_1_1StokesLSingularity.html	2024-03-17 21:57:31.159158427 +0000
@@ -264,7 +264,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>A singular solution to Stokes' equations on a 2d L-shaped domain.</p>
-<p>This function satisfies <picture><source srcset="form_449_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\triangle \mathbf{u} + \nabla p = 0$" src="form_449.png"/></picture> and represents a typical singular solution around a reentrant corner of an L-shaped domain that can be created using <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_L()</a>. The velocity vanishes on the two faces of the re-entrant corner and <picture><source srcset="form_450_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\mathbf{u}$" src="form_450.png"/></picture> and <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> are singular at the origin while they are smooth in the rest of the domain because they can be written as a product of a smooth function and the term <picture><source srcset="form_451_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r^{\lambda-1}$" src="form_451.png"/></picture> where <picture><source srcset="form_414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_414.png"/></picture> is the radius and <picture><source srcset="form_452_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda \approx 0.54448$" src="form_452.png"/></picture> is a fixed parameter.</p>
+<p>This function satisfies <picture><source srcset="form_449_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\triangle \mathbf{u} + \nabla p = 0$" src="form_449.png"/></picture> and represents a typical singular solution around a reentrant corner of an L-shaped domain that can be created using <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_L()</a>. The velocity vanishes on the two faces of the re-entrant corner and <picture><source srcset="form_450_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\mathbf{u}$" src="form_450.png"/></picture> and <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> are singular at the origin while they are smooth in the rest of the domain because they can be written as a product of a smooth function and the term <picture><source srcset="form_451_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r^{\lambda-1}$" src="form_451.png"/></picture> where <picture><source srcset="form_378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_378.png"/></picture> is the radius and <picture><source srcset="form_452_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda \approx 0.54448$" src="form_452.png"/></picture> is a fixed parameter.</p>
 <p>Taken from Houston, Sch&ouml;tzau, Wihler, proceeding ENUMATH 2003. </p>
 
 <p class="definition">Definition at line <a class="el" href="flow__function_8h_source.html#href_anchor">246</a> of file <a class="el" href="flow__function_8h_source.html">flow_function.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classGridIn.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classGridIn.html	2024-03-17 21:57:31.219158797 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classGridIn.html	2024-03-17 21:57:31.215158772 +0000
@@ -911,7 +911,7 @@
   </dd>
 </dl>
 <dl class="section return"><dt>Returns</dt><dd>This function returns a struct containing some extra data stored by the ExodusII file that cannot be loaded into a <a class="el" href="classTriangulation.html">Triangulation</a> - see <a class="el" href="structGridIn_1_1ExodusIIData.html">ExodusIIData</a> for more information.</dd></dl>
-<p>A cell face in ExodusII can be in an arbitrary number of sidesets (i.e., it can have an arbitrary number of sideset ids) - however, a boundary cell face in deal.II has exactly one boundary id. All boundary faces that are not in a sideset are given the (default) boundary id of <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture>. This function then groups sidesets together into unique sets and gives each one a boundary id. For example: Consider a single-quadrilateral mesh whose left side has no sideset id, right side has sideset ids <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture> and <picture><source srcset="form_670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1$" src="form_670.png"/></picture>, and whose bottom and top sides have sideset ids of <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture>. The left face will have a boundary id of <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture>, the top and bottom faces boundary ids of <picture><source srcset="form_670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1$" src="form_670.png"/></picture>, and the right face a boundary id of <picture><source srcset="form_1326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1326.png"/></picture>. Hence the vector returned by this function in that case will be <picture><source srcset="form_1328_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\{\}, \{0\}, \{0, 1\}\}$" src="form_1328.png"/></picture>. </p>
+<p>A cell face in ExodusII can be in an arbitrary number of sidesets (i.e., it can have an arbitrary number of sideset ids) - however, a boundary cell face in deal.II has exactly one boundary id. All boundary faces that are not in a sideset are given the (default) boundary id of <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture>. This function then groups sidesets together into unique sets and gives each one a boundary id. For example: Consider a single-quadrilateral mesh whose left side has no sideset id, right side has sideset ids <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture> and <picture><source srcset="form_670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1$" src="form_670.png"/></picture>, and whose bottom and top sides have sideset ids of <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture>. The left face will have a boundary id of <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture>, the top and bottom faces boundary ids of <picture><source srcset="form_670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1$" src="form_670.png"/></picture>, and the right face a boundary id of <picture><source srcset="form_1327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1327.png"/></picture>. Hence the vector returned by this function in that case will be <picture><source srcset="form_1365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\{\}, \{0\}, \{0, 1\}\}$" src="form_1365.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="grid__in_8cc_source.html#href_anchor">3772</a> of file <a class="el" href="grid__in_8cc_source.html">grid_in.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classHouseholder.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classHouseholder.html	2024-03-17 21:57:31.243158945 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classHouseholder.html	2024-03-17 21:57:31.243158945 +0000
@@ -137,10 +137,10 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;typename number&gt;<br />
 class Householder&lt; number &gt;</div><p>QR-decomposition of a full matrix.</p>
-<p>This class computes the QR-decomposition of given matrix by the <a class="el" href="classHouseholder.html">Householder</a> algorithm. Then, the function <a class="el" href="#href_anchor">least_squares()</a> can be used to compute the vector <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> minimizing <picture><source srcset="form_1637_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|Ax-b\|$" src="form_1637.png"/></picture> for a given vector <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture>. The <a class="el" href="classQR.html">QR</a> decomposition of <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is useful for this purpose because the minimizer is given by the equation <picture><source srcset="form_1638_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=(A^TA)^{-1}A^Tb=(R^TQ^TQR)^{-1}R^TQ^Tb$" src="form_1638.png"/></picture> which is easy to compute because <picture><source srcset="form_1639_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q$" src="form_1639.png"/></picture> is an orthogonal matrix, and consequently <picture><source srcset="form_1640_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q^TQ=I$" src="form_1640.png"/></picture>. Thus, <picture><source srcset="form_1641_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=(R^TR)^{-1}R^TQ^Tb=R^{-1}R^{-T}R^TQ^Tb=R^{-1}Q^Tb$" src="form_1641.png"/></picture>. Furthermore, <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> is triangular, so applying <picture><source srcset="form_1642_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^{-1}$" src="form_1642.png"/></picture> to a vector only involves a backward or forward solve.</p>
+<p>This class computes the QR-decomposition of given matrix by the <a class="el" href="classHouseholder.html">Householder</a> algorithm. Then, the function <a class="el" href="#href_anchor">least_squares()</a> can be used to compute the vector <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> minimizing <picture><source srcset="form_1640_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|Ax-b\|$" src="form_1640.png"/></picture> for a given vector <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture>. The <a class="el" href="classQR.html">QR</a> decomposition of <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is useful for this purpose because the minimizer is given by the equation <picture><source srcset="form_1641_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=(A^TA)^{-1}A^Tb=(R^TQ^TQR)^{-1}R^TQ^Tb$" src="form_1641.png"/></picture> which is easy to compute because <picture><source srcset="form_1642_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q$" src="form_1642.png"/></picture> is an orthogonal matrix, and consequently <picture><source srcset="form_1643_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q^TQ=I$" src="form_1643.png"/></picture>. Thus, <picture><source srcset="form_1644_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=(R^TR)^{-1}R^TQ^Tb=R^{-1}R^{-T}R^TQ^Tb=R^{-1}Q^Tb$" src="form_1644.png"/></picture>. Furthermore, <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> is triangular, so applying <picture><source srcset="form_1645_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^{-1}$" src="form_1645.png"/></picture> to a vector only involves a backward or forward solve.</p>
 <h3>Implementation details</h3>
-<p>The class does not in fact store the <picture><source srcset="form_1639_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q$" src="form_1639.png"/></picture> and <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> factors explicitly as matrices. It does store <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture>, but the <picture><source srcset="form_1639_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q$" src="form_1639.png"/></picture> factor is stored as the product of <a class="el" href="classHouseholder.html">Householder</a> reflections of the form <picture><source srcset="form_1643_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_i = I-v_i v_i^T$" src="form_1643.png"/></picture> where the vectors <picture><source srcset="form_1644_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_i$" src="form_1644.png"/></picture> are so that they can be stored in the lower-triangular part of an underlying matrix object, whereas <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> is stored in the upper triangular part.</p>
-<p>The <picture><source srcset="form_1644_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_i$" src="form_1644.png"/></picture> vectors and the <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> matrix now are in conflict because they both want to use the diagonal entry of the matrix, but we can only store one in these positions, of course. Consequently, the entries <picture><source srcset="form_1645_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(v_i)_i$" src="form_1645.png"/></picture> are stored separately in the <code>diagonal</code> member variable.</p>
+<p>The class does not in fact store the <picture><source srcset="form_1642_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q$" src="form_1642.png"/></picture> and <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> factors explicitly as matrices. It does store <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture>, but the <picture><source srcset="form_1642_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q$" src="form_1642.png"/></picture> factor is stored as the product of <a class="el" href="classHouseholder.html">Householder</a> reflections of the form <picture><source srcset="form_1646_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_i = I-v_i v_i^T$" src="form_1646.png"/></picture> where the vectors <picture><source srcset="form_1647_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_i$" src="form_1647.png"/></picture> are so that they can be stored in the lower-triangular part of an underlying matrix object, whereas <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> is stored in the upper triangular part.</p>
+<p>The <picture><source srcset="form_1647_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_i$" src="form_1647.png"/></picture> vectors and the <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> matrix now are in conflict because they both want to use the diagonal entry of the matrix, but we can only store one in these positions, of course. Consequently, the entries <picture><source srcset="form_1648_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(v_i)_i$" src="form_1648.png"/></picture> are stored separately in the <code>diagonal</code> member variable.</p>
 <dl class="section note"><dt>Note</dt><dd>Instantiations for this template are provided for <code>&lt;float&gt; and &lt;double&gt;</code>; others can be generated in application programs (see the section on <a class="el" href="Instantiations.html">Template instantiations</a> in the manual). </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="householder_8h_source.html#href_anchor">80</a> of file <a class="el" href="householder_8h_source.html">householder.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classIdentityMatrix.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classIdentityMatrix.html	2024-03-17 21:57:31.267159093 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classIdentityMatrix.html	2024-03-17 21:57:31.271159118 +0000
@@ -134,13 +134,13 @@
 <tr class="separator:a9caddc64f3173d85d511f5cb69c8a41d"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Implementation of a simple class representing the identity matrix of a given size, i.e. a matrix with entries <picture><source srcset="form_1646_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij}=\delta_{ij}$" src="form_1646.png"/></picture>. While it has the most important ingredients of a matrix, in particular that one can ask for its size and perform matrix-vector products with it, a matrix of this type is really only useful in two contexts: preconditioning and initializing other matrices.</p>
+<div class="textblock"><p>Implementation of a simple class representing the identity matrix of a given size, i.e. a matrix with entries <picture><source srcset="form_1649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij}=\delta_{ij}$" src="form_1649.png"/></picture>. While it has the most important ingredients of a matrix, in particular that one can ask for its size and perform matrix-vector products with it, a matrix of this type is really only useful in two contexts: preconditioning and initializing other matrices.</p>
 <h4>Initialization</h4>
 <p>The main usefulness of this class lies in its ability to initialize other matrix, like this: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFullMatrix.html">FullMatrix&lt;double&gt;</a> <a class="code hl_typedef" href="template__constraints_8h.html#href_anchor">identity</a> (<a class="code hl_function" href="#href_anchor">IdentityMatrix</a>(10));</div>
 <div class="ttc" id="aclassFullMatrix_html"><div class="ttname"><a href="classFullMatrix.html">FullMatrix</a></div><div class="ttdef"><b>Definition</b> <a href="full__matrix_8h_source.html#href_anchor">full_matrix.h:79</a></div></div>
 <div class="ttc" id="aclassIdentityMatrix_html_a271487fb3b1eeec33ca734aa05601110"><div class="ttname"><a href="#href_anchor">IdentityMatrix::IdentityMatrix</a></div><div class="ttdeci">IdentityMatrix()</div></div>
 <div class="ttc" id="atemplate__constraints_8h_html_a3fd91e488bca71874e5b40b2b0844216"><div class="ttname"><a href="template__constraints_8h.html#href_anchor">identity</a></div><div class="ttdeci">std_cxx20::type_identity&lt; T &gt; identity</div><div class="ttdef"><b>Definition</b> <a href="template__constraints_8h_source.html#href_anchor">template_constraints.h:345</a></div></div>
-</div><!-- fragment --><p>This creates a <picture><source srcset="form_1647_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10\times 10$" src="form_1647.png"/></picture> matrix with ones on the diagonal and zeros everywhere else. Most matrix types, in particular <a class="el" href="classFullMatrix.html">FullMatrix</a> and <a class="el" href="classSparseMatrix.html">SparseMatrix</a>, have conversion constructors and assignment operators for <a class="el" href="classIdentityMatrix.html">IdentityMatrix</a>, and can therefore be filled rather easily with identity matrices.</p>
+</div><!-- fragment --><p>This creates a <picture><source srcset="form_1650_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10\times 10$" src="form_1650.png"/></picture> matrix with ones on the diagonal and zeros everywhere else. Most matrix types, in particular <a class="el" href="classFullMatrix.html">FullMatrix</a> and <a class="el" href="classSparseMatrix.html">SparseMatrix</a>, have conversion constructors and assignment operators for <a class="el" href="classIdentityMatrix.html">IdentityMatrix</a>, and can therefore be filled rather easily with identity matrices.</p>
 <h4>Preconditioning</h4>
 <p>No preconditioning at all is equivalent to preconditioning with preconditioning with the identity matrix. deal.II has a specialized class for this purpose, <a class="el" href="classPreconditionIdentity.html">PreconditionIdentity</a>, than can be used in a context as shown in the documentation of that class. The present class can be used in much the same way, although without any additional benefit: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classSolverControl.html">SolverControl</a>           solver_control (1000, 1e-12);</div>
 <div class="line"><a class="code hl_class" href="classSolverCG.html">SolverCG&lt;&gt;</a>              cg (solver_control);</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classImplicitQR.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classImplicitQR.html	2024-03-17 21:57:31.303159316 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classImplicitQR.html	2024-03-17 21:57:31.303159316 +0000
@@ -168,7 +168,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;typename VectorType&gt;<br />
-class ImplicitQR&lt; VectorType &gt;</div><p>A class to obtain the triangular <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> matrix of the <picture><source srcset="form_1758_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A=QR$" src="form_1758.png"/></picture> factorization together with the matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> itself. The orthonormal matrix <picture><source srcset="form_1639_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q$" src="form_1639.png"/></picture> is not stored explicitly, the name of the class. The multiplication with <picture><source srcset="form_1639_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q$" src="form_1639.png"/></picture> can be represented as <picture><source srcset="form_1759_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q=A R^{-1}$" src="form_1759.png"/></picture>, whereas the multiplication with <picture><source srcset="form_1760_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q^T$" src="form_1760.png"/></picture> is given by <picture><source srcset="form_1761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q^T=R^{-T}A^T$" src="form_1761.png"/></picture>.</p>
+class ImplicitQR&lt; VectorType &gt;</div><p>A class to obtain the triangular <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> matrix of the <picture><source srcset="form_1757_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A=QR$" src="form_1757.png"/></picture> factorization together with the matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> itself. The orthonormal matrix <picture><source srcset="form_1642_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q$" src="form_1642.png"/></picture> is not stored explicitly, the name of the class. The multiplication with <picture><source srcset="form_1642_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q$" src="form_1642.png"/></picture> can be represented as <picture><source srcset="form_1758_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q=A R^{-1}$" src="form_1758.png"/></picture>, whereas the multiplication with <picture><source srcset="form_1759_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q^T$" src="form_1759.png"/></picture> is given by <picture><source srcset="form_1760_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q^T=R^{-T}A^T$" src="form_1760.png"/></picture>.</p>
 <p>The class is designed to update a given (possibly empty) <a class="el" href="classQR.html">QR</a> factorization due to the addition of a new column vector. This is equivalent to constructing an orthonormal basis by the Gram-Schmidt procedure. The class also provides update functionality when the column is removed.</p>
 <p>The <code>VectorType</code> template argument may either be a parallel and serial vector, and only need to have basic operations such as additions, scalar product, etc. It also needs to have a copy-constructor. </p>
 
@@ -298,8 +298,8 @@
 </table>
 </div><div class="memdoc">
 <p>Remove column and update <a class="el" href="classQR.html">QR</a> factorization.</p>
-<p>Starting from the given <a class="el" href="classQR.html">QR</a> decomposition <picture><source srcset="form_1777_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$QR= A = [a_1\,\dots a_n], \quad a_i \in R^m$" src="form_1777.png"/></picture> we aim at computing factorization of <picture><source srcset="form_1778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde Q \tilde R= \tilde A = [a_2\,\dots a_n], \quad a_i \in R^m$" src="form_1778.png"/></picture>.</p>
-<p>Note that <picture><source srcset="form_1774_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde R^T \tilde R = \tilde A^T \tilde A$" src="form_1774.png"/></picture>, where the RHS is included in <picture><source srcset="form_1775_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^T A = R^T R$" src="form_1775.png"/></picture>. Therefore <picture><source srcset="form_1776_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde R$" src="form_1776.png"/></picture> can be obtained by Cholesky decomposition. </p>
+<p>Starting from the given <a class="el" href="classQR.html">QR</a> decomposition <picture><source srcset="form_1776_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$QR= A = [a_1\,\dots a_n], \quad a_i \in R^m$" src="form_1776.png"/></picture> we aim at computing factorization of <picture><source srcset="form_1777_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde Q \tilde R= \tilde A = [a_2\,\dots a_n], \quad a_i \in R^m$" src="form_1777.png"/></picture>.</p>
+<p>Note that <picture><source srcset="form_1773_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde R^T \tilde R = \tilde A^T \tilde A$" src="form_1773.png"/></picture>, where the RHS is included in <picture><source srcset="form_1774_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^T A = R^T R$" src="form_1774.png"/></picture>. Therefore <picture><source srcset="form_1775_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde R$" src="form_1775.png"/></picture> can be obtained by Cholesky decomposition. </p>
 
 <p>Implements <a class="el" href="classBaseQR.html#href_anchor">BaseQR&lt; VectorType &gt;</a>.</p>
 
@@ -333,7 +333,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set <picture><source srcset="form_1764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = Qx$" src="form_1764.png"/></picture>. The size of <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> should be consistent with the size of the R matrix. </p>
+<p>Set <picture><source srcset="form_1763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = Qx$" src="form_1763.png"/></picture>. The size of <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> should be consistent with the size of the R matrix. </p>
 
 <p>Implements <a class="el" href="classBaseQR.html#href_anchor">BaseQR&lt; VectorType &gt;</a>.</p>
 
@@ -367,7 +367,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set <picture><source srcset="form_1765_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = Q^Tx$" src="form_1765.png"/></picture>. The size of <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> should be consistent with the size of column vectors. </p>
+<p>Set <picture><source srcset="form_1764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = Q^Tx$" src="form_1764.png"/></picture>. The size of <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> should be consistent with the size of column vectors. </p>
 
 <p>Implements <a class="el" href="classBaseQR.html#href_anchor">BaseQR&lt; VectorType &gt;</a>.</p>
 
@@ -401,7 +401,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set <picture><source srcset="form_1766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = QRx$" src="form_1766.png"/></picture>. The size of <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> should be consistent with the size of the R matrix. </p>
+<p>Set <picture><source srcset="form_1765_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = QRx$" src="form_1765.png"/></picture>. The size of <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> should be consistent with the size of the R matrix. </p>
 
 <p>Implements <a class="el" href="classBaseQR.html#href_anchor">BaseQR&lt; VectorType &gt;</a>.</p>
 
@@ -435,7 +435,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set <picture><source srcset="form_1767_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = R^T Q^Tx$" src="form_1767.png"/></picture>. The size of <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> should be consistent with the size of column vectors. </p>
+<p>Set <picture><source srcset="form_1766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = R^T Q^Tx$" src="form_1766.png"/></picture>. The size of <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> should be consistent with the size of column vectors. </p>
 
 <p>Implements <a class="el" href="classBaseQR.html#href_anchor">BaseQR&lt; VectorType &gt;</a>.</p>
 
@@ -458,7 +458,7 @@
       </table>
 </div><div class="memdoc">
 <p>Connect a slot to implement a custom check of linear dependency during addition of a column.</p>
-<p>Here, <code>u</code> is the last column of the to-be R matrix, <code>rho</code> is its diagonal and <code>col_norm_sqr</code> is the square of the <picture><source srcset="form_1779_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l2$" src="form_1779.png"/></picture> norm of the column. The function should return <code>true</code> if the new column is linearly independent. </p>
+<p>Here, <code>u</code> is the last column of the to-be R matrix, <code>rho</code> is its diagonal and <code>col_norm_sqr</code> is the square of the <picture><source srcset="form_1778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l2$" src="form_1778.png"/></picture> norm of the column. The function should return <code>true</code> if the new column is linearly independent. </p>
 
 </div>
 </div>
@@ -486,7 +486,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Apply givens rotation in the <code>(i,k)</code>-plane to zero out <picture><source srcset="form_1780_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R(k,k)$" src="form_1780.png"/></picture>. </p>
+<p>Apply givens rotation in the <code>(i,k)</code>-plane to zero out <picture><source srcset="form_1779_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R(k,k)$" src="form_1779.png"/></picture>. </p>
 
 </div>
 </div>
@@ -575,7 +575,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Solve <picture><source srcset="form_1762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Rx=y$" src="form_1762.png"/></picture>. Vectors <code>x</code> and <code>y</code> should be consistent with the current size of the subspace. If <code>transpose</code> is <code>true</code>, <picture><source srcset="form_1763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^Tx=y$" src="form_1763.png"/></picture> is solved instead. </p>
+<p>Solve <picture><source srcset="form_1761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Rx=y$" src="form_1761.png"/></picture>. Vectors <code>x</code> and <code>y</code> should be consistent with the current size of the subspace. If <code>transpose</code> is <code>true</code>, <picture><source srcset="form_1762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^Tx=y$" src="form_1762.png"/></picture> is solved instead. </p>
 
 </div>
 </div>
@@ -636,7 +636,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute <picture><source srcset="form_1768_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=Hx$" src="form_1768.png"/></picture> where <picture><source srcset="form_1769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H$" src="form_1769.png"/></picture> is the matrix formed by the column vectors stored by this object. </p>
+<p>Compute <picture><source srcset="form_1767_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=Hx$" src="form_1767.png"/></picture> where <picture><source srcset="form_1768_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H$" src="form_1768.png"/></picture> is the matrix formed by the column vectors stored by this object. </p>
 
 </div>
 </div>
@@ -695,7 +695,7 @@
 </table>
 </div><div class="memdoc">
 <p>Signal used to decide if the new column is linear dependent.</p>
-<p>Here, <code>u</code> is the last column of the to-be R matrix, <code>rho</code> is its diagonal and <code>col_norm_sqr</code> is the square of the <picture><source srcset="form_1779_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l2$" src="form_1779.png"/></picture> norm of the column. The function should return <code>true</code> if the new column is linearly independent. </p>
+<p>Here, <code>u</code> is the last column of the to-be R matrix, <code>rho</code> is its diagonal and <code>col_norm_sqr</code> is the square of the <picture><source srcset="form_1778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l2$" src="form_1778.png"/></picture> norm of the column. The function should return <code>true</code> if the new column is linearly independent. </p>
 
 <p class="definition">Definition at line <a class="el" href="qr_8h_source.html#href_anchor">430</a> of file <a class="el" href="qr_8h_source.html">qr.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classIndexSet.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classIndexSet.html	2024-03-17 21:57:31.359159661 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classIndexSet.html	2024-03-17 21:57:31.363159686 +0000
@@ -252,8 +252,8 @@
 <tr class="separator:ad28b2e725afda38ffdef1bf61d5cadd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>A class that represents a subset of indices among a larger set. For example, it can be used to denote the set of degrees of freedom within the range <picture><source srcset="form_559_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,\mathrm{dof\_handler.n\_dofs()})$" src="form_559.png"/></picture> that belongs to a particular subdomain, or those among all degrees of freedom that are stored on a particular processor in a distributed parallel computation.</p>
-<p>This class can represent a collection of half-open ranges of indices as well as individual elements. For practical purposes it also stores the overall range these indices can assume. In other words, you need to specify the size of the index space <picture><source srcset="form_560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,\text{size})$" src="form_560.png"/></picture> of which objects of this class are a subset.</p>
+<div class="textblock"><p>A class that represents a subset of indices among a larger set. For example, it can be used to denote the set of degrees of freedom within the range <picture><source srcset="form_561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,\mathrm{dof\_handler.n\_dofs()})$" src="form_561.png"/></picture> that belongs to a particular subdomain, or those among all degrees of freedom that are stored on a particular processor in a distributed parallel computation.</p>
+<p>This class can represent a collection of half-open ranges of indices as well as individual elements. For practical purposes it also stores the overall range these indices can assume. In other words, you need to specify the size of the index space <picture><source srcset="form_562_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,\text{size})$" src="form_562.png"/></picture> of which objects of this class are a subset.</p>
 <p>There are two ways to iterate over the IndexSets: First, <a class="el" href="#href_anchor">begin()</a> and <a class="el" href="#href_anchor">end()</a> allow iteration over individual indices in the set. Second, begin_interval() and end_interval() allow iteration over the half-open ranges as described above.</p>
 <p>The data structures used in this class along with a rationale can be found in the <a class="el" href="DEALGlossary.html#href_anchor">Distributed Computing paper</a>. </p>
 
@@ -808,7 +808,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return whether the IndexSets are ascending with respect to MPI process number and 1:1, i.e., each index is contained in exactly one <a class="el" href="classIndexSet.html">IndexSet</a> (among those stored on the different processes), each process stores contiguous subset of indices, and the index set on process <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture> starts at the index one larger than the last one stored on process <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>. In case there is only one MPI process, this just means that the <a class="el" href="classIndexSet.html">IndexSet</a> is complete. </p>
+<p>Return whether the IndexSets are ascending with respect to MPI process number and 1:1, i.e., each index is contained in exactly one <a class="el" href="classIndexSet.html">IndexSet</a> (among those stored on the different processes), each process stores contiguous subset of indices, and the index set on process <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture> starts at the index one larger than the last one stored on process <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>. In case there is only one MPI process, this just means that the <a class="el" href="classIndexSet.html">IndexSet</a> is complete. </p>
 
 <p class="definition">Definition at line <a class="el" href="index__set_8cc_source.html#href_anchor">878</a> of file <a class="el" href="index__set_8cc_source.html">index_set.cc</a>.</p>
 
@@ -1118,7 +1118,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Remove all elements contained in <code>other</code> from this set. In other words, if <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> is the current object and <picture><source srcset="form_565_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$o$" src="form_565.png"/></picture> the argument, then we compute <picture><source srcset="form_566_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x
+<p>Remove all elements contained in <code>other</code> from this set. In other words, if <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> is the current object and <picture><source srcset="form_565_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$o$" src="form_565.png"/></picture> the argument, then we compute <picture><source srcset="form_566_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x
 \leftarrow x \backslash o$" src="form_566.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="index__set_8cc_source.html#href_anchor">268</a> of file <a class="el" href="index__set_8cc_source.html">index_set.cc</a>.</p>
@@ -1819,7 +1819,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Create and return an index set of size <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> that contains every single index within this range. In essence, this function returns an index set created by </p><div class="fragment"><div class="line"><a class="code hl_class" href="classIndexSet.html">IndexSet</a> is (N);</div>
+<p>Create and return an index set of size <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> that contains every single index within this range. In essence, this function returns an index set created by </p><div class="fragment"><div class="line"><a class="code hl_class" href="classIndexSet.html">IndexSet</a> is (N);</div>
 <div class="line">is.add_range(0, N);</div>
 <div class="ttc" id="aclassIndexSet_html"><div class="ttname"><a href="classIndexSet.html">IndexSet</a></div><div class="ttdef"><b>Definition</b> <a href="index__set_8h_source.html#href_anchor">index_set.h:67</a></div></div>
 </div><!-- fragment --><p> This function exists so that one can create and initialize index sets that are complete in one step, or so one can write code like </p><div class="fragment"><div class="line"><span class="keywordflow">if</span> (my_index_set == <a class="code hl_function" href="#href_anchor">complete_index_set</a>(my_index_set.size())</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classIntegratedLegendreSZ.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classIntegratedLegendreSZ.html	2024-03-17 21:57:31.407159958 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classIntegratedLegendreSZ.html	2024-03-17 21:57:31.407159958 +0000
@@ -1215,7 +1215,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture>. </p>
+<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="polynomial_8h_source.html#href_anchor">314</a> of file <a class="el" href="polynomial_8h_source.html">polynomial.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classKellyErrorEstimator.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classKellyErrorEstimator.html	2024-03-17 21:57:31.447160205 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classKellyErrorEstimator.html	2024-03-17 21:57:31.447160205 +0000
@@ -161,7 +161,7 @@
   \eta^2 = \sum_K \eta_K^2
 \]" src="form_2188.png"/></picture>
 </p>
-<p> so that <picture><source srcset="form_2189_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta \approx \|\nabla (u-u_h)\|$" src="form_2189.png"/></picture> for the Laplace equation. The functions of this class compute a vector of values that corresponds to <picture><source srcset="form_1371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_K$" src="form_1371.png"/></picture> (i.e., the square root of the quantity above).</p>
+<p> so that <picture><source srcset="form_2189_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta \approx \|\nabla (u-u_h)\|$" src="form_2189.png"/></picture> for the Laplace equation. The functions of this class compute a vector of values that corresponds to <picture><source srcset="form_1372_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_K$" src="form_1372.png"/></picture> (i.e., the square root of the quantity above).</p>
 <p>In the paper of Ainsworth <picture><source srcset="form_2190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ c_F=\frac {h_K}{24} $" src="form_2190.png"/></picture>, but this factor is a bit esoteric, stemming from interpolation estimates and stability constants which may hold for the Poisson problem, but may not hold for more general situations. Alternatively, we consider the case when <picture><source srcset="form_2191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_F=\frac {h_F}{2p_F}$" src="form_2191.png"/></picture>, where <picture><source srcset="form_2192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_F$" src="form_2192.png"/></picture> is the diameter of the face and <picture><source srcset="form_2193_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_F=max(p^+,p^-)$" src="form_2193.png"/></picture> is the maximum polynomial degree of adjacent elements; or <picture><source srcset="form_2194_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_F=h_K$" src="form_2194.png"/></picture>. The choice between these factors is done by means of the enumerator, provided as the last argument in all functions.</p>
 <p>To perform the integration, use is made of the <a class="el" href="classFEFaceValues.html">FEFaceValues</a> and <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> classes. The integration is performed by looping over all cells and integrating over faces that are not yet treated. This way we avoid integration on faces twice, once for each time we visit one of the adjacent cells. In a second loop over all cells, we sum up the contributions of the faces (which are the integrated square of the jumps times some factor) of each cell and take the square root.</p>
 <p>The integration is done using a quadrature formula on the face provided by the caller of the <a class="el" href="#href_anchor">estimate()</a> functions declared by this class. For linear trial functions (<a class="el" href="classFE__Q.html">FE_Q(1)</a>), <a class="el" href="classQGauss.html">QGauss</a> with two points or even the <a class="el" href="classQMidpoint.html">QMidpoint</a> rule might actually suffice. For higher order elements, it is necessary to utilize higher order quadrature formulae with <code>fe.degree+1</code> Gauss points.</p>
@@ -173,7 +173,7 @@
 <h3>Boundary values</h3>
 <p>If the face is at the boundary, i.e. there is no neighboring cell to which the jump in the gradient could be computed, there are two possibilities: </p><ul>
 <li>
-<p class="startli">The face belongs to a Dirichlet boundary. Then the face is not considered, which can be justified looking at a dual problem technique and should hold exactly if the boundary can be approximated exactly by the finite element used (i.e. it is a linear boundary for linear finite elements, quadratic for isoparametric quadratic elements, etc). For boundaries which can not be exactly approximated, one should consider the difference <picture><source srcset="form_2197_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z-z_h$" src="form_2197.png"/></picture> on the face, <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> being a dual problem's solution which is zero at the true boundary and <picture><source srcset="form_2198_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_h$" src="form_2198.png"/></picture> being an approximation, which in most cases will be zero on the numerical boundary. Since on the numerical boundary <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> will not be zero in general, we would get another term here, but this one is neglected for practical reasons, in the hope that the error made here will tend to zero faster than the energy error we wish to estimate.</p>
+<p class="startli">The face belongs to a Dirichlet boundary. Then the face is not considered, which can be justified looking at a dual problem technique and should hold exactly if the boundary can be approximated exactly by the finite element used (i.e. it is a linear boundary for linear finite elements, quadratic for isoparametric quadratic elements, etc). For boundaries which can not be exactly approximated, one should consider the difference <picture><source srcset="form_2197_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z-z_h$" src="form_2197.png"/></picture> on the face, <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> being a dual problem's solution which is zero at the true boundary and <picture><source srcset="form_2198_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_h$" src="form_2198.png"/></picture> being an approximation, which in most cases will be zero on the numerical boundary. Since on the numerical boundary <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> will not be zero in general, we would get another term here, but this one is neglected for practical reasons, in the hope that the error made here will tend to zero faster than the energy error we wish to estimate.</p>
 <p class="interli">Though no integration is necessary, in the list of face contributions we store a zero for this face, which makes summing up the contributions of the different faces to the cells easier.</p>
 <p class="endli"></p>
 </li>
/usr/share/doc/packages/dealii/doxygen/deal.II/classLAPACKFullMatrix.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classLAPACKFullMatrix.html	2024-03-17 21:57:31.543160798 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classLAPACKFullMatrix.html	2024-03-17 21:57:31.543160798 +0000
@@ -619,8 +619,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Constructor. Initialize the matrix as a rectangular matrix <picture><source srcset="form_1658_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rm{rows}
-\times \rm{cols}$" src="form_1658.png"/></picture>. </p>
+<p>Constructor. Initialize the matrix as a rectangular matrix <picture><source srcset="form_1661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rm{rows}
+\times \rm{cols}$" src="form_1661.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="lapack__full__matrix_8cc_source.html#href_anchor">257</a> of file <a class="el" href="lapack__full__matrix_8cc_source.html">lapack_full_matrix.cc</a>.</p>
 
@@ -851,8 +851,8 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classLAPACKFullMatrix.html">LAPACKFullMatrix</a>&lt; number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>B</em></span>&#href_anchor"memdoc">
-<p>Simple addition of a scaled matrix, i.e. <picture><source srcset="form_1659_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A \mathrel{+}= a \,
-\mathbf B$" src="form_1659.png"/></picture>. </p>
+<p>Simple addition of a scaled matrix, i.e. <picture><source srcset="form_1662_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A \mathrel{+}= a \,
+\mathbf B$" src="form_1662.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="lapack__full__matrix_8cc_source.html#href_anchor">495</a> of file <a class="el" href="lapack__full__matrix_8cc_source.html">lapack_full_matrix.cc</a>.</p>
 
@@ -875,8 +875,8 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classVector.html">Vector</a>&lt; number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>v</em></span>&#href_anchor"memdoc">
-<p>Perform a rank-1 update of a symmetric matrix <picture><source srcset="form_1660_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf A \leftarrow \mathbf A + a \, \mathbf v \mathbf v^T $" src="form_1660.png"/></picture>.</p>
-<p>This function also works for Cholesky factorization. In that case, updating ( <picture><source srcset="form_1661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a&gt;0$" src="form_1661.png"/></picture>) is performed via Givens rotations, whereas downdating ( <picture><source srcset="form_1662_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a&lt;0$" src="form_1662.png"/></picture>) via hyperbolic rotations. Note that the latter case might lead to a negative definite matrix in which case the error will be thrown (because Cholesky factorizations are only valid for symmetric and positive definite matrices). </p>
+<p>Perform a rank-1 update of a symmetric matrix <picture><source srcset="form_1663_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf A \leftarrow \mathbf A + a \, \mathbf v \mathbf v^T $" src="form_1663.png"/></picture>.</p>
+<p>This function also works for Cholesky factorization. In that case, updating ( <picture><source srcset="form_1664_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a&gt;0$" src="form_1664.png"/></picture>) is performed via Givens rotations, whereas downdating ( <picture><source srcset="form_1665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a&lt;0$" src="form_1665.png"/></picture>) via hyperbolic rotations. Note that the latter case might lead to a negative definite matrix in which case the error will be thrown (because Cholesky factorizations are only valid for symmetric and positive definite matrices). </p>
 
 <p class="definition">Definition at line <a class="el" href="lapack__full__matrix_8cc_source.html#href_anchor">622</a> of file <a class="el" href="lapack__full__matrix_8cc_source.html">lapack_full_matrix.cc</a>.</p>
 
@@ -909,7 +909,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>left</em><span class="paramdefsep"> = </span><span class="paramdefval">true</span></span>&#href_anchor"memdoc">
-<p>Apply <a href="https://en.wikipedia.org/wiki/Givens_rotation">Givens rotation</a> <code>csr</code> (a triplet of cosine, sine and radius, see <a class="el" href="namespaceUtilities_1_1LinearAlgebra.html#href_anchor">Utilities::LinearAlgebra::givens_rotation()</a> for the definition of the rotation matrix <picture><source srcset="form_1663_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf G$" src="form_1663.png"/></picture>) to this matrix in the plane spanned by the <code>i'th</code> and <code>k'th</code> unit vectors. If <code>left</code> is <code>true</code>, the rotation is applied from left <picture><source srcset="form_1664_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A \leftarrow \mathbf G \mathbf A$" src="form_1664.png"/></picture> and only rows <code>i</code> and <code>k</code> are affected. Otherwise, transpose of the rotation matrix is applied from right <picture><source srcset="form_1665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A \leftarrow \mathbf A \mathbf G^T$" src="form_1665.png"/></picture> and only columns <code>i</code> and <code>k</code> are affected. </p>
+<p>Apply <a href="https://en.wikipedia.org/wiki/Givens_rotation">Givens rotation</a> <code>csr</code> (a triplet of cosine, sine and radius, see <a class="el" href="namespaceUtilities_1_1LinearAlgebra.html#href_anchor">Utilities::LinearAlgebra::givens_rotation()</a> for the definition of the rotation matrix <picture><source srcset="form_1666_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf G$" src="form_1666.png"/></picture>) to this matrix in the plane spanned by the <code>i'th</code> and <code>k'th</code> unit vectors. If <code>left</code> is <code>true</code>, the rotation is applied from left <picture><source srcset="form_1667_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A \leftarrow \mathbf G \mathbf A$" src="form_1667.png"/></picture> and only rows <code>i</code> and <code>k</code> are affected. Otherwise, transpose of the rotation matrix is applied from right <picture><source srcset="form_1668_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A \leftarrow \mathbf A \mathbf G^T$" src="form_1668.png"/></picture> and only columns <code>i</code> and <code>k</code> are affected. </p>
 
 <p class="definition">Definition at line <a class="el" href="lapack__full__matrix_8cc_source.html#href_anchor">312</a> of file <a class="el" href="lapack__full__matrix_8cc_source.html">lapack_full_matrix.cc</a>.</p>
 
@@ -986,7 +986,7 @@
       </table>
 </div><div class="memdoc">
 <p>Same as above but will preserve the values of matrix upon resizing. The original values of the matrix are kept on increasing the size  </p><p class="formulaDsp">
-<picture><source srcset="form_1666_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1669_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf A \rightarrow
 \left(
 \begin{array}{cc}
@@ -994,16 +994,16 @@
 \mathbf 0 &amp; \mathbf 0
 \end{array}
 \right)
-\]" src="form_1666.png"/></picture>
+\]" src="form_1669.png"/></picture>
 </p>
 <p> Whereas if the new size is smaller, the matrix will contain the upper left block of the original one </p><p class="formulaDsp">
-<picture><source srcset="form_1667_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \left( \begin{array}{cc}
+<picture><source srcset="form_1670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \left( \begin{array}{cc}
 \mathbf A_{11} &amp; \mathbf A_{12} \\
 \mathbf A_{21} &amp; \mathbf A_{22}
 \end{array}
 \right)
 \rightarrow \mathbf A_{11}
-\]" src="form_1667.png"/></picture>
+\]" src="form_1670.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="lapack__full__matrix_8cc_source.html#href_anchor">298</a> of file <a class="el" href="lapack__full__matrix_8cc_source.html">lapack_full_matrix.cc</a>.</p>
@@ -1031,7 +1031,7 @@
       </table>
 </div><div class="memdoc">
 <p>Remove row <code>row</code> and column <code>col</code> from the matrix.  </p><p class="formulaDsp">
-<picture><source srcset="form_1668_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1671_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \left(
 \begin{array}{ccc}
 \mathbf A_{11}   &amp; \mathbf a_{12} &amp; \mathbf A_{13}   \\
@@ -1046,7 +1046,7 @@
 \mathbf A_{31} &amp; \mathbf A_{33}
 \end{array}
 \right)
-\]" src="form_1668.png"/></picture>
+\]" src="form_1671.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="lapack__full__matrix_8cc_source.html#href_anchor">346</a> of file <a class="el" href="lapack__full__matrix_8cc_source.html">lapack_full_matrix.cc</a>.</p>
@@ -1253,7 +1253,7 @@
 <li>
 If <a class="el" href="#href_anchor">state</a> is <a class="el" href="namespaceLAPACKSupport.html#href_anchor" title="Matrix contains singular value decomposition,.">LAPACKSupport::svd</a> or <a class="el" href="namespaceLAPACKSupport.html#href_anchor" title="Matrix is the inverse of a singular value decomposition.">LAPACKSupport::inverse_svd</a>, this function first multiplies with the right transformation matrix, then with the diagonal matrix of singular values or their reciprocal values, and finally with the left transformation matrix. </li>
 </ul>
-<p>The optional parameter <code>adding</code> determines, whether the result is stored in the vector <picture><source srcset="form_1669_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf w = \mathbf A \cdot \mathbf v$" src="form_1669.png"/></picture> or added to it <picture><source srcset="form_1670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf w \mathrel{+}= \mathbf A \cdot \mathbf v$" src="form_1670.png"/></picture>.</p>
+<p>The optional parameter <code>adding</code> determines, whether the result is stored in the vector <picture><source srcset="form_1672_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf w = \mathbf A \cdot \mathbf v$" src="form_1672.png"/></picture> or added to it <picture><source srcset="form_1673_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf w \mathrel{+}= \mathbf A \cdot \mathbf v$" src="form_1673.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>Source and destination must not be the same vector.</dd>
 <dd>
 The template with <code>number2</code> only exists for compile-time compatibility with <a class="el" href="classFullMatrix.html">FullMatrix</a>. Only the case <code>number2</code> = <code>number</code> is implemented due to limitations in the underlying LAPACK interface. All other variants throw an error upon invocation. </dd></dl>
@@ -1309,8 +1309,8 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classVector.html">Vector</a>&lt; number2 &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>v</em></span>&#href_anchor"memdoc">
-<p>Adding Matrix-vector-multiplication <picture><source srcset="form_1671_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf w \mathrel{+}= \mathbf A \cdot
-\mathbf v$" src="form_1671.png"/></picture>.</p>
+<p>Adding Matrix-vector-multiplication <picture><source srcset="form_1674_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf w \mathrel{+}= \mathbf A \cdot
+\mathbf v$" src="form_1674.png"/></picture>.</p>
 <p>See the documentation of <a class="el" href="#href_anchor">vmult()</a> for details on the implementation. </p>
 
 <p class="definition">Definition at line <a class="el" href="lapack__full__matrix_8h_source.html#href_anchor">1136</a> of file <a class="el" href="lapack__full__matrix_8h_source.html">lapack_full_matrix.h</a>.</p>
@@ -1365,7 +1365,7 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>adding</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
 <p>Transpose matrix-vector-multiplication.</p>
-<p>The optional parameter <code>adding</code> determines, whether the result is stored in the vector <picture><source srcset="form_1672_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf w = \mathbf A^T \cdot \mathbf v$" src="form_1672.png"/></picture> or added to it <picture><source srcset="form_1673_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf w \mathrel{+}= \mathbf A^T \cdot \mathbf v$" src="form_1673.png"/></picture>.</p>
+<p>The optional parameter <code>adding</code> determines, whether the result is stored in the vector <picture><source srcset="form_1675_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf w = \mathbf A^T \cdot \mathbf v$" src="form_1675.png"/></picture> or added to it <picture><source srcset="form_1676_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf w \mathrel{+}= \mathbf A^T \cdot \mathbf v$" src="form_1676.png"/></picture>.</p>
 <p>See the documentation of <a class="el" href="#href_anchor">vmult()</a> for details on the implementation. </p>
 
 <p class="definition">Definition at line <a class="el" href="lapack__full__matrix_8h_source.html#href_anchor">1149</a> of file <a class="el" href="lapack__full__matrix_8h_source.html">lapack_full_matrix.h</a>.</p>
@@ -1419,8 +1419,8 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classVector.html">Vector</a>&lt; number2 &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>v</em></span>&#href_anchor"memdoc">
-<p>Adding transpose matrix-vector-multiplication <picture><source srcset="form_1674_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf w \mathrel{+}=
-\mathbf A^T \cdot \mathbf v$" src="form_1674.png"/></picture>.</p>
+<p>Adding transpose matrix-vector-multiplication <picture><source srcset="form_1677_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf w \mathrel{+}=
+\mathbf A^T \cdot \mathbf v$" src="form_1677.png"/></picture>.</p>
 <p>See the documentation of <a class="el" href="#href_anchor">vmult()</a> for details on the implementation. </p>
 
 <p class="definition">Definition at line <a class="el" href="lapack__full__matrix_8h_source.html#href_anchor">1163</a> of file <a class="el" href="lapack__full__matrix_8h_source.html">lapack_full_matrix.h</a>.</p>
@@ -1473,7 +1473,7 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>adding</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
 <p>Matrix-matrix-multiplication.</p>
-<p>The optional parameter <code>adding</code> determines, whether the result is stored in the matrix <picture><source srcset="form_1675_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C            = \mathbf A \cdot \mathbf B$" src="form_1675.png"/></picture> or added to it <picture><source srcset="form_1676_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C \mathrel{+}= \mathbf A \cdot \mathbf B$" src="form_1676.png"/></picture>.</p>
+<p>The optional parameter <code>adding</code> determines, whether the result is stored in the matrix <picture><source srcset="form_1678_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C            = \mathbf A \cdot \mathbf B$" src="form_1678.png"/></picture> or added to it <picture><source srcset="form_1679_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C \mathrel{+}= \mathbf A \cdot \mathbf B$" src="form_1679.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>It is assumed that <code>A</code> and <code>B</code> have compatible sizes and that <code>C</code> already has the right size.</dd></dl>
 <p><code>This</code> function uses the BLAS function Xgemm. </p>
 
@@ -1532,7 +1532,7 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>adding</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
 <p>Matrix-matrix-multiplication using transpose of <code>this</code>.</p>
-<p>The optional parameter <code>adding</code> determines, whether the result is stored in the matrix <picture><source srcset="form_1677_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C = \mathbf A^T \cdot \mathbf B$" src="form_1677.png"/></picture> or added to it <picture><source srcset="form_1678_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C \mathrel{+}= \mathbf A^T \cdot \mathbf B$" src="form_1678.png"/></picture>.</p>
+<p>The optional parameter <code>adding</code> determines, whether the result is stored in the matrix <picture><source srcset="form_1680_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C = \mathbf A^T \cdot \mathbf B$" src="form_1680.png"/></picture> or added to it <picture><source srcset="form_1681_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C \mathrel{+}= \mathbf A^T \cdot \mathbf B$" src="form_1681.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>It is assumed that <code>A</code> and <code>B</code> have compatible sizes and that <code>C</code> already has the right size.</dd>
 <dd>
 This function uses the BLAS function Xgemm. </dd></dl>
@@ -1597,11 +1597,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>adding</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
 <p>Matrix-matrix-multiplication using transpose of <code>this</code> and a diagonal vector <code>V</code>.</p>
-<p>If the <code>adding=false</code> then the result is stored in the matrix <picture><source srcset="form_1679_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C = \mathbf A^T \cdot \rm{diag}(\mathbf V) \cdot \mathbf B$" src="form_1679.png"/></picture> otherwise it is added <picture><source srcset="form_1680_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C \mathrel{+}= \mathbf A^T \cdot
-\rm{diag}(\mathbf V) \cdot \mathbf B$" src="form_1680.png"/></picture>.</p>
+<p>If the <code>adding=false</code> then the result is stored in the matrix <picture><source srcset="form_1682_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C = \mathbf A^T \cdot \rm{diag}(\mathbf V) \cdot \mathbf B$" src="form_1682.png"/></picture> otherwise it is added <picture><source srcset="form_1683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C \mathrel{+}= \mathbf A^T \cdot
+\rm{diag}(\mathbf V) \cdot \mathbf B$" src="form_1683.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>It is assumed that <code>A</code>, <code>B</code> and <code>V</code> have compatible sizes and that <code>C</code> already has the right size.</dd>
 <dd>
-This function is not provided by LAPACK. The function first forms <picture><source srcset="form_1681_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rm{diag}(\mathbf V) \cdot \mathbf B$" src="form_1681.png"/></picture> product and then uses the Xgemm function. </dd></dl>
+This function is not provided by LAPACK. The function first forms <picture><source srcset="form_1684_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rm{diag}(\mathbf V) \cdot \mathbf B$" src="form_1684.png"/></picture> product and then uses the Xgemm function. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="lapack__full__matrix_8cc_source.html#href_anchor">1028</a> of file <a class="el" href="lapack__full__matrix_8cc_source.html">lapack_full_matrix.cc</a>.</p>
 
@@ -1630,7 +1630,7 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>adding</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
 <p>Matrix-matrix-multiplication using transpose of <code>B</code>.</p>
-<p>The optional parameter <code>adding</code> determines, whether the result is stored in the matrix <picture><source srcset="form_1682_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C = \mathbf A \cdot \mathbf B^T$" src="form_1682.png"/></picture> or added to it <picture><source srcset="form_1683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C \mathrel{+}= \mathbf A \cdot \mathbf B^T$" src="form_1683.png"/></picture>.</p>
+<p>The optional parameter <code>adding</code> determines, whether the result is stored in the matrix <picture><source srcset="form_1685_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C = \mathbf A \cdot \mathbf B^T$" src="form_1685.png"/></picture> or added to it <picture><source srcset="form_1686_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C \mathrel{+}= \mathbf A \cdot \mathbf B^T$" src="form_1686.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>It is assumed that <code>A</code> and <code>B</code> have compatible sizes and that <code>C</code> already has the right size.</dd>
 <dd>
 This function uses the BLAS function Xgemm. </dd></dl>
@@ -1690,7 +1690,7 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>adding</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
 <p>Matrix-matrix-multiplication using transpose of <code>this</code> and <code>B</code>.</p>
-<p>The optional parameter <code>adding</code> determines, whether the result is stored in the matrix <picture><source srcset="form_1684_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C = \mathbf A^T \cdot \mathbf B^T$" src="form_1684.png"/></picture> or added to it <picture><source srcset="form_1685_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C \mathrel{+}= \mathbf A^T \cdot \mathbf B^T$" src="form_1685.png"/></picture>.</p>
+<p>The optional parameter <code>adding</code> determines, whether the result is stored in the matrix <picture><source srcset="form_1687_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C = \mathbf A^T \cdot \mathbf B^T$" src="form_1687.png"/></picture> or added to it <picture><source srcset="form_1688_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C \mathrel{+}= \mathbf A^T \cdot \mathbf B^T$" src="form_1688.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>It is assumed that <code>A</code> and <code>B</code> have compatible sizes and that <code>C</code> already has the right size.</dd>
 <dd>
 This function uses the BLAS function Xgemm. </dd></dl>
@@ -1768,8 +1768,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Scale rows of this matrix by <code>V</code> . This is equivalent to premultiplication with a diagonal matrix <picture><source srcset="form_1686_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A\leftarrow {\rm diag}(\mathbf V)\mathbf
-A$" src="form_1686.png"/></picture>. </p>
+<p>Scale rows of this matrix by <code>V</code> . This is equivalent to premultiplication with a diagonal matrix <picture><source srcset="form_1689_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A\leftarrow {\rm diag}(\mathbf V)\mathbf
+A$" src="form_1689.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="lapack__full__matrix_8cc_source.html#href_anchor">1111</a> of file <a class="el" href="lapack__full__matrix_8cc_source.html">lapack_full_matrix.cc</a>.</p>
 
@@ -1836,13 +1836,13 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Estimate the reciprocal of the condition number <picture><source srcset="form_1687_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/k(\mathbf A)$" src="form_1687.png"/></picture> in <picture><source srcset="form_1688_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_1$" src="form_1688.png"/></picture> norm ( <picture><source srcset="form_1689_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/(||\mathbf A||_1 \, ||\mathbf A^{-1}||_1)$" src="form_1689.png"/></picture>) of a symmetric positive definite matrix using Cholesky factorization. This function can only be called if the matrix is already factorized.</p>
-<dl class="section note"><dt>Note</dt><dd>The condition number <picture><source srcset="form_1690_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k(\mathbf A)$" src="form_1690.png"/></picture> can be used to estimate the numerical error related to the matrix inversion or the solution of the system of linear algebraic equations as <code>error = std::numeric_limits&lt;Number&gt;::epsilon * k</code>. Alternatively one can get the number of accurate digits <code>std::floor(std::log10(k))</code>.</dd>
+<p>Estimate the reciprocal of the condition number <picture><source srcset="form_1690_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/k(\mathbf A)$" src="form_1690.png"/></picture> in <picture><source srcset="form_1691_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_1$" src="form_1691.png"/></picture> norm ( <picture><source srcset="form_1692_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/(||\mathbf A||_1 \, ||\mathbf A^{-1}||_1)$" src="form_1692.png"/></picture>) of a symmetric positive definite matrix using Cholesky factorization. This function can only be called if the matrix is already factorized.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1CUDAWrappers_1_1Vector.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1CUDAWrappers_1_1Vector.html	2024-03-17 21:57:31.591161094 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1CUDAWrappers_1_1Vector.html	2024-03-17 21:57:31.591161094 +0000
@@ -1103,7 +1103,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the square of the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm. </p>
+<p>Return the square of the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm. </p>
 
 <p class="definition">Definition at line <a class="el" href="cuda__vector_8cc_source.html#href_anchor">544</a> of file <a class="el" href="cuda__vector_8cc_source.html">cuda_vector.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1ReadWriteVector.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1ReadWriteVector.html	2024-03-17 21:57:31.659161514 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1ReadWriteVector.html	2024-03-17 21:57:31.667161564 +0000
@@ -314,7 +314,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;typename Number&gt;<br />
-class LinearAlgebra::ReadWriteVector&lt; Number &gt;</div><p><a class="el" href="classLinearAlgebra_1_1ReadWriteVector.html">ReadWriteVector</a> is intended to represent vectors in <picture><source srcset="form_1756_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^N$" src="form_1756.png"/></picture> for which it stores all or a subset of elements. The latter case in important in parallel computations, where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> may be so large that no processor can actually all elements of a solution vector, but where this is also not necessary: one typically only has to store the values of degrees of freedom that live on cells that are locally owned plus potentially those degrees of freedom that live on ghost cells.</p>
+class LinearAlgebra::ReadWriteVector&lt; Number &gt;</div><p><a class="el" href="classLinearAlgebra_1_1ReadWriteVector.html">ReadWriteVector</a> is intended to represent vectors in <picture><source srcset="form_1780_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^N$" src="form_1780.png"/></picture> for which it stores all or a subset of elements. The latter case in important in parallel computations, where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> may be so large that no processor can actually all elements of a solution vector, but where this is also not necessary: one typically only has to store the values of degrees of freedom that live on cells that are locally owned plus potentially those degrees of freedom that live on ghost cells.</p>
 <p>This class allows to access individual elements to be read or written. However, it does not allow global operations such as taking the norm. <a class="el" href="classLinearAlgebra_1_1ReadWriteVector.html">ReadWriteVector</a> can be used to read and write elements in vectors derived from <a class="el" href="classLinearAlgebra_1_1VectorSpaceVector.html">VectorSpaceVector</a> such as <a class="el" href="classTrilinosWrappers_1_1MPI_1_1Vector.html">TrilinosWrappers::MPI::Vector</a> and <a class="el" href="classPETScWrappers_1_1MPI_1_1Vector.html">PETScWrappers::MPI::Vector</a>.</p>
 <h3>Storing elements</h3>
 <p>Most of the time, one will simply read from or write into a vector of the current class using the global numbers of these degrees of freedom. This is done using <a class="el" href="#href_anchor">operator()()</a> or <a class="el" href="#href_anchor">operator[]()</a> which call <a class="el" href="#href_anchor">global_to_local()</a> to transform the <em>global</em> index into a <em>local</em> one. In such cases, it is clear that one can only access elements of the vector that the current object indeed stores.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1distributed_1_1BlockVector.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1distributed_1_1BlockVector.html	2024-03-17 21:57:31.755162108 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1distributed_1_1BlockVector.html	2024-03-17 21:57:31.759162132 +0000
@@ -1402,7 +1402,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p><picture><source srcset="form_1648_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_p$" src="form_1648.png"/></picture>-norm of the vector. The pth root of the sum of the pth powers of the absolute values of the elements. </p>
+<p><picture><source srcset="form_1651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_p$" src="form_1651.png"/></picture>-norm of the vector. The pth root of the sum of the pth powers of the absolute values of the elements. </p>
 
 </div>
 </div>
@@ -1704,7 +1704,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>symmetric</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
-<p>Calculate the scalar product between each block of this vector and <code>V</code> and store the result in a full matrix <code>matrix</code>. This function computes the result by forming <picture><source srcset="form_1649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij}=U_i \cdot V_j$" src="form_1649.png"/></picture> where <picture><source srcset="form_1650_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i$" src="form_1650.png"/></picture> and <picture><source srcset="form_1651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1651.png"/></picture> indicate the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th block (not element!) of <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> and the <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>th block of <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture>, respectively. If <code>symmetric</code> is <code>true</code>, it is assumed that inner product results in a square symmetric matrix and almost half of the scalar products can be avoided.</p>
+<p>Calculate the scalar product between each block of this vector and <code>V</code> and store the result in a full matrix <code>matrix</code>. This function computes the result by forming <picture><source srcset="form_1652_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij}=U_i \cdot V_j$" src="form_1652.png"/></picture> where <picture><source srcset="form_1653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i$" src="form_1653.png"/></picture> and <picture><source srcset="form_1654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1654.png"/></picture> indicate the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th block (not element!) of <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> and the <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>th block of <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture>, respectively. If <code>symmetric</code> is <code>true</code>, it is assumed that inner product results in a square symmetric matrix and almost half of the scalar products can be avoided.</p>
 <p>Obviously, this function can only be used if all blocks of both vectors are of the same size.</p>
 <dl class="section note"><dt>Note</dt><dd>Internally, a single global reduction will be called to accumulate scalar product between locally owned degrees of freedom. </dd></dl>
 
@@ -1734,7 +1734,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>symmetric</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
-<p>Calculate the scalar product between each block of this vector and <code>V</code> using a metric tensor <code>matrix</code>. This function computes the result of <picture><source srcset="form_1652_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \sum_{ij} A^{ij} U_i \cdot V_j$" src="form_1652.png"/></picture> where <picture><source srcset="form_1650_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i$" src="form_1650.png"/></picture> and <picture><source srcset="form_1651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1651.png"/></picture> indicate the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th block (not element) of <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> and the <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>th block of <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture>, respectively. If <code>symmetric</code> is <code>true</code>, it is assumed that <picture><source srcset="form_1653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i \cdot V_j$" src="form_1653.png"/></picture> and <picture><source srcset="form_1654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^{ij}$" src="form_1654.png"/></picture> are symmetric matrices and almost half of the scalar products can be avoided.</p>
+<p>Calculate the scalar product between each block of this vector and <code>V</code> using a metric tensor <code>matrix</code>. This function computes the result of <picture><source srcset="form_1655_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \sum_{ij} A^{ij} U_i \cdot V_j$" src="form_1655.png"/></picture> where <picture><source srcset="form_1653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i$" src="form_1653.png"/></picture> and <picture><source srcset="form_1654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1654.png"/></picture> indicate the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th block (not element) of <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> and the <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>th block of <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture>, respectively. If <code>symmetric</code> is <code>true</code>, it is assumed that <picture><source srcset="form_1656_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i \cdot V_j$" src="form_1656.png"/></picture> and <picture><source srcset="form_1657_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^{ij}$" src="form_1657.png"/></picture> are symmetric matrices and almost half of the scalar products can be avoided.</p>
 <p>Obviously, this function can only be used if all blocks of both vectors are of the same size.</p>
 <dl class="section note"><dt>Note</dt><dd>Internally, a single global reduction will be called to accumulate the scalar product between locally owned degrees of freedom. </dd></dl>
 
@@ -1769,7 +1769,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const Number</td>          <td class="paramname"><span class="paramname"><em>b</em><span class="paramdefsep"> = </span><span class="paramdefval">Number(1.)</span></span>&#href_anchor"memdoc">
-<p>Set each block of this vector as follows: <picture><source srcset="form_1655_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^i = s V^i + b \sum_{j} U_j A^{ji}$" src="form_1655.png"/></picture> where <picture><source srcset="form_1656_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^i$" src="form_1656.png"/></picture> and <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> indicate the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th block (not element) of <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> and the <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>th block of <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture>, respectively.</p>
+<p>Set each block of this vector as follows: <picture><source srcset="form_1658_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^i = s V^i + b \sum_{j} U_j A^{ji}$" src="form_1658.png"/></picture> where <picture><source srcset="form_1659_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^i$" src="form_1659.png"/></picture> and <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> indicate the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th block (not element) of <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> and the <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>th block of <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture>, respectively.</p>
 <p>Obviously, this function can only be used if all blocks of both vectors are of the same size. </p>
 
 </div>
@@ -2055,7 +2055,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture> norm of the vector (i.e., the square root of the sum of the square of all entries among all processors). </p>
+<p>Return the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture> norm of the vector (i.e., the square root of the sum of the square of all entries among all processors). </p>
 
 <p>Implements <a class="el" href="classLinearAlgebra_1_1VectorSpaceVector.html#href_anchor">LinearAlgebra::VectorSpaceVector&lt; Number &gt;</a>.</p>
 
@@ -2077,7 +2077,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the square of the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture> norm of the vector. </p>
+<p>Return the square of the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture> norm of the vector. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1distributed_1_1Vector.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1distributed_1_1Vector.html	2024-03-17 21:57:31.851162701 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classLinearAlgebra_1_1distributed_1_1Vector.html	2024-03-17 21:57:31.859162750 +0000
@@ -1034,7 +1034,7 @@
           <td class="paramtype">const <a class="el" href="classMPI__Comm.html">MPI_Comm</a></td>          <td class="paramname"><span class="paramname"><em>comm_sm</em><span class="paramdefsep"> = </span><span class="paramdefval">MPI_COMM_SELF</span></span>&#href_anchor"memdoc">
 <p>Initialize vector with <code>local_size</code> locally-owned and <code>ghost_size</code> ghost degrees of freedoms.</p>
 <p>The optional argument <code>comm_sm</code>, which consists of processes on the same shared-memory domain, allows users have read-only access to both locally-owned and ghost values of processes combined in the shared-memory communicator. See the general documentation of this class for more information about this argument.</p>
-<dl class="section note"><dt>Note</dt><dd>In the created underlying partitioner, the local index range is translated to global indices in an ascending and one-to-one fashion, i.e., the indices of process <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> sit exactly between the indices of the processes <picture><source srcset="form_579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p-1$" src="form_579.png"/></picture> and <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>, respectively. Setting the <code>ghost_size</code> variable to an appropriate value provides memory space for the ghost data in a vector's memory allocation as and allows access to it via <a class="el" href="#href_anchor">local_element()</a>. However, the associated global indices must be handled externally in this case. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>In the created underlying partitioner, the local index range is translated to global indices in an ascending and one-to-one fashion, i.e., the indices of process <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> sit exactly between the indices of the processes <picture><source srcset="form_579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p-1$" src="form_579.png"/></picture> and <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>, respectively. Setting the <code>ghost_size</code> variable to an appropriate value provides memory space for the ghost data in a vector's memory allocation as and allows access to it via <a class="el" href="#href_anchor">local_element()</a>. However, the associated global indices must be handled externally in this case. </dd></dl>
 
 </div>
 </div>
@@ -1199,7 +1199,7 @@
 </div><div class="memdoc">
 <p>Initiates communication for the <code><a class="el" href="#href_anchor">compress()</a></code> function with non- blocking communication. This function does not wait for the transfer to finish, in order to allow for other computations during the time it takes until all data arrives.</p>
 <p>Before the data is actually exchanged, the function must be followed by a call to <code><a class="el" href="#href_anchor">compress_finish()</a></code>.</p>
-<p>In case this function is called for more than one vector before <code><a class="el" href="#href_anchor">compress_finish()</a></code> is invoked, it is mandatory to specify a unique communication channel to each such call, in order to avoid several messages with the same ID that will corrupt this operation. Any communication channel less than 100 is a valid value (in particular, the range <picture><source srcset="form_1657_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[100, 200)$" src="form_1657.png"/></picture> is reserved for <a class="el" href="classLinearAlgebra_1_1distributed_1_1BlockVector.html">LinearAlgebra::distributed::BlockVector</a>). </p>
+<p>In case this function is called for more than one vector before <code><a class="el" href="#href_anchor">compress_finish()</a></code> is invoked, it is mandatory to specify a unique communication channel to each such call, in order to avoid several messages with the same ID that will corrupt this operation. Any communication channel less than 100 is a valid value (in particular, the range <picture><source srcset="form_1660_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[100, 200)$" src="form_1660.png"/></picture> is reserved for <a class="el" href="classLinearAlgebra_1_1distributed_1_1BlockVector.html">LinearAlgebra::distributed::BlockVector</a>). </p>
 
 </div>
 </div>
@@ -1244,7 +1244,7 @@
 </div><div class="memdoc">
 <p>Initiates communication for the <code><a class="el" href="#href_anchor">update_ghost_values()</a></code> function with non-blocking communication. This function does not wait for the transfer to finish, in order to allow for other computations during the time it takes until all data arrives.</p>
 <p>Before the data is actually exchanged, the function must be followed by a call to <code><a class="el" href="#href_anchor">update_ghost_values_finish()</a></code>.</p>
-<p>In case this function is called for more than one vector before <code><a class="el" href="#href_anchor">update_ghost_values_finish()</a></code> is invoked, it is mandatory to specify a unique communication channel to each such call, in order to avoid several messages with the same ID that will corrupt this operation. Any communication channel less than 100 is a valid value (in particular, the range <picture><source srcset="form_1657_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[100, 200)$" src="form_1657.png"/></picture> is reserved for <a class="el" href="classLinearAlgebra_1_1distributed_1_1BlockVector.html">LinearAlgebra::distributed::BlockVector</a>). </p>
+<p>In case this function is called for more than one vector before <code><a class="el" href="#href_anchor">update_ghost_values_finish()</a></code> is invoked, it is mandatory to specify a unique communication channel to each such call, in order to avoid several messages with the same ID that will corrupt this operation. Any communication channel less than 100 is a valid value (in particular, the range <picture><source srcset="form_1660_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[100, 200)$" src="form_1660.png"/></picture> is reserved for <a class="el" href="classLinearAlgebra_1_1distributed_1_1BlockVector.html">LinearAlgebra::distributed::BlockVector</a>). </p>
 
 </div>
 </div>
@@ -1953,7 +1953,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture> norm of the vector (i.e., the square root of the sum of the square of all entries among all processors). </p>
+<p>Return the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture> norm of the vector (i.e., the square root of the sum of the square of all entries among all processors). </p>
 
 <p>Implements <a class="el" href="classLinearAlgebra_1_1VectorSpaceVector.html#href_anchor">LinearAlgebra::VectorSpaceVector&lt; Number &gt;</a>.</p>
 
@@ -1975,7 +1975,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the square of the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture> norm of the vector. </p>
+<p>Return the square of the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture> norm of the vector. </p>
 
 </div>
 </div>
@@ -2720,7 +2720,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p><picture><source srcset="form_1648_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_p$" src="form_1648.png"/></picture>-norm of the vector. The pth root of the sum of the pth powers of the absolute values of the elements. </p>
+<p><picture><source srcset="form_1651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_p$" src="form_1651.png"/></picture>-norm of the vector. The pth root of the sum of the pth powers of the absolute values of the elements. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classLinearOperator.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classLinearOperator.html	2024-03-17 21:57:31.899162997 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classLinearOperator.html	2024-03-17 21:57:31.907163046 +0000
@@ -224,7 +224,7 @@
 <div class="ttc" id="aclassLinearOperator_html_a61e60fcc5d78f4c927dd7b8b9e4f60c0"><div class="ttname"><a href="#href_anchor">LinearOperator::reinit_range_vector</a></div><div class="ttdeci">std::function&lt; void(Range &amp;v, bool omit_zeroing_entries) reinit_range_vector)</div><div class="ttdef"><b>Definition</b> <a href="linear__operator_8h_source.html#href_anchor">linear_operator.h:302</a></div></div>
 </div><!-- fragment --><p> that store the knowledge how to initialize (resize + internal data structures) an arbitrary vector of the <code>Range</code> and <code>Domain</code> space.</p>
 <p>The primary purpose of this class is to provide syntactic sugar for complex matrix-vector operations and free the user from having to create, set up and handle intermediate storage locations by hand.</p>
-<p>As an example consider the operation <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(A+k\,B)\,C$" src="form_94.png"/></picture>, where <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture>, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> and <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> denote (possible different) matrices. In order to construct a <a class="el" href="classLinearOperator.html">LinearOperator</a> <code>op</code> that stores the knowledge of this operation, one can write:</p>
+<p>As an example consider the operation <picture><source srcset="form_201_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(A+k\,B)\,C$" src="form_201.png"/></picture>, where <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture>, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> and <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> denote (possible different) matrices. In order to construct a <a class="el" href="classLinearOperator.html">LinearOperator</a> <code>op</code> that stores the knowledge of this operation, one can write:</p>
 <div class="fragment"><div class="line"><span class="preprocessor">#href_anchor"code" href="linear__operator__tools_8h.html">deal.II/lac/linear_operator_tools.h</a>&gt;</span></div>
 <div class="line"> </div>
 <div class="line"><a class="code hl_class" href="classSparseMatrix.html">::SparseMatrix&lt;double&gt;</a> A, B, C;</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classManifold.html	2024-03-17 21:57:31.955163343 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classManifold.html	2024-03-17 21:57:31.959163367 +0000
@@ -204,11 +204,11 @@
 <p>In the most essential use of manifolds, manifold descriptions are used to create a "point between other points". For example, when a triangulation creates a new vertex on a cell, face, or edge, it determines the new vertex' coordinates through the following function call: </p><div class="fragment"><div class="line">...</div>
 <div class="line">Point&lt;spacedim&gt; new_vertex = manifold.get_new_point (points,weights);</div>
 <div class="line">...</div>
-</div><!-- fragment --><p> Here, <code>points</code> is a collection of points in <code>spacedim</code> dimension, and <code>a</code> collection of corresponding weights. The points in this context will then be the vertices of the cell, face, or edge, and the weights are typically one over the number of points when a new midpoint of the cell, face, or edge is needed. Derived classes then will implement the <a class="el" href="#href_anchor">Manifold::get_new_point()</a> function in a way that computes the location of this new point. In the simplest case, for example in the <a class="el" href="classFlatManifold.html">FlatManifold</a> class, the function simply computes the arithmetic average (with given weights) of the given points. However, other classes do something differently; for example, the <a class="el" href="classSphericalManifold.html">SphericalManifold</a> class, which is used to describe domains that form (part of) the sphere, will ensure that, given the two vertices of an edge at the boundary, the new returned point will lie on the grand circle that connects the two points, rather than choosing a point that is half-way between the two points in <picture><source srcset="form_1384_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^d$" src="form_1384.png"/></picture>.</p>
+</div><!-- fragment --><p> Here, <code>points</code> is a collection of points in <code>spacedim</code> dimension, and <code>a</code> collection of corresponding weights. The points in this context will then be the vertices of the cell, face, or edge, and the weights are typically one over the number of points when a new midpoint of the cell, face, or edge is needed. Derived classes then will implement the <a class="el" href="#href_anchor">Manifold::get_new_point()</a> function in a way that computes the location of this new point. In the simplest case, for example in the <a class="el" href="classFlatManifold.html">FlatManifold</a> class, the function simply computes the arithmetic average (with given weights) of the given points. However, other classes do something differently; for example, the <a class="el" href="classSphericalManifold.html">SphericalManifold</a> class, which is used to describe domains that form (part of) the sphere, will ensure that, given the two vertices of an edge at the boundary, the new returned point will lie on the grand circle that connects the two points, rather than choosing a point that is half-way between the two points in <picture><source srcset="form_1402_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^d$" src="form_1402.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>Unlike almost all other cases in the library, we here interpret the points to be in real space, not on the reference cell.</dd></dl>
 <p><a class="el" href="#href_anchor">Manifold::get_new_point()</a> has a default implementation that can simplify this process somewhat: Internally, the function calls the <a class="el" href="#href_anchor">Manifold::get_intermediate_point()</a> to compute pair-wise intermediate points. Internally the <a class="el" href="#href_anchor">Manifold::get_intermediate_point()</a> calls the <a class="el" href="#href_anchor">Manifold::project_to_manifold()</a> function after computing the convex combination of the given points. This allows derived classes to only overload <a class="el" href="#href_anchor">Manifold::project_to_manifold()</a> for simple situations. This is often useful when describing manifolds that are embedded in higher dimensional space, e.g., the surface of a sphere. In those cases, the desired new point may be computed simply by the (weighted) average of the provided points, projected back out onto the sphere.</p>
 <h3>Common use case: Computing tangent vectors</h3>
-<p>The second use of this class is in computing directions on domains and boundaries. For example, we may need to compute the normal vector to a face in order to impose the no-flow boundary condition <picture><source srcset="form_1385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u \cdot \mathbf n = 0$" src="form_1385.png"/></picture> (see the <a class="el" href="group__constraints.html#href_anchor">VectorTools::compute_no_normal_flux_constraints()</a> as an example). Similarly, we may need normal vectors in the computation of the normal component of the gradient of the numerical solution in order to compute the jump in the gradient of the solution in error estimators (see, for example, the <a class="el" href="classKellyErrorEstimator.html">KellyErrorEstimator</a> class).</p>
+<p>The second use of this class is in computing directions on domains and boundaries. For example, we may need to compute the normal vector to a face in order to impose the no-flow boundary condition <picture><source srcset="form_1403_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u \cdot \mathbf n = 0$" src="form_1403.png"/></picture> (see the <a class="el" href="group__constraints.html#href_anchor">VectorTools::compute_no_normal_flux_constraints()</a> as an example). Similarly, we may need normal vectors in the computation of the normal component of the gradient of the numerical solution in order to compute the jump in the gradient of the solution in error estimators (see, for example, the <a class="el" href="classKellyErrorEstimator.html">KellyErrorEstimator</a> class).</p>
 <p>To make this possible, the <a class="el" href="classManifold.html">Manifold</a> class provides a member function (to be implemented by derived classes) that computes a "vector tangent
 to the manifold at one point, in direction of another point" via the <a class="el" href="#href_anchor">Manifold::get_tangent_vector()</a> function. For example, in 2d, one would use this function with the two vertices of an edge at the boundary to compute a "tangential" vector along the edge, and then get the normal vector by rotation by 90 degrees. In 3d, one would compute the two vectors "tangential" to the two edges of a boundary face adjacent to a boundary vertex, and then take the cross product of these two to obtain a vector normal to the boundary.</p>
 <p>For reasons that are more difficult to understand, these direction vectors are normalized in a very specific way, rather than to have unit norm. See the documentation of <a class="el" href="#href_anchor">Manifold::get_tangent_vector()</a>, as well as below, for more information.</p>
@@ -216,11 +216,11 @@
 <h3>A unified description</h3>
 <p>The "real" way to understand what this class does is to see it in the framework of differential geometry. More specifically, differential geometry is fundamentally based on the assumption that two sufficiently close points are connected via a line of "shortest distance". This line is called a "geodesic", and it is selected from all other lines that connect the two points by the property that it is shortest if distances are measured in terms of the "metric" that describes a manifold. To give examples, recall that the geodesics of a flat manifold (implemented in the <a class="el" href="classFlatManifold.html">FlatManifold</a> class) are simply the straight lines connecting two points, whereas for spherical manifolds (see the <a class="el" href="classSphericalManifold.html">SphericalManifold</a> class) geodesics between two points of same distance are the grand circles, and are in general curved lines when connecting two lines of different distance from the origin.</p>
 <p>In the following discussion, and for the purposes of implementing the current class, the concept of "metrics" that is so fundamental to differential geometry is no longer of great importance to us. Rather, everything can simply be described by postulating the existence of geodesics connecting points on a manifold.</p>
-<p>Given geodesics, the operations discussed in the previous two sections can be described in a more formal way. In essence, they rely on the fact that we can assume that a geodesic is parameterized by a "time" like variable <picture><source srcset="form_215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t$" src="form_215.png"/></picture> so that <picture><source srcset="form_1386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(t)$" src="form_1386.png"/></picture> describes the curve and so that <picture><source srcset="form_1387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(0)$" src="form_1387.png"/></picture> is the location of the first and <picture><source srcset="form_1388_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(1)$" src="form_1388.png"/></picture> the location of the second point. Furthermore, <picture><source srcset="form_1386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(t)$" src="form_1386.png"/></picture> traces out the geodesic at constant speed, covering equal distance in equal time (as measured by the metric). Note that this parameterization uses time, not arc length to denote progress along the geodesic.</p>
-<p>In this picture, computing a mid-point between points <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture> and <picture><source srcset="form_1390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2$" src="form_1390.png"/></picture>, with weights <picture><source srcset="form_1391_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_1$" src="form_1391.png"/></picture> and <picture><source srcset="form_1392_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_2=1-w_1$" src="form_1392.png"/></picture>, simply requires computing the point <picture><source srcset="form_1393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(w_1)$" src="form_1393.png"/></picture>. Computing a new point as a weighted average of more than two points can be done by considering pairwise geodesics, finding suitable points on the geodetic between the first two points, then on the geodetic between this new point and the third given point, etc.</p>
-<p>Likewise, the "tangential" vector described above is simply the velocity vector, <picture><source srcset="form_1394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(t)$" src="form_1394.png"/></picture>, evaluated at one of the end points of a geodesic (i.e., at <picture><source srcset="form_430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=0$" src="form_430.png"/></picture> or <picture><source srcset="form_1395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=1$" src="form_1395.png"/></picture>). In the case of a flat manifold, the geodesic is simply the straight line connecting two points, and the velocity vector is just the connecting vector in that case. On the other hand, for two points on a spherical manifold, the geodesic is a grand circle, and the velocity vector is tangent to the spherical surface.</p>
-<p>Note that if we wanted to, we could use this to compute the length of the geodesic that connects two points <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture> and <picture><source srcset="form_1390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2$" src="form_1390.png"/></picture> by computing <picture><source srcset="form_1396_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_0^1 \|\mathbf s'(t)\| dt$" src="form_1396.png"/></picture> along the geodesic that connects them, but this operation will not be of use to us in practice. One could also conceive computing the direction vector using the "new point" operation above, using the formula <picture><source srcset="form_1397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)=\lim_{w\rightarrow 0}
-\frac{\mathbf s(w)-\mathbf s(0)}{w}$" src="form_1397.png"/></picture> where all we need to do is compute the new point <picture><source srcset="form_1398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(w)$" src="form_1398.png"/></picture> with weights <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture> and <picture><source srcset="form_1399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1-w$" src="form_1399.png"/></picture> along the geodesic connecting <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture> and <picture><source srcset="form_1390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2$" src="form_1390.png"/></picture>. The default implementation of the function does this, by evaluating the quotient for a small but finite weight <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture>. In practice, however, it is almost always possible to explicitly compute the direction vector, i.e., without the need to numerically approximate the limit process, and derived classes should do so. </p>
+<p>Given geodesics, the operations discussed in the previous two sections can be described in a more formal way. In essence, they rely on the fact that we can assume that a geodesic is parameterized by a "time" like variable <picture><source srcset="form_189_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t$" src="form_189.png"/></picture> so that <picture><source srcset="form_1404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(t)$" src="form_1404.png"/></picture> describes the curve and so that <picture><source srcset="form_1405_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(0)$" src="form_1405.png"/></picture> is the location of the first and <picture><source srcset="form_1406_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(1)$" src="form_1406.png"/></picture> the location of the second point. Furthermore, <picture><source srcset="form_1404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(t)$" src="form_1404.png"/></picture> traces out the geodesic at constant speed, covering equal distance in equal time (as measured by the metric). Note that this parameterization uses time, not arc length to denote progress along the geodesic.</p>
+<p>In this picture, computing a mid-point between points <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture> and <picture><source srcset="form_1408_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2$" src="form_1408.png"/></picture>, with weights <picture><source srcset="form_1409_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_1$" src="form_1409.png"/></picture> and <picture><source srcset="form_1410_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_2=1-w_1$" src="form_1410.png"/></picture>, simply requires computing the point <picture><source srcset="form_1411_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(w_1)$" src="form_1411.png"/></picture>. Computing a new point as a weighted average of more than two points can be done by considering pairwise geodesics, finding suitable points on the geodetic between the first two points, then on the geodetic between this new point and the third given point, etc.</p>
+<p>Likewise, the "tangential" vector described above is simply the velocity vector, <picture><source srcset="form_1412_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(t)$" src="form_1412.png"/></picture>, evaluated at one of the end points of a geodesic (i.e., at <picture><source srcset="form_430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=0$" src="form_430.png"/></picture> or <picture><source srcset="form_1413_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=1$" src="form_1413.png"/></picture>). In the case of a flat manifold, the geodesic is simply the straight line connecting two points, and the velocity vector is just the connecting vector in that case. On the other hand, for two points on a spherical manifold, the geodesic is a grand circle, and the velocity vector is tangent to the spherical surface.</p>
+<p>Note that if we wanted to, we could use this to compute the length of the geodesic that connects two points <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture> and <picture><source srcset="form_1408_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2$" src="form_1408.png"/></picture> by computing <picture><source srcset="form_1414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_0^1 \|\mathbf s'(t)\| dt$" src="form_1414.png"/></picture> along the geodesic that connects them, but this operation will not be of use to us in practice. One could also conceive computing the direction vector using the "new point" operation above, using the formula <picture><source srcset="form_1415_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)=\lim_{w\rightarrow 0}
+\frac{\mathbf s(w)-\mathbf s(0)}{w}$" src="form_1415.png"/></picture> where all we need to do is compute the new point <picture><source srcset="form_1416_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(w)$" src="form_1416.png"/></picture> with weights <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture> and <picture><source srcset="form_1417_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1-w$" src="form_1417.png"/></picture> along the geodesic connecting <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture> and <picture><source srcset="form_1408_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2$" src="form_1408.png"/></picture>. The default implementation of the function does this, by evaluating the quotient for a small but finite weight <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture>. In practice, however, it is almost always possible to explicitly compute the direction vector, i.e., without the need to numerically approximate the limit process, and derived classes should do so. </p>
 
 <p class="definition">Definition at line <a class="el" href="include_2deal_8II_2grid_2manifold_8h_source.html#href_anchor">286</a> of file <a class="el" href="include_2deal_8II_2grid_2manifold_8h_source.html">manifold.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
@@ -648,11 +648,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a vector that, at <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1427.png"/></picture>. The geodesic is the shortest line between these two points, where "shortest" is defined via a metric specific to a particular implementation of this class in a derived class. For example, in the case of a <a class="el" href="classFlatManifold.html">FlatManifold</a>, the shortest line between two points is just the straight line, and in this case the tangent vector is just the difference <picture><source srcset="form_1428_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf d=\mathbf
-x_2-\mathbf x_1$" src="form_1428.png"/></picture>. On the other hand, for a manifold that describes a surface embedded in a higher dimensional space (e.g., the surface of a sphere), then the tangent vector is tangential to the surface, and consequently may point in a different direction than the straight line that connects the two points.</p>
-<p>While tangent vectors are often normalized to unit length, the vectors returned by this function are normalized as described in the introduction of this class. Specifically, if <picture><source srcset="form_1386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(t)$" src="form_1386.png"/></picture> traces out the geodesic between the two points where <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1 = \mathbf s(0)$" src="form_1429.png"/></picture> and <picture><source srcset="form_1430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2 = \mathbf s(1)$" src="form_1430.png"/></picture>, then the returned vector must equal <picture><source srcset="form_1431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1431.png"/></picture>. In other words, the norm of the returned vector also encodes, in some sense, the <em>length</em> of the geodesic because a curve <picture><source srcset="form_1386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(t)$" src="form_1386.png"/></picture> must move "faster" if the two points it connects between arguments <picture><source srcset="form_430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=0$" src="form_430.png"/></picture> and <picture><source srcset="form_1395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=1$" src="form_1395.png"/></picture> are farther apart.</p>
-<p>The default implementation of this function approximates <picture><source srcset="form_1432_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0) \approx \frac{\mathbf s(\epsilon)-\mathbf x_1}{\epsilon}$" src="form_1432.png"/></picture> for a small value of <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1433.png"/></picture>, and the evaluation of <picture><source srcset="form_1434_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf
-s(\epsilon)$" src="form_1434.png"/></picture> is done by calling <a class="el" href="#href_anchor">get_new_point()</a>. If possible, derived classes should override this function by an implementation of the exact derivative.</p>
+<p>Return a vector that, at <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1429.png"/></picture>. The geodesic is the shortest line between these two points, where "shortest" is defined via a metric specific to a particular implementation of this class in a derived class. For example, in the case of a <a class="el" href="classFlatManifold.html">FlatManifold</a>, the shortest line between two points is just the straight line, and in this case the tangent vector is just the difference <picture><source srcset="form_1430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf d=\mathbf
+x_2-\mathbf x_1$" src="form_1430.png"/></picture>. On the other hand, for a manifold that describes a surface embedded in a higher dimensional space (e.g., the surface of a sphere), then the tangent vector is tangential to the surface, and consequently may point in a different direction than the straight line that connects the two points.</p>
+<p>While tangent vectors are often normalized to unit length, the vectors returned by this function are normalized as described in the introduction of this class. Specifically, if <picture><source srcset="form_1404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(t)$" src="form_1404.png"/></picture> traces out the geodesic between the two points where <picture><source srcset="form_1431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1 = \mathbf s(0)$" src="form_1431.png"/></picture> and <picture><source srcset="form_1432_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2 = \mathbf s(1)$" src="form_1432.png"/></picture>, then the returned vector must equal <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1433.png"/></picture>. In other words, the norm of the returned vector also encodes, in some sense, the <em>length</em> of the geodesic because a curve <picture><source srcset="form_1404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(t)$" src="form_1404.png"/></picture> must move "faster" if the two points it connects between arguments <picture><source srcset="form_430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=0$" src="form_430.png"/></picture> and <picture><source srcset="form_1413_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=1$" src="form_1413.png"/></picture> are farther apart.</p>
+<p>The default implementation of this function approximates <picture><source srcset="form_1434_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0) \approx \frac{\mathbf s(\epsilon)-\mathbf x_1}{\epsilon}$" src="form_1434.png"/></picture> for a small value of <picture><source srcset="form_1435_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1435.png"/></picture>, and the evaluation of <picture><source srcset="form_1436_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf
+s(\epsilon)$" src="form_1436.png"/></picture> is done by calling <a class="el" href="#href_anchor">get_new_point()</a>. If possible, derived classes should override this function by an implementation of the exact derivative.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">x1</td><td>The first point that describes the geodesic, and the one at which the "direction" is to be evaluated. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classMapping.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classMapping.html	2024-03-17 21:57:32.019163738 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classMapping.html	2024-03-17 21:57:32.023163763 +0000
@@ -229,84 +229,84 @@
 class Mapping&lt; dim, spacedim &gt;</div><p>Abstract base class for mapping classes. </p>
 <p>This class declares the interface for the functionality to describe mappings from the reference (unit) cell to a cell in real space, as well as for filling the information necessary to use the <a class="el" href="classFEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, and <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> classes. Concrete implementations of these interfaces are provided in derived classes.</p>
 <h3>Mathematics of the mapping</h3>
-<p>The mapping is a transformation <picture><source srcset="form_1236_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x = \mathbf F_K(\hat{\mathbf  x})$" src="form_1236.png"/></picture> which maps points <picture><source srcset="form_86_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}$" src="form_86.png"/></picture> in the reference cell <picture><source srcset="form_82_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]^\text{dim}$" src="form_82.png"/></picture> to points <picture><source srcset="form_216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_216.png"/></picture> in the actual grid cell <picture><source srcset="form_83_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\subset{\mathbb R}^\text{spacedim}$" src="form_83.png"/></picture>. Many of the applications of such mappings require the Jacobian of this mapping, <picture><source srcset="form_1237_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(\hat{\mathbf x}) =
-\hat\nabla {\mathbf F}_K(\hat{\mathbf  x})$" src="form_1237.png"/></picture>. For instance, if dim=spacedim=2, we have  </p><p class="formulaDsp">
-<picture><source srcset="form_1238_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>The mapping is a transformation <picture><source srcset="form_1263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x = \mathbf F_K(\hat{\mathbf  x})$" src="form_1263.png"/></picture> which maps points <picture><source srcset="form_86_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}$" src="form_86.png"/></picture> in the reference cell <picture><source srcset="form_82_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]^\text{dim}$" src="form_82.png"/></picture> to points <picture><source srcset="form_190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_190.png"/></picture> in the actual grid cell <picture><source srcset="form_83_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\subset{\mathbb R}^\text{spacedim}$" src="form_83.png"/></picture>. Many of the applications of such mappings require the Jacobian of this mapping, <picture><source srcset="form_1264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(\hat{\mathbf x}) =
+\hat\nabla {\mathbf F}_K(\hat{\mathbf  x})$" src="form_1264.png"/></picture>. For instance, if dim=spacedim=2, we have  </p><p class="formulaDsp">
+<picture><source srcset="form_1265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 J(\hat{\mathbf  x}) = \left(\begin{matrix}
 \frac{\partial x}{\partial \hat x} &amp; \frac{\partial x}{\partial \hat y}
 \\
 \frac{\partial y}{\partial \hat x} &amp; \frac{\partial y}{\partial \hat y}
 \end{matrix}\right)
-\]" src="form_1238.png"/></picture>
+\]" src="form_1265.png"/></picture>
 </p>
 <h4>Mapping of scalar functions</h4>
 <p>The shape functions of scalar finite elements are typically defined on a reference cell and are then simply mapped according to the rule  </p><p class="formulaDsp">
-<picture><source srcset="form_1239_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \varphi(\mathbf x) = \varphi\bigl(\mathbf F_K(\hat{\mathbf  x})\bigr)
 = \hat \varphi(\hat{\mathbf  x}).
-\]" src="form_1239.png"/></picture>
+\]" src="form_1266.png"/></picture>
 </p>
 <h4>Mapping of integrals</h4>
-<p>Using simply a change of variables, integrals of scalar functions over a cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> can be expressed as an integral over the reference cell <picture><source srcset="form_267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat K$" src="form_267.png"/></picture>. Specifically, The volume form <picture><source srcset="form_1240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x$" src="form_1240.png"/></picture> is transformed so that  </p><p class="formulaDsp">
-<picture><source srcset="form_1241_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Using simply a change of variables, integrals of scalar functions over a cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> can be expressed as an integral over the reference cell <picture><source srcset="form_267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat K$" src="form_267.png"/></picture>. Specifically, The volume form <picture><source srcset="form_1267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\hat x$" src="form_1267.png"/></picture> is transformed so that  </p><p class="formulaDsp">
+<picture><source srcset="form_1268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \int_K u(\mathbf x)\,dx = \int_{\hat K} \hat
 u(\hat{\mathbf  x}) \left|\text{det}J(\hat{\mathbf  x})\right|
 \,d\hat x.
-\]" src="form_1241.png"/></picture>
+\]" src="form_1268.png"/></picture>
 </p>
 <p>In expressions where such integrals are approximated by quadrature, this then leads to terms of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_1242_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \int_K u(\mathbf x)\,dx
  \approx
  \sum_{q}
  \hat u(\hat{\mathbf  x}_q)
  \underbrace{\left|\text{det}J(\hat{\mathbf  x}_q)\right| w_q}_{=:
 \text{JxW}_q}.
-\]" src="form_1242.png"/></picture>
+\]" src="form_1269.png"/></picture>
 </p>
-<p> Here, the weights <picture><source srcset="form_1243_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{JxW}_q$" src="form_1243.png"/></picture> of each quadrature point (where <em>JxW</em> mnemonically stands for <em>Jacobian times <a class="el" href="classQuadrature.html">Quadrature</a> Weights</em>) take the role of the <picture><source srcset="form_1244_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dx$" src="form_1244.png"/></picture> in the original integral. Consequently, they appear in all code that computes integrals approximated by quadrature, and are accessed by <a class="el" href="classFEValuesBase.html#href_anchor">FEValues::JxW()</a>.</p>
+<p> Here, the weights <picture><source srcset="form_1270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{JxW}_q$" src="form_1270.png"/></picture> of each quadrature point (where <em>JxW</em> mnemonically stands for <em>Jacobian times <a class="el" href="classQuadrature.html">Quadrature</a> Weights</em>) take the role of the <picture><source srcset="form_1271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dx$" src="form_1271.png"/></picture> in the original integral. Consequently, they appear in all code that computes integrals approximated by quadrature, and are accessed by <a class="el" href="classFEValuesBase.html#href_anchor">FEValues::JxW()</a>.</p>
 <dl class="todo"><dt><b><a class="el" href="todo.html#href_anchor">Todo</a></b></dt><dd>Document what happens in the codimension-1 case.</dd></dl>
 <h4>Mapping of vector fields, differential forms and gradients of vector fields</h4>
 <p>The transformation of vector fields or differential forms (gradients of scalar functions) <picture><source srcset="form_321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v$" src="form_321.png"/></picture>, and gradients of vector fields <picture><source srcset="form_770_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf T$" src="form_770.png"/></picture> follows the general form</p>
 <p class="formulaDsp">
-<picture><source srcset="form_1245_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1272_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf v(\mathbf x) = \mathbf A(\hat{\mathbf  x})
 \hat{\mathbf  v}(\hat{\mathbf  x}),
 \qquad
 \mathbf T(\mathbf x) = \mathbf A(\hat{\mathbf  x})
 \hat{\mathbf  T}(\hat{\mathbf  x}) \mathbf B(\hat{\mathbf  x}).
-\]" src="form_1245.png"/></picture>
+\]" src="form_1272.png"/></picture>
 </p>
 <p> The differential forms <b>A</b> and <b>B</b> are determined by the kind of object being transformed. These transformations are performed through the <a class="el" href="#href_anchor">transform()</a> functions, and the type of object being transformed is specified by their MappingKind argument. See the documentation there for possible choices.</p>
 <h4>Derivatives of the mapping</h4>
-<p>Some applications require the derivatives of the mapping, of which the first order derivative is the mapping Jacobian, <picture><source srcset="form_1246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iJ}(\hat{\mathbf
-x})=\frac{\partial x_i}{\partial \hat x_J}$" src="form_1246.png"/></picture>, described above. Higher order derivatives of the mapping are similarly defined, for example the Jacobian derivative, <picture><source srcset="form_1247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat H_{iJK}(\hat{\mathbf  x}) = \frac{\partial^2
-x_i}{\partial \hat x_J \partial \hat x_K}$" src="form_1247.png"/></picture>, and the Jacobian second derivative, <picture><source srcset="form_1248_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat K_{iJKL}(\hat{\mathbf  x}) = \frac{\partial^3
-x_i}{\partial \hat x_J \partial \hat x_K \partial \hat x_L}$" src="form_1248.png"/></picture>. It is also useful to define the "pushed-forward" versions of the higher order derivatives: the Jacobian pushed-forward derivative, <picture><source srcset="form_1249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}(\hat{\mathbf
+<p>Some applications require the derivatives of the mapping, of which the first order derivative is the mapping Jacobian, <picture><source srcset="form_1273_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{iJ}(\hat{\mathbf
+x})=\frac{\partial x_i}{\partial \hat x_J}$" src="form_1273.png"/></picture>, described above. Higher order derivatives of the mapping are similarly defined, for example the Jacobian derivative, <picture><source srcset="form_1274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat H_{iJK}(\hat{\mathbf  x}) = \frac{\partial^2
+x_i}{\partial \hat x_J \partial \hat x_K}$" src="form_1274.png"/></picture>, and the Jacobian second derivative, <picture><source srcset="form_1275_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat K_{iJKL}(\hat{\mathbf  x}) = \frac{\partial^3
+x_i}{\partial \hat x_J \partial \hat x_K \partial \hat x_L}$" src="form_1275.png"/></picture>. It is also useful to define the "pushed-forward" versions of the higher order derivatives: the Jacobian pushed-forward derivative, <picture><source srcset="form_1276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_{ijk}(\hat{\mathbf
 x}) = \frac{\partial^2 x_i}{\partial \hat x_J \partial \hat
-x_K}(J_{jJ})^{-1}(J_{kK})^{-1}$" src="form_1249.png"/></picture>, and the Jacobian pushed-forward second derivative, <picture><source srcset="form_1250_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}(\hat{\mathbf  x}) = \frac{\partial^3 x_i}{\partial
+x_K}(J_{jJ})^{-1}(J_{kK})^{-1}$" src="form_1276.png"/></picture>, and the Jacobian pushed-forward second derivative, <picture><source srcset="form_1277_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{ijkl}(\hat{\mathbf  x}) = \frac{\partial^3 x_i}{\partial
 \hat x_J \partial \hat x_K \partial \hat
-x_L}(J_{jJ})^{-1}(J_{kK})^{-1}(J_{lL})^{-1}$" src="form_1250.png"/></picture>. These pushed-forward versions can be used to compute the higher order derivatives of functions defined on the reference cell with respect to the real cell coordinates. For instance, the Jacobian derivative with respect to the real cell coordinates is given by:</p>
+x_L}(J_{jJ})^{-1}(J_{kK})^{-1}(J_{lL})^{-1}$" src="form_1277.png"/></picture>. These pushed-forward versions can be used to compute the higher order derivatives of functions defined on the reference cell with respect to the real cell coordinates. For instance, the Jacobian derivative with respect to the real cell coordinates is given by:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_1251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1278_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{\partial}{\partial x_j}\left[J_{iJ}(\hat{\mathbf  x})\right] =
 H_{ikn}(\hat{\mathbf  x})J_{nJ}(\hat{\mathbf  x}),
-\]" src="form_1251.png"/></picture>
+\]" src="form_1278.png"/></picture>
 </p>
 <p> and the derivative of the Jacobian inverse with respect to the real cell coordinates is similarly given by:  </p><p class="formulaDsp">
-<picture><source srcset="form_1252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{\partial}{\partial x_j}\left[\left(J_{iJ}(\hat{\mathbf
 x})\right)^{-1}\right] = -H_{nik}(\hat{\mathbf  x})\left(J_{nJ}(\hat{\mathbf
 x})\right)^{-1}.
-\]" src="form_1252.png"/></picture>
+\]" src="form_1279.png"/></picture>
 </p>
 <p>In a similar fashion, higher order derivatives, with respect to the real cell coordinates, of functions defined on the reference cell can be defined using the Jacobian pushed-forward higher-order derivatives. For example, the derivative, with respect to the real cell coordinates, of the Jacobian pushed-forward derivative is given by:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_1253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1280_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{\partial}{\partial x_l}\left[H_{ijk}(\hat{\mathbf  x})\right] =
 K_{ijkl}(\hat{\mathbf  x}) -H_{mjl}(\hat{\mathbf  x})H_{imk}(\hat{\mathbf
 x})-H_{mkl}(\hat{\mathbf  x})H_{imj}(\hat{\mathbf  x}).
-\]" src="form_1253.png"/></picture>
+\]" src="form_1280.png"/></picture>
 </p>
 <h3>References</h3>
 <p>A general publication on differential geometry and finite elements is the survey </p><ul>
@@ -987,10 +987,10 @@
 </table>
 </div><div class="memdoc">
 <p>Compute information about the mapping from the reference cell to the real cell indicated by the first argument to this function. Derived classes will have to implement this function based on the kind of mapping they represent. It is called by <a class="el" href="classFEValues.html#href_anchor">FEValues::reinit()</a>.</p>
-<p>Conceptually, this function's represents the application of the mapping <picture><source srcset="form_1254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x=\mathbf F_K(\hat {\mathbf x})$" src="form_1254.png"/></picture> from reference coordinates <picture><source srcset="form_1255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf\in [0,1]^d$" src="form_1255.png"/></picture> to real space coordinates <picture><source srcset="form_216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_216.png"/></picture> for a given cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. Its purpose is to compute the following kinds of data:</p>
+<p>Conceptually, this function's represents the application of the mapping <picture><source srcset="form_1281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x=\mathbf F_K(\hat {\mathbf x})$" src="form_1281.png"/></picture> from reference coordinates <picture><source srcset="form_1282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf\in [0,1]^d$" src="form_1282.png"/></picture> to real space coordinates <picture><source srcset="form_190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_190.png"/></picture> for a given cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. Its purpose is to compute the following kinds of data:</p>
 <ul>
-<li>Data that results from the application of the mapping itself, e.g., computing the location <picture><source srcset="form_1256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_q = \mathbf F_K(\hat{\mathbf x}_q)$" src="form_1256.png"/></picture> of quadrature points on the real cell, and that is directly useful to users of <a class="el" href="classFEValues.html">FEValues</a>, for example during assembly.</li>
-<li>Data that is necessary for finite element implementations to compute their shape functions on the real cell. To this end, the <a class="el" href="classFEValues.html#href_anchor">FEValues::reinit()</a> function calls <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::fill_fe_values()</a> after the current function, and the output of this function serves as input to <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::fill_fe_values()</a>. Examples of information that needs to be computed here for use by the finite element classes is the Jacobian of the mapping, <picture><source srcset="form_1257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat\nabla \mathbf F_K(\hat{\mathbf x})$" src="form_1257.png"/></picture> or its inverse, for example to transform the gradients of shape functions on the reference cell to the gradients of shape functions on the real cell.</li>
+<li>Data that results from the application of the mapping itself, e.g., computing the location <picture><source srcset="form_1283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_q = \mathbf F_K(\hat{\mathbf x}_q)$" src="form_1283.png"/></picture> of quadrature points on the real cell, and that is directly useful to users of <a class="el" href="classFEValues.html">FEValues</a>, for example during assembly.</li>
+<li>Data that is necessary for finite element implementations to compute their shape functions on the real cell. To this end, the <a class="el" href="classFEValues.html#href_anchor">FEValues::reinit()</a> function calls <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::fill_fe_values()</a> after the current function, and the output of this function serves as input to <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::fill_fe_values()</a>. Examples of information that needs to be computed here for use by the finite element classes is the Jacobian of the mapping, <picture><source srcset="form_1284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat\nabla \mathbf F_K(\hat{\mathbf x})$" src="form_1284.png"/></picture> or its inverse, for example to transform the gradients of shape functions on the reference cell to the gradients of shape functions on the real cell.</li>
 </ul>
 <p>The information computed by this function is used to fill the various member variables of the output argument of this function. Which of the member variables of that structure should be filled is determined by the update flags stored in the <a class="el" href="classMapping_1_1InternalDataBase.html">Mapping::InternalDataBase</a> object passed to this function.</p>
 <p>An extensive discussion of the interaction between this function and <a class="el" href="classFEValues.html">FEValues</a> can be found in the <a class="el" href="group__FE__vs__Mapping__vs__FEValues.html">How Mapping, FiniteElement, and FEValues work together</a> documentation module.</p>
@@ -1249,37 +1249,37 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_contravariant:</code> maps a vector field on the reference cell to the physical cell through the Jacobian:  </p><p class="formulaDsp">
-<picture><source srcset="form_1258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})\hat{\mathbf  u}(\hat{\mathbf
 x}).
-\]" src="form_1258.png"/></picture>
+\]" src="form_1285.png"/></picture>
 </p>
 <p> In physics, this is usually referred to as the contravariant transformation. Mathematically, it is the push forward of a vector field.</p>
 <p class="endli"></p>
 </li>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of one-forms on the reference cell to a field of one-forms on the physical cell. (Theoretically this would refer to a DerivativeForm&lt;1,dim,1&gt; but we canonically identify this type with a <a class="el" href="classTensor.html">Tensor&lt;1,dim&gt;</a>). Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}\hat{\mathbf u}(\hat{\mathbf  x}).
-\]" src="form_1259.png"/></picture>
+\]" src="form_1286.png"/></picture>
 </p>
 <p> Gradients of scalar differentiable functions are transformed this way.</p>
 <p class="interli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})^{-T}\hat{\mathbf
 u}(\hat{\mathbf  x})
-\]" src="form_1260.png"/></picture>
+\]" src="form_1287.png"/></picture>
 </p>
 <p> because we assume that the mapping <picture><source srcset="form_85_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F_K$" src="form_85.png"/></picture> is always invertible, and consequently its Jacobian <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> is an invertible matrix.</p>
 <p class="endli"></p>
 </li>
 <li>
 <code>mapping_piola:</code> A field of <em>dim-1</em>-forms on the reference cell is also represented by a vector field, but again transforms differently, namely by the Piola transform  <p class="formulaDsp">
-<picture><source srcset="form_1261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf u(\mathbf x) = \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf x}) \hat{\mathbf  u}(\hat{\mathbf x}).
-\]" src="form_1261.png"/></picture>
+\]" src="form_1288.png"/></picture>
 </p>
  </li>
 </ul>
@@ -1331,21 +1331,21 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1262.png"/></picture> and <picture><source srcset="form_1263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1263.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
+<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1289.png"/></picture> and <picture><source srcset="form_1290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1290.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  T}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1264.png"/></picture>
+\]" src="form_1291.png"/></picture>
 </p>
 <p> Jacobians of spacedim-vector valued differentiable functions are transformed this way.</p>
 <p class="endli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  u}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1265.png"/></picture>
+\]" src="form_1292.png"/></picture>
 </p>
  </li>
 </ul>
/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingC1.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingC1.html	2024-03-17 21:57:32.099164232 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingC1.html	2024-03-17 21:57:32.107164282 +0000
@@ -789,37 +789,37 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_contravariant:</code> maps a vector field on the reference cell to the physical cell through the Jacobian:  </p><p class="formulaDsp">
-<picture><source srcset="form_1258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})\hat{\mathbf  u}(\hat{\mathbf
 x}).
-\]" src="form_1258.png"/></picture>
+\]" src="form_1285.png"/></picture>
 </p>
 <p> In physics, this is usually referred to as the contravariant transformation. Mathematically, it is the push forward of a vector field.</p>
 <p class="endli"></p>
 </li>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of one-forms on the reference cell to a field of one-forms on the physical cell. (Theoretically this would refer to a DerivativeForm&lt;1,dim,1&gt; but we canonically identify this type with a <a class="el" href="classTensor.html">Tensor&lt;1,dim&gt;</a>). Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}\hat{\mathbf u}(\hat{\mathbf  x}).
-\]" src="form_1259.png"/></picture>
+\]" src="form_1286.png"/></picture>
 </p>
 <p> Gradients of scalar differentiable functions are transformed this way.</p>
 <p class="interli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})^{-T}\hat{\mathbf
 u}(\hat{\mathbf  x})
-\]" src="form_1260.png"/></picture>
+\]" src="form_1287.png"/></picture>
 </p>
 <p> because we assume that the mapping <picture><source srcset="form_85_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F_K$" src="form_85.png"/></picture> is always invertible, and consequently its Jacobian <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> is an invertible matrix.</p>
 <p class="endli"></p>
 </li>
 <li>
 <code>mapping_piola:</code> A field of <em>dim-1</em>-forms on the reference cell is also represented by a vector field, but again transforms differently, namely by the Piola transform  <p class="formulaDsp">
-<picture><source srcset="form_1261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf u(\mathbf x) = \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf x}) \hat{\mathbf  u}(\hat{\mathbf x}).
-\]" src="form_1261.png"/></picture>
+\]" src="form_1288.png"/></picture>
 </p>
  </li>
 </ul>
@@ -873,21 +873,21 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1262.png"/></picture> and <picture><source srcset="form_1263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1263.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
+<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1289.png"/></picture> and <picture><source srcset="form_1290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1290.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  T}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1264.png"/></picture>
+\]" src="form_1291.png"/></picture>
 </p>
 <p> Jacobians of spacedim-vector valued differentiable functions are transformed this way.</p>
 <p class="endli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  u}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1265.png"/></picture>
+\]" src="form_1292.png"/></picture>
 </p>
  </li>
 </ul>
@@ -944,35 +944,35 @@
 </div><div class="memdoc">
 <p>Transform a tensor field from the reference cell to the physical cell. These tensors are usually the Jacobians in the reference cell of vector fields that have been pulled back from the physical cell. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
-= J \hat{\mathbf  u}$" src="form_1266.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
+= J \hat{\mathbf  u}$" src="form_1293.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1267.png"/></picture>
+\]" src="form_1294.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
-J^{-T} \hat{\mathbf  u}$" src="form_1268.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+J^{-T} \hat{\mathbf  u}$" src="form_1295.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x})^{-T} \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1269.png"/></picture>
+\]" src="form_1296.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J(\hat{\mathbf x}) \hat{\mathbf
-u}(\hat{\mathbf x})$" src="form_1270.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+u}(\hat{\mathbf x})$" src="form_1297.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1271.png"/></picture>
+\]" src="form_1298.png"/></picture>
 </p>
  </li>
 </ul>
@@ -1031,21 +1031,21 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant_gradient:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1277_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1299_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) = \hat{\mathbf  T}_{iJK}(\hat{\mathbf  x})
-J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1277.png"/></picture>
+J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1299.png"/></picture>
 </p>
 <p>,</p>
 <p class="endli">where </p><p class="formulaDsp">
-<picture><source srcset="form_1278_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
+<picture><source srcset="form_1300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1278.png"/></picture>
+\]" src="form_1300.png"/></picture>
 </p>
  </li>
 </ul>
 <p>Hessians of spacedim-vector valued differentiable functions are transformed this way (After subtraction of the product of the derivative with the Jacobian gradient).</p>
 <p>In the case when dim=spacedim the previous formula reduces to </p><p class="formulaDsp">
-<picture><source srcset="form_1279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1279.png"/></picture>
+<picture><source srcset="form_1301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1301.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -1097,40 +1097,40 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1280_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
-\mathbf u_i$" src="form_1280.png"/></picture> and <picture><source srcset="form_1281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
-u}_I$" src="form_1281.png"/></picture>, with <picture><source srcset="form_1282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1282.png"/></picture> a vector field.</p>
+<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
+\mathbf u_i$" src="form_1302.png"/></picture> and <picture><source srcset="form_1303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
+u}_I$" src="form_1303.png"/></picture>, with <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1304.png"/></picture> a vector field.</p>
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
-= J_{iI} \hat{\mathbf  u}_I$" src="form_1283.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
+= J_{iI} \hat{\mathbf  u}_I$" src="form_1305.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_{iI}(\hat{\mathbf  x}) \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1284.png"/></picture>
+\]" src="form_1306.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
-J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1285.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
+J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1307.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_iI(\hat{\mathbf  x})^{-1} \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1286.png"/></picture>
+\]" src="form_1308.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_hessian:</code> it assumes <picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
+<code>mapping_piola_hessian:</code> it assumes <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J_{iI}(\hat{\mathbf x})
-\hat{\mathbf u}(\hat{\mathbf x})$" src="form_1287.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+\hat{\mathbf u}(\hat{\mathbf x})$" src="form_1309.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J_{iI}(\hat{\mathbf  x}) \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingCartesian.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingCartesian.html	2024-03-17 21:57:32.179164727 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingCartesian.html	2024-03-17 21:57:32.187164777 +0000
@@ -219,9 +219,9 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim&gt;<br />
 class MappingCartesian&lt; dim, spacedim &gt;</div><p>A class providing a mapping from the reference cell to cells that are axiparallel, i.e., that have the shape of rectangles (in 2d) or boxes (in 3d) with edges parallel to the coordinate directions. The class therefore provides functionality that is equivalent to what, for example, <a class="el" href="classMappingQ.html">MappingQ</a> would provide for such cells. However, knowledge of the shape of cells allows this class to be substantially more efficient.</p>
-<p>Specifically, the mapping is meant for cells for which the mapping from the reference to the real cell is a scaling along the coordinate directions: The transformation from reference coordinates <picture><source srcset="form_1272_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat {\mathbf
-x}$" src="form_1272.png"/></picture> to real coordinates <picture><source srcset="form_216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_216.png"/></picture> on each cell is of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_1273_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>Specifically, the mapping is meant for cells for which the mapping from the reference to the real cell is a scaling along the coordinate directions: The transformation from reference coordinates <picture><source srcset="form_1311_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat {\mathbf
+x}$" src="form_1311.png"/></picture> to real coordinates <picture><source srcset="form_190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_190.png"/></picture> on each cell is of the form  </p><p class="formulaDsp">
+<picture><source srcset="form_1312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   {\mathbf x}(\hat {\mathbf x})
   =
   \begin{pmatrix}
@@ -230,10 +230,10 @@
   \end{pmatrix}
   \hat{\mathbf x}
   + {\mathbf v}_0
-\end{align*}" src="form_1273.png"/></picture>
+\end{align*}" src="form_1312.png"/></picture>
 </p>
 <p> in 2d, and  </p><p class="formulaDsp">
-<picture><source srcset="form_1274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_1313_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   {\mathbf x}(\hat {\mathbf x})
   =
   \begin{pmatrix}
@@ -243,9 +243,9 @@
   \end{pmatrix}
   \hat{\mathbf x}
   + {\mathbf v}_0
-\end{align*}" src="form_1274.png"/></picture>
+\end{align*}" src="form_1313.png"/></picture>
 </p>
-<p> in 3d, where <picture><source srcset="form_1275_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}_0$" src="form_1275.png"/></picture> is the bottom left vertex and <picture><source srcset="form_1276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_x,h_y,h_z$" src="form_1276.png"/></picture> are the extents of the cell along the axes.</p>
+<p> in 3d, where <picture><source srcset="form_1314_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}_0$" src="form_1314.png"/></picture> is the bottom left vertex and <picture><source srcset="form_1315_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_x,h_y,h_z$" src="form_1315.png"/></picture> are the extents of the cell along the axes.</p>
 <p>The class is intended for efficiency, and it does not do a whole lot of error checking. If you apply this mapping to a cell that does not conform to the requirements above, you will get strange results. </p>
 
 <p class="definition">Definition at line <a class="el" href="mapping__cartesian_8h_source.html#href_anchor">79</a> of file <a class="el" href="mapping__cartesian_8h_source.html">mapping_cartesian.h</a>.</p>
@@ -520,37 +520,37 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_contravariant:</code> maps a vector field on the reference cell to the physical cell through the Jacobian:  </p><p class="formulaDsp">
-<picture><source srcset="form_1258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})\hat{\mathbf  u}(\hat{\mathbf
 x}).
-\]" src="form_1258.png"/></picture>
+\]" src="form_1285.png"/></picture>
 </p>
 <p> In physics, this is usually referred to as the contravariant transformation. Mathematically, it is the push forward of a vector field.</p>
 <p class="endli"></p>
 </li>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of one-forms on the reference cell to a field of one-forms on the physical cell. (Theoretically this would refer to a DerivativeForm&lt;1,dim,1&gt; but we canonically identify this type with a <a class="el" href="classTensor.html">Tensor&lt;1,dim&gt;</a>). Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}\hat{\mathbf u}(\hat{\mathbf  x}).
-\]" src="form_1259.png"/></picture>
+\]" src="form_1286.png"/></picture>
 </p>
 <p> Gradients of scalar differentiable functions are transformed this way.</p>
 <p class="interli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})^{-T}\hat{\mathbf
 u}(\hat{\mathbf  x})
-\]" src="form_1260.png"/></picture>
+\]" src="form_1287.png"/></picture>
 </p>
 <p> because we assume that the mapping <picture><source srcset="form_85_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F_K$" src="form_85.png"/></picture> is always invertible, and consequently its Jacobian <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> is an invertible matrix.</p>
 <p class="endli"></p>
 </li>
 <li>
 <code>mapping_piola:</code> A field of <em>dim-1</em>-forms on the reference cell is also represented by a vector field, but again transforms differently, namely by the Piola transform  <p class="formulaDsp">
-<picture><source srcset="form_1261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf u(\mathbf x) = \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf x}) \hat{\mathbf  u}(\hat{\mathbf x}).
-\]" src="form_1261.png"/></picture>
+\]" src="form_1288.png"/></picture>
 </p>
  </li>
 </ul>
@@ -604,21 +604,21 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1262.png"/></picture> and <picture><source srcset="form_1263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1263.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
+<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1289.png"/></picture> and <picture><source srcset="form_1290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1290.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  T}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1264.png"/></picture>
+\]" src="form_1291.png"/></picture>
 </p>
 <p> Jacobians of spacedim-vector valued differentiable functions are transformed this way.</p>
 <p class="endli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  u}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1265.png"/></picture>
+\]" src="form_1292.png"/></picture>
 </p>
  </li>
 </ul>
@@ -675,35 +675,35 @@
 </div><div class="memdoc">
 <p>Transform a tensor field from the reference cell to the physical cell. These tensors are usually the Jacobians in the reference cell of vector fields that have been pulled back from the physical cell. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
-= J \hat{\mathbf  u}$" src="form_1266.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
+= J \hat{\mathbf  u}$" src="form_1293.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1267.png"/></picture>
+\]" src="form_1294.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
-J^{-T} \hat{\mathbf  u}$" src="form_1268.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+J^{-T} \hat{\mathbf  u}$" src="form_1295.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x})^{-T} \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1269.png"/></picture>
+\]" src="form_1296.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J(\hat{\mathbf x}) \hat{\mathbf
-u}(\hat{\mathbf x})$" src="form_1270.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+u}(\hat{\mathbf x})$" src="form_1297.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1271.png"/></picture>
+\]" src="form_1298.png"/></picture>
 </p>
  </li>
 </ul>
@@ -762,21 +762,21 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant_gradient:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1277_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1299_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) = \hat{\mathbf  T}_{iJK}(\hat{\mathbf  x})
-J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1277.png"/></picture>
+J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1299.png"/></picture>
 </p>
 <p>,</p>
 <p class="endli">where </p><p class="formulaDsp">
-<picture><source srcset="form_1278_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
+<picture><source srcset="form_1300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1278.png"/></picture>
+\]" src="form_1300.png"/></picture>
 </p>
  </li>
 </ul>
 <p>Hessians of spacedim-vector valued differentiable functions are transformed this way (After subtraction of the product of the derivative with the Jacobian gradient).</p>
 <p>In the case when dim=spacedim the previous formula reduces to </p><p class="formulaDsp">
-<picture><source srcset="form_1279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1279.png"/></picture>
+<picture><source srcset="form_1301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1301.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -828,40 +828,40 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1280_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
-\mathbf u_i$" src="form_1280.png"/></picture> and <picture><source srcset="form_1281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
-u}_I$" src="form_1281.png"/></picture>, with <picture><source srcset="form_1282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1282.png"/></picture> a vector field.</p>
+<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
+\mathbf u_i$" src="form_1302.png"/></picture> and <picture><source srcset="form_1303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
+u}_I$" src="form_1303.png"/></picture>, with <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1304.png"/></picture> a vector field.</p>
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFE.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFE.html	2024-03-17 21:57:32.255165196 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFE.html	2024-03-17 21:57:32.255165196 +0000
@@ -615,37 +615,37 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_contravariant:</code> maps a vector field on the reference cell to the physical cell through the Jacobian:  </p><p class="formulaDsp">
-<picture><source srcset="form_1258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})\hat{\mathbf  u}(\hat{\mathbf
 x}).
-\]" src="form_1258.png"/></picture>
+\]" src="form_1285.png"/></picture>
 </p>
 <p> In physics, this is usually referred to as the contravariant transformation. Mathematically, it is the push forward of a vector field.</p>
 <p class="endli"></p>
 </li>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of one-forms on the reference cell to a field of one-forms on the physical cell. (Theoretically this would refer to a DerivativeForm&lt;1,dim,1&gt; but we canonically identify this type with a <a class="el" href="classTensor.html">Tensor&lt;1,dim&gt;</a>). Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}\hat{\mathbf u}(\hat{\mathbf  x}).
-\]" src="form_1259.png"/></picture>
+\]" src="form_1286.png"/></picture>
 </p>
 <p> Gradients of scalar differentiable functions are transformed this way.</p>
 <p class="interli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})^{-T}\hat{\mathbf
 u}(\hat{\mathbf  x})
-\]" src="form_1260.png"/></picture>
+\]" src="form_1287.png"/></picture>
 </p>
 <p> because we assume that the mapping <picture><source srcset="form_85_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F_K$" src="form_85.png"/></picture> is always invertible, and consequently its Jacobian <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> is an invertible matrix.</p>
 <p class="endli"></p>
 </li>
 <li>
 <code>mapping_piola:</code> A field of <em>dim-1</em>-forms on the reference cell is also represented by a vector field, but again transforms differently, namely by the Piola transform  <p class="formulaDsp">
-<picture><source srcset="form_1261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf u(\mathbf x) = \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf x}) \hat{\mathbf  u}(\hat{\mathbf x}).
-\]" src="form_1261.png"/></picture>
+\]" src="form_1288.png"/></picture>
 </p>
  </li>
 </ul>
@@ -699,21 +699,21 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1262.png"/></picture> and <picture><source srcset="form_1263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1263.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
+<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1289.png"/></picture> and <picture><source srcset="form_1290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1290.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  T}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1264.png"/></picture>
+\]" src="form_1291.png"/></picture>
 </p>
 <p> Jacobians of spacedim-vector valued differentiable functions are transformed this way.</p>
 <p class="endli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  u}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1265.png"/></picture>
+\]" src="form_1292.png"/></picture>
 </p>
  </li>
 </ul>
@@ -770,35 +770,35 @@
 </div><div class="memdoc">
 <p>Transform a tensor field from the reference cell to the physical cell. These tensors are usually the Jacobians in the reference cell of vector fields that have been pulled back from the physical cell. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
-= J \hat{\mathbf  u}$" src="form_1266.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
+= J \hat{\mathbf  u}$" src="form_1293.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1267.png"/></picture>
+\]" src="form_1294.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
-J^{-T} \hat{\mathbf  u}$" src="form_1268.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+J^{-T} \hat{\mathbf  u}$" src="form_1295.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x})^{-T} \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1269.png"/></picture>
+\]" src="form_1296.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J(\hat{\mathbf x}) \hat{\mathbf
-u}(\hat{\mathbf x})$" src="form_1270.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+u}(\hat{\mathbf x})$" src="form_1297.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1271.png"/></picture>
+\]" src="form_1298.png"/></picture>
 </p>
  </li>
 </ul>
@@ -857,21 +857,21 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant_gradient:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1277_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1299_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) = \hat{\mathbf  T}_{iJK}(\hat{\mathbf  x})
-J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1277.png"/></picture>
+J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1299.png"/></picture>
 </p>
 <p>,</p>
 <p class="endli">where </p><p class="formulaDsp">
-<picture><source srcset="form_1278_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
+<picture><source srcset="form_1300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1278.png"/></picture>
+\]" src="form_1300.png"/></picture>
 </p>
  </li>
 </ul>
 <p>Hessians of spacedim-vector valued differentiable functions are transformed this way (After subtraction of the product of the derivative with the Jacobian gradient).</p>
 <p>In the case when dim=spacedim the previous formula reduces to </p><p class="formulaDsp">
-<picture><source srcset="form_1279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1279.png"/></picture>
+<picture><source srcset="form_1301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1301.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -923,40 +923,40 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1280_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
-\mathbf u_i$" src="form_1280.png"/></picture> and <picture><source srcset="form_1281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
-u}_I$" src="form_1281.png"/></picture>, with <picture><source srcset="form_1282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1282.png"/></picture> a vector field.</p>
+<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
+\mathbf u_i$" src="form_1302.png"/></picture> and <picture><source srcset="form_1303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
+u}_I$" src="form_1303.png"/></picture>, with <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1304.png"/></picture> a vector field.</p>
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
-= J_{iI} \hat{\mathbf  u}_I$" src="form_1283.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
+= J_{iI} \hat{\mathbf  u}_I$" src="form_1305.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_{iI}(\hat{\mathbf  x}) \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1284.png"/></picture>
+\]" src="form_1306.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
-J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1285.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
+J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1307.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_iI(\hat{\mathbf  x})^{-1} \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1286.png"/></picture>
+\]" src="form_1308.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_hessian:</code> it assumes <picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
+<code>mapping_piola_hessian:</code> it assumes <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J_{iI}(\hat{\mathbf x})
-\hat{\mathbf u}(\hat{\mathbf x})$" src="form_1287.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+\hat{\mathbf u}(\hat{\mathbf x})$" src="form_1309.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J_{iI}(\hat{\mathbf  x}) \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFEField.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFEField.html	2024-03-17 21:57:32.331165665 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFEField.html	2024-03-17 21:57:32.335165691 +0000
@@ -688,37 +688,37 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_contravariant:</code> maps a vector field on the reference cell to the physical cell through the Jacobian:  </p><p class="formulaDsp">
-<picture><source srcset="form_1258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})\hat{\mathbf  u}(\hat{\mathbf
 x}).
-\]" src="form_1258.png"/></picture>
+\]" src="form_1285.png"/></picture>
 </p>
 <p> In physics, this is usually referred to as the contravariant transformation. Mathematically, it is the push forward of a vector field.</p>
 <p class="endli"></p>
 </li>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of one-forms on the reference cell to a field of one-forms on the physical cell. (Theoretically this would refer to a DerivativeForm&lt;1,dim,1&gt; but we canonically identify this type with a <a class="el" href="classTensor.html">Tensor&lt;1,dim&gt;</a>). Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}\hat{\mathbf u}(\hat{\mathbf  x}).
-\]" src="form_1259.png"/></picture>
+\]" src="form_1286.png"/></picture>
 </p>
 <p> Gradients of scalar differentiable functions are transformed this way.</p>
 <p class="interli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})^{-T}\hat{\mathbf
 u}(\hat{\mathbf  x})
-\]" src="form_1260.png"/></picture>
+\]" src="form_1287.png"/></picture>
 </p>
 <p> because we assume that the mapping <picture><source srcset="form_85_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F_K$" src="form_85.png"/></picture> is always invertible, and consequently its Jacobian <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> is an invertible matrix.</p>
 <p class="endli"></p>
 </li>
 <li>
 <code>mapping_piola:</code> A field of <em>dim-1</em>-forms on the reference cell is also represented by a vector field, but again transforms differently, namely by the Piola transform  <p class="formulaDsp">
-<picture><source srcset="form_1261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf u(\mathbf x) = \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf x}) \hat{\mathbf  u}(\hat{\mathbf x}).
-\]" src="form_1261.png"/></picture>
+\]" src="form_1288.png"/></picture>
 </p>
  </li>
 </ul>
@@ -772,21 +772,21 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1262.png"/></picture> and <picture><source srcset="form_1263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1263.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
+<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1289.png"/></picture> and <picture><source srcset="form_1290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1290.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  T}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1264.png"/></picture>
+\]" src="form_1291.png"/></picture>
 </p>
 <p> Jacobians of spacedim-vector valued differentiable functions are transformed this way.</p>
 <p class="endli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  u}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1265.png"/></picture>
+\]" src="form_1292.png"/></picture>
 </p>
  </li>
 </ul>
@@ -843,35 +843,35 @@
 </div><div class="memdoc">
 <p>Transform a tensor field from the reference cell to the physical cell. These tensors are usually the Jacobians in the reference cell of vector fields that have been pulled back from the physical cell. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
-= J \hat{\mathbf  u}$" src="form_1266.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
+= J \hat{\mathbf  u}$" src="form_1293.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1267.png"/></picture>
+\]" src="form_1294.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
-J^{-T} \hat{\mathbf  u}$" src="form_1268.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+J^{-T} \hat{\mathbf  u}$" src="form_1295.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x})^{-T} \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1269.png"/></picture>
+\]" src="form_1296.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J(\hat{\mathbf x}) \hat{\mathbf
-u}(\hat{\mathbf x})$" src="form_1270.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+u}(\hat{\mathbf x})$" src="form_1297.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1271.png"/></picture>
+\]" src="form_1298.png"/></picture>
 </p>
  </li>
 </ul>
@@ -930,21 +930,21 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant_gradient:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1277_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1299_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) = \hat{\mathbf  T}_{iJK}(\hat{\mathbf  x})
-J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1277.png"/></picture>
+J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1299.png"/></picture>
 </p>
 <p>,</p>
 <p class="endli">where </p><p class="formulaDsp">
-<picture><source srcset="form_1278_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
+<picture><source srcset="form_1300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1278.png"/></picture>
+\]" src="form_1300.png"/></picture>
 </p>
  </li>
 </ul>
 <p>Hessians of spacedim-vector valued differentiable functions are transformed this way (After subtraction of the product of the derivative with the Jacobian gradient).</p>
 <p>In the case when dim=spacedim the previous formula reduces to </p><p class="formulaDsp">
-<picture><source srcset="form_1279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1279.png"/></picture>
+<picture><source srcset="form_1301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1301.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -996,40 +996,40 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1280_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
-\mathbf u_i$" src="form_1280.png"/></picture> and <picture><source srcset="form_1281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
-u}_I$" src="form_1281.png"/></picture>, with <picture><source srcset="form_1282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1282.png"/></picture> a vector field.</p>
+<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
+\mathbf u_i$" src="form_1302.png"/></picture> and <picture><source srcset="form_1303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
+u}_I$" src="form_1303.png"/></picture>, with <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1304.png"/></picture> a vector field.</p>
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
-= J_{iI} \hat{\mathbf  u}_I$" src="form_1283.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
+= J_{iI} \hat{\mathbf  u}_I$" src="form_1305.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_{iI}(\hat{\mathbf  x}) \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1284.png"/></picture>
+\]" src="form_1306.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
-J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1285.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
+J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1307.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_iI(\hat{\mathbf  x})^{-1} \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1286.png"/></picture>
+\]" src="form_1308.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_hessian:</code> it assumes <picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
+<code>mapping_piola_hessian:</code> it assumes <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J_{iI}(\hat{\mathbf x})
-\hat{\mathbf u}(\hat{\mathbf x})$" src="form_1287.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+\hat{\mathbf u}(\hat{\mathbf x})$" src="form_1309.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J_{iI}(\hat{\mathbf  x}) \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFEField_1_1InternalData.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFEField_1_1InternalData.html	2024-03-17 21:57:32.371165912 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFEField_1_1InternalData.html	2024-03-17 21:57:32.375165937 +0000
@@ -666,7 +666,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Tensors of contravariant transformation at each of the quadrature points. The contravariant matrix is the Jacobian of the transformation, i.e. <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1289.png"/></picture>.</p>
+<p>Tensors of contravariant transformation at each of the quadrature points. The contravariant matrix is the Jacobian of the transformation, i.e. <picture><source srcset="form_1255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1255.png"/></picture>.</p>
 <p>Computed on each cell. </p>
 
 <p class="definition">Definition at line <a class="el" href="mapping__fe__field_8h_source.html#href_anchor">458</a> of file <a class="el" href="mapping__fe__field_8h_source.html">mapping_fe_field.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFE_1_1InternalData.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFE_1_1InternalData.html	2024-03-17 21:57:32.411166159 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingFE_1_1InternalData.html	2024-03-17 21:57:32.415166184 +0000
@@ -739,7 +739,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Tensors of contravariant transformation at each of the quadrature points. The contravariant matrix is the Jacobian of the transformation, i.e. <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1289.png"/></picture>.</p>
+<p>Tensors of contravariant transformation at each of the quadrature points. The contravariant matrix is the Jacobian of the transformation, i.e. <picture><source srcset="form_1255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1255.png"/></picture>.</p>
 <p>Computed on each cell. </p>
 
 <p class="definition">Definition at line <a class="el" href="mapping__fe_8h_source.html#href_anchor">371</a> of file <a class="el" href="mapping__fe_8h_source.html">mapping_fe.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingManifold.html	2024-03-17 21:57:32.467166505 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingManifold.html	2024-03-17 21:57:32.471166530 +0000
@@ -533,37 +533,37 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_contravariant:</code> maps a vector field on the reference cell to the physical cell through the Jacobian:  </p><p class="formulaDsp">
-<picture><source srcset="form_1258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})\hat{\mathbf  u}(\hat{\mathbf
 x}).
-\]" src="form_1258.png"/></picture>
+\]" src="form_1285.png"/></picture>
 </p>
 <p> In physics, this is usually referred to as the contravariant transformation. Mathematically, it is the push forward of a vector field.</p>
 <p class="endli"></p>
 </li>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of one-forms on the reference cell to a field of one-forms on the physical cell. (Theoretically this would refer to a DerivativeForm&lt;1,dim,1&gt; but we canonically identify this type with a <a class="el" href="classTensor.html">Tensor&lt;1,dim&gt;</a>). Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}\hat{\mathbf u}(\hat{\mathbf  x}).
-\]" src="form_1259.png"/></picture>
+\]" src="form_1286.png"/></picture>
 </p>
 <p> Gradients of scalar differentiable functions are transformed this way.</p>
 <p class="interli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})^{-T}\hat{\mathbf
 u}(\hat{\mathbf  x})
-\]" src="form_1260.png"/></picture>
+\]" src="form_1287.png"/></picture>
 </p>
 <p> because we assume that the mapping <picture><source srcset="form_85_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F_K$" src="form_85.png"/></picture> is always invertible, and consequently its Jacobian <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> is an invertible matrix.</p>
 <p class="endli"></p>
 </li>
 <li>
 <code>mapping_piola:</code> A field of <em>dim-1</em>-forms on the reference cell is also represented by a vector field, but again transforms differently, namely by the Piola transform  <p class="formulaDsp">
-<picture><source srcset="form_1261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf u(\mathbf x) = \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf x}) \hat{\mathbf  u}(\hat{\mathbf x}).
-\]" src="form_1261.png"/></picture>
+\]" src="form_1288.png"/></picture>
 </p>
  </li>
 </ul>
@@ -617,21 +617,21 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1262.png"/></picture> and <picture><source srcset="form_1263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1263.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
+<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1289.png"/></picture> and <picture><source srcset="form_1290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1290.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  T}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1264.png"/></picture>
+\]" src="form_1291.png"/></picture>
 </p>
 <p> Jacobians of spacedim-vector valued differentiable functions are transformed this way.</p>
 <p class="endli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  u}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1265.png"/></picture>
+\]" src="form_1292.png"/></picture>
 </p>
  </li>
 </ul>
@@ -688,35 +688,35 @@
 </div><div class="memdoc">
 <p>Transform a tensor field from the reference cell to the physical cell. These tensors are usually the Jacobians in the reference cell of vector fields that have been pulled back from the physical cell. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
-= J \hat{\mathbf  u}$" src="form_1266.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
+= J \hat{\mathbf  u}$" src="form_1293.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1267.png"/></picture>
+\]" src="form_1294.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
-J^{-T} \hat{\mathbf  u}$" src="form_1268.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+J^{-T} \hat{\mathbf  u}$" src="form_1295.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x})^{-T} \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1269.png"/></picture>
+\]" src="form_1296.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J(\hat{\mathbf x}) \hat{\mathbf
-u}(\hat{\mathbf x})$" src="form_1270.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+u}(\hat{\mathbf x})$" src="form_1297.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1271.png"/></picture>
+\]" src="form_1298.png"/></picture>
 </p>
  </li>
 </ul>
@@ -775,21 +775,21 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant_gradient:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1277_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1299_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) = \hat{\mathbf  T}_{iJK}(\hat{\mathbf  x})
-J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1277.png"/></picture>
+J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1299.png"/></picture>
 </p>
 <p>,</p>
 <p class="endli">where </p><p class="formulaDsp">
-<picture><source srcset="form_1278_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
+<picture><source srcset="form_1300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1278.png"/></picture>
+\]" src="form_1300.png"/></picture>
 </p>
  </li>
 </ul>
 <p>Hessians of spacedim-vector valued differentiable functions are transformed this way (After subtraction of the product of the derivative with the Jacobian gradient).</p>
 <p>In the case when dim=spacedim the previous formula reduces to </p><p class="formulaDsp">
-<picture><source srcset="form_1279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1279.png"/></picture>
+<picture><source srcset="form_1301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1301.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -841,40 +841,40 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1280_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
-\mathbf u_i$" src="form_1280.png"/></picture> and <picture><source srcset="form_1281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
-u}_I$" src="form_1281.png"/></picture>, with <picture><source srcset="form_1282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1282.png"/></picture> a vector field.</p>
+<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
+\mathbf u_i$" src="form_1302.png"/></picture> and <picture><source srcset="form_1303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
+u}_I$" src="form_1303.png"/></picture>, with <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1304.png"/></picture> a vector field.</p>
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
-= J_{iI} \hat{\mathbf  u}_I$" src="form_1283.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
+= J_{iI} \hat{\mathbf  u}_I$" src="form_1305.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_{iI}(\hat{\mathbf  x}) \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1284.png"/></picture>
+\]" src="form_1306.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
-J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1285.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
+J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1307.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_iI(\hat{\mathbf  x})^{-1} \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1286.png"/></picture>
+\]" src="form_1308.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_hessian:</code> it assumes <picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
+<code>mapping_piola_hessian:</code> it assumes <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J_{iI}(\hat{\mathbf x})
-\hat{\mathbf u}(\hat{\mathbf x})$" src="form_1287.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+\hat{\mathbf u}(\hat{\mathbf x})$" src="form_1309.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J_{iI}(\hat{\mathbf  x}) \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingManifold_1_1InternalData.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingManifold_1_1InternalData.html	2024-03-17 21:57:32.507166752 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingManifold_1_1InternalData.html	2024-03-17 21:57:32.507166752 +0000
@@ -504,7 +504,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Tensors of contravariant transformation at each of the quadrature points. The contravariant matrix is the Jacobian of the transformation, i.e. <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1289.png"/></picture>.</p>
+<p>Tensors of contravariant transformation at each of the quadrature points. The contravariant matrix is the Jacobian of the transformation, i.e. <picture><source srcset="form_1255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1255.png"/></picture>.</p>
 <p>Computed on each cell. </p>
 
 <p class="definition">Definition at line <a class="el" href="mapping__manifold_8h_source.html#href_anchor">307</a> of file <a class="el" href="mapping__manifold_8h_source.html">mapping_manifold.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ.html	2024-03-17 21:57:32.579167198 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ.html	2024-03-17 21:57:32.583167222 +0000
@@ -253,7 +253,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim&gt;<br />
-class MappingQ&lt; dim, spacedim &gt;</div><p>This class implements the functionality for polynomial mappings <picture><source srcset="form_276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_p$" src="form_276.png"/></picture> of polynomial degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> that will be used on all cells of the mesh. In order to get a genuine higher-order mapping for all cells, it is important to provide information about how interior edges and faces of the mesh should be curved. This is typically done by associating a <a class="el" href="classManifold.html">Manifold</a> with interior cells and edges. A simple example of this is discussed in the "Results" section of <a class="el" href="step_6.html">step-6</a>; a full discussion of manifolds is provided in <a class="el" href="step_53.html">step-53</a>. If manifolds are only attached to the boundaries of a domain, the current class with higher polynomial degrees will provide the same information as a mere <a class="el" href="classMappingQ1.html">MappingQ1</a> object. If you are working on meshes that describe a (curved) manifold embedded in higher space dimensions, i.e., if dim!=spacedim, then every cell is at the boundary of the domain you will likely already have attached a manifold object to all cells that can then also be used by the mapping classes for higher order mappings.</p>
+class MappingQ&lt; dim, spacedim &gt;</div><p>This class implements the functionality for polynomial mappings <picture><source srcset="form_276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_p$" src="form_276.png"/></picture> of polynomial degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> that will be used on all cells of the mesh. In order to get a genuine higher-order mapping for all cells, it is important to provide information about how interior edges and faces of the mesh should be curved. This is typically done by associating a <a class="el" href="classManifold.html">Manifold</a> with interior cells and edges. A simple example of this is discussed in the "Results" section of <a class="el" href="step_6.html">step-6</a>; a full discussion of manifolds is provided in <a class="el" href="step_53.html">step-53</a>. If manifolds are only attached to the boundaries of a domain, the current class with higher polynomial degrees will provide the same information as a mere <a class="el" href="classMappingQ1.html">MappingQ1</a> object. If you are working on meshes that describe a (curved) manifold embedded in higher space dimensions, i.e., if dim!=spacedim, then every cell is at the boundary of the domain you will likely already have attached a manifold object to all cells that can then also be used by the mapping classes for higher order mappings.</p>
 <h4>Behavior along curved boundaries and with different manifolds</h4>
 <p>For a number of applications, one only knows a manifold description of a surface but not the interior of the computational domain. In such a case, a <a class="el" href="classFlatManifold.html">FlatManifold</a> object will be assigned to the interior entities that describes a usual planar coordinate system where the additional points for the higher order mapping are placed exactly according to a bi-/trilinear mapping. When combined with a non-flat manifold on the boundary, for example a circle bulging into the interior of a square cell, the two manifold descriptions are in general incompatible. For example, a <a class="el" href="classFlatManifold.html">FlatManifold</a> defined solely through the cell's vertices would put an interior point located at some small distance epsilon away from the boundary along a straight line and thus in general outside the concave part of a circle. If the polynomial degree of <a class="el" href="classMappingQ.html">MappingQ</a> is sufficiently high, the transformation from the reference cell to such a cell would in general contain inverted regions close to the boundary.</p>
 <p>In order to avoid this situation, this class applies an algorithm for making this transition smooth using a so-called transfinite interpolation that is essentially a linear blend between the descriptions along the surrounding entities. In the algorithm that computes additional points, the <a class="el" href="#href_anchor">compute_mapping_support_points()</a> method, all the entities of the cells are passed through hierarchically, starting from the lines to the quads and finally hexes. Points on objects higher up in the hierarchy are obtained from the manifold associated with that object, taking into account all the points previously computed by the manifolds associated with the lower-dimensional objects, not just the vertices. If only a line is assigned a curved boundary but the adjacent quad is on a flat manifold, the flat manifold on the quad will take the points on the deformed line into account when interpolating the position of the additional points inside the quad and thus always result in a well-defined transformation.</p>
@@ -700,37 +700,37 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_contravariant:</code> maps a vector field on the reference cell to the physical cell through the Jacobian:  </p><p class="formulaDsp">
-<picture><source srcset="form_1258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})\hat{\mathbf  u}(\hat{\mathbf
 x}).
-\]" src="form_1258.png"/></picture>
+\]" src="form_1285.png"/></picture>
 </p>
 <p> In physics, this is usually referred to as the contravariant transformation. Mathematically, it is the push forward of a vector field.</p>
 <p class="endli"></p>
 </li>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of one-forms on the reference cell to a field of one-forms on the physical cell. (Theoretically this would refer to a DerivativeForm&lt;1,dim,1&gt; but we canonically identify this type with a <a class="el" href="classTensor.html">Tensor&lt;1,dim&gt;</a>). Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}\hat{\mathbf u}(\hat{\mathbf  x}).
-\]" src="form_1259.png"/></picture>
+\]" src="form_1286.png"/></picture>
 </p>
 <p> Gradients of scalar differentiable functions are transformed this way.</p>
 <p class="interli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})^{-T}\hat{\mathbf
 u}(\hat{\mathbf  x})
-\]" src="form_1260.png"/></picture>
+\]" src="form_1287.png"/></picture>
 </p>
 <p> because we assume that the mapping <picture><source srcset="form_85_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F_K$" src="form_85.png"/></picture> is always invertible, and consequently its Jacobian <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> is an invertible matrix.</p>
 <p class="endli"></p>
 </li>
 <li>
 <code>mapping_piola:</code> A field of <em>dim-1</em>-forms on the reference cell is also represented by a vector field, but again transforms differently, namely by the Piola transform  <p class="formulaDsp">
-<picture><source srcset="form_1261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf u(\mathbf x) = \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf x}) \hat{\mathbf  u}(\hat{\mathbf x}).
-\]" src="form_1261.png"/></picture>
+\]" src="form_1288.png"/></picture>
 </p>
  </li>
 </ul>
@@ -784,21 +784,21 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1262.png"/></picture> and <picture><source srcset="form_1263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1263.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
+<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1289.png"/></picture> and <picture><source srcset="form_1290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1290.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  T}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1264.png"/></picture>
+\]" src="form_1291.png"/></picture>
 </p>
 <p> Jacobians of spacedim-vector valued differentiable functions are transformed this way.</p>
 <p class="endli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  u}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1265.png"/></picture>
+\]" src="form_1292.png"/></picture>
 </p>
  </li>
 </ul>
@@ -855,35 +855,35 @@
 </div><div class="memdoc">
 <p>Transform a tensor field from the reference cell to the physical cell. These tensors are usually the Jacobians in the reference cell of vector fields that have been pulled back from the physical cell. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
-= J \hat{\mathbf  u}$" src="form_1266.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
+= J \hat{\mathbf  u}$" src="form_1293.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1267.png"/></picture>
+\]" src="form_1294.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
-J^{-T} \hat{\mathbf  u}$" src="form_1268.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+J^{-T} \hat{\mathbf  u}$" src="form_1295.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x})^{-T} \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1269.png"/></picture>
+\]" src="form_1296.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J(\hat{\mathbf x}) \hat{\mathbf
-u}(\hat{\mathbf x})$" src="form_1270.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+u}(\hat{\mathbf x})$" src="form_1297.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1271.png"/></picture>
+\]" src="form_1298.png"/></picture>
 </p>
  </li>
 </ul>
@@ -942,21 +942,21 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant_gradient:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1277_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1299_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) = \hat{\mathbf  T}_{iJK}(\hat{\mathbf  x})
-J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1277.png"/></picture>
+J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1299.png"/></picture>
 </p>
 <p>,</p>
 <p class="endli">where </p><p class="formulaDsp">
-<picture><source srcset="form_1278_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
+<picture><source srcset="form_1300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1278.png"/></picture>
+\]" src="form_1300.png"/></picture>
 </p>
  </li>
 </ul>
 <p>Hessians of spacedim-vector valued differentiable functions are transformed this way (After subtraction of the product of the derivative with the Jacobian gradient).</p>
 <p>In the case when dim=spacedim the previous formula reduces to </p><p class="formulaDsp">
-<picture><source srcset="form_1279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1279.png"/></picture>
+<picture><source srcset="form_1301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1301.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -1008,40 +1008,40 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1280_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
-\mathbf u_i$" src="form_1280.png"/></picture> and <picture><source srcset="form_1281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
-u}_I$" src="form_1281.png"/></picture>, with <picture><source srcset="form_1282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1282.png"/></picture> a vector field.</p>
+<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
+\mathbf u_i$" src="form_1302.png"/></picture> and <picture><source srcset="form_1303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
+u}_I$" src="form_1303.png"/></picture>, with <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1304.png"/></picture> a vector field.</p>
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
-= J_{iI} \hat{\mathbf  u}_I$" src="form_1283.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
+= J_{iI} \hat{\mathbf  u}_I$" src="form_1305.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_{iI}(\hat{\mathbf  x}) \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1284.png"/></picture>
+\]" src="form_1306.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
-J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1285.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
+J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1307.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_iI(\hat{\mathbf  x})^{-1} \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1286.png"/></picture>
+\]" src="form_1308.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_hessian:</code> it assumes <picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ1.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ1.html	2024-03-17 21:57:32.659167691 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ1.html	2024-03-17 21:57:32.663167716 +0000
@@ -646,37 +646,37 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_contravariant:</code> maps a vector field on the reference cell to the physical cell through the Jacobian:  </p><p class="formulaDsp">
-<picture><source srcset="form_1258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})\hat{\mathbf  u}(\hat{\mathbf
 x}).
-\]" src="form_1258.png"/></picture>
+\]" src="form_1285.png"/></picture>
 </p>
 <p> In physics, this is usually referred to as the contravariant transformation. Mathematically, it is the push forward of a vector field.</p>
 <p class="endli"></p>
 </li>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of one-forms on the reference cell to a field of one-forms on the physical cell. (Theoretically this would refer to a DerivativeForm&lt;1,dim,1&gt; but we canonically identify this type with a <a class="el" href="classTensor.html">Tensor&lt;1,dim&gt;</a>). Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}\hat{\mathbf u}(\hat{\mathbf  x}).
-\]" src="form_1259.png"/></picture>
+\]" src="form_1286.png"/></picture>
 </p>
 <p> Gradients of scalar differentiable functions are transformed this way.</p>
 <p class="interli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})^{-T}\hat{\mathbf
 u}(\hat{\mathbf  x})
-\]" src="form_1260.png"/></picture>
+\]" src="form_1287.png"/></picture>
 </p>
 <p> because we assume that the mapping <picture><source srcset="form_85_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F_K$" src="form_85.png"/></picture> is always invertible, and consequently its Jacobian <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> is an invertible matrix.</p>
 <p class="endli"></p>
 </li>
 <li>
 <code>mapping_piola:</code> A field of <em>dim-1</em>-forms on the reference cell is also represented by a vector field, but again transforms differently, namely by the Piola transform  <p class="formulaDsp">
-<picture><source srcset="form_1261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf u(\mathbf x) = \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf x}) \hat{\mathbf  u}(\hat{\mathbf x}).
-\]" src="form_1261.png"/></picture>
+\]" src="form_1288.png"/></picture>
 </p>
  </li>
 </ul>
@@ -730,21 +730,21 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1262.png"/></picture> and <picture><source srcset="form_1263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1263.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
+<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1289.png"/></picture> and <picture><source srcset="form_1290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1290.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  T}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1264.png"/></picture>
+\]" src="form_1291.png"/></picture>
 </p>
 <p> Jacobians of spacedim-vector valued differentiable functions are transformed this way.</p>
 <p class="endli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  u}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1265.png"/></picture>
+\]" src="form_1292.png"/></picture>
 </p>
  </li>
 </ul>
@@ -801,35 +801,35 @@
 </div><div class="memdoc">
 <p>Transform a tensor field from the reference cell to the physical cell. These tensors are usually the Jacobians in the reference cell of vector fields that have been pulled back from the physical cell. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
-= J \hat{\mathbf  u}$" src="form_1266.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
+= J \hat{\mathbf  u}$" src="form_1293.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1267.png"/></picture>
+\]" src="form_1294.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
-J^{-T} \hat{\mathbf  u}$" src="form_1268.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+J^{-T} \hat{\mathbf  u}$" src="form_1295.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x})^{-T} \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1269.png"/></picture>
+\]" src="form_1296.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J(\hat{\mathbf x}) \hat{\mathbf
-u}(\hat{\mathbf x})$" src="form_1270.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+u}(\hat{\mathbf x})$" src="form_1297.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1271.png"/></picture>
+\]" src="form_1298.png"/></picture>
 </p>
  </li>
 </ul>
@@ -888,21 +888,21 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant_gradient:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1277_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1299_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) = \hat{\mathbf  T}_{iJK}(\hat{\mathbf  x})
-J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1277.png"/></picture>
+J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1299.png"/></picture>
 </p>
 <p>,</p>
 <p class="endli">where </p><p class="formulaDsp">
-<picture><source srcset="form_1278_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
+<picture><source srcset="form_1300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1278.png"/></picture>
+\]" src="form_1300.png"/></picture>
 </p>
  </li>
 </ul>
 <p>Hessians of spacedim-vector valued differentiable functions are transformed this way (After subtraction of the product of the derivative with the Jacobian gradient).</p>
 <p>In the case when dim=spacedim the previous formula reduces to </p><p class="formulaDsp">
-<picture><source srcset="form_1279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1279.png"/></picture>
+<picture><source srcset="form_1301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1301.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -954,40 +954,40 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1280_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
-\mathbf u_i$" src="form_1280.png"/></picture> and <picture><source srcset="form_1281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
-u}_I$" src="form_1281.png"/></picture>, with <picture><source srcset="form_1282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1282.png"/></picture> a vector field.</p>
+<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
+\mathbf u_i$" src="form_1302.png"/></picture> and <picture><source srcset="form_1303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
+u}_I$" src="form_1303.png"/></picture>, with <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1304.png"/></picture> a vector field.</p>
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
-= J_{iI} \hat{\mathbf  u}_I$" src="form_1283.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
+= J_{iI} \hat{\mathbf  u}_I$" src="form_1305.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_{iI}(\hat{\mathbf  x}) \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1284.png"/></picture>
+\]" src="form_1306.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
-J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1285.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
+J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1307.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_iI(\hat{\mathbf  x})^{-1} \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1286.png"/></picture>
+\]" src="form_1308.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_hessian:</code> it assumes <picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
+<code>mapping_piola_hessian:</code> it assumes <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J_{iI}(\hat{\mathbf x})
-\hat{\mathbf u}(\hat{\mathbf x})$" src="form_1287.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+\hat{\mathbf u}(\hat{\mathbf x})$" src="form_1309.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J_{iI}(\hat{\mathbf  x}) \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ1Eulerian.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ1Eulerian.html	2024-03-17 21:57:32.739168185 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ1Eulerian.html	2024-03-17 21:57:32.743168210 +0000
@@ -782,37 +782,37 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_contravariant:</code> maps a vector field on the reference cell to the physical cell through the Jacobian:  </p><p class="formulaDsp">
-<picture><source srcset="form_1258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})\hat{\mathbf  u}(\hat{\mathbf
 x}).
-\]" src="form_1258.png"/></picture>
+\]" src="form_1285.png"/></picture>
 </p>
 <p> In physics, this is usually referred to as the contravariant transformation. Mathematically, it is the push forward of a vector field.</p>
 <p class="endli"></p>
 </li>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of one-forms on the reference cell to a field of one-forms on the physical cell. (Theoretically this would refer to a DerivativeForm&lt;1,dim,1&gt; but we canonically identify this type with a <a class="el" href="classTensor.html">Tensor&lt;1,dim&gt;</a>). Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}\hat{\mathbf u}(\hat{\mathbf  x}).
-\]" src="form_1259.png"/></picture>
+\]" src="form_1286.png"/></picture>
 </p>
 <p> Gradients of scalar differentiable functions are transformed this way.</p>
 <p class="interli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})^{-T}\hat{\mathbf
 u}(\hat{\mathbf  x})
-\]" src="form_1260.png"/></picture>
+\]" src="form_1287.png"/></picture>
 </p>
 <p> because we assume that the mapping <picture><source srcset="form_85_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F_K$" src="form_85.png"/></picture> is always invertible, and consequently its Jacobian <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> is an invertible matrix.</p>
 <p class="endli"></p>
 </li>
 <li>
 <code>mapping_piola:</code> A field of <em>dim-1</em>-forms on the reference cell is also represented by a vector field, but again transforms differently, namely by the Piola transform  <p class="formulaDsp">
-<picture><source srcset="form_1261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf u(\mathbf x) = \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf x}) \hat{\mathbf  u}(\hat{\mathbf x}).
-\]" src="form_1261.png"/></picture>
+\]" src="form_1288.png"/></picture>
 </p>
  </li>
 </ul>
@@ -866,21 +866,21 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1262.png"/></picture> and <picture><source srcset="form_1263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1263.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
+<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1289.png"/></picture> and <picture><source srcset="form_1290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1290.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  T}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1264.png"/></picture>
+\]" src="form_1291.png"/></picture>
 </p>
 <p> Jacobians of spacedim-vector valued differentiable functions are transformed this way.</p>
 <p class="endli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  u}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1265.png"/></picture>
+\]" src="form_1292.png"/></picture>
 </p>
  </li>
 </ul>
@@ -937,35 +937,35 @@
 </div><div class="memdoc">
 <p>Transform a tensor field from the reference cell to the physical cell. These tensors are usually the Jacobians in the reference cell of vector fields that have been pulled back from the physical cell. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
-= J \hat{\mathbf  u}$" src="form_1266.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
+= J \hat{\mathbf  u}$" src="form_1293.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1267.png"/></picture>
+\]" src="form_1294.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
-J^{-T} \hat{\mathbf  u}$" src="form_1268.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+J^{-T} \hat{\mathbf  u}$" src="form_1295.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x})^{-T} \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1269.png"/></picture>
+\]" src="form_1296.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J(\hat{\mathbf x}) \hat{\mathbf
-u}(\hat{\mathbf x})$" src="form_1270.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+u}(\hat{\mathbf x})$" src="form_1297.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1271.png"/></picture>
+\]" src="form_1298.png"/></picture>
 </p>
  </li>
 </ul>
@@ -1024,21 +1024,21 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant_gradient:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1277_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1299_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) = \hat{\mathbf  T}_{iJK}(\hat{\mathbf  x})
-J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1277.png"/></picture>
+J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1299.png"/></picture>
 </p>
 <p>,</p>
 <p class="endli">where </p><p class="formulaDsp">
-<picture><source srcset="form_1278_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
+<picture><source srcset="form_1300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1278.png"/></picture>
+\]" src="form_1300.png"/></picture>
 </p>
  </li>
 </ul>
 <p>Hessians of spacedim-vector valued differentiable functions are transformed this way (After subtraction of the product of the derivative with the Jacobian gradient).</p>
 <p>In the case when dim=spacedim the previous formula reduces to </p><p class="formulaDsp">
-<picture><source srcset="form_1279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1279.png"/></picture>
+<picture><source srcset="form_1301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1301.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -1090,40 +1090,40 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1280_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
-\mathbf u_i$" src="form_1280.png"/></picture> and <picture><source srcset="form_1281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
-u}_I$" src="form_1281.png"/></picture>, with <picture><source srcset="form_1282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1282.png"/></picture> a vector field.</p>
+<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
+\mathbf u_i$" src="form_1302.png"/></picture> and <picture><source srcset="form_1303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
+u}_I$" src="form_1303.png"/></picture>, with <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1304.png"/></picture> a vector field.</p>
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
-= J_{iI} \hat{\mathbf  u}_I$" src="form_1283.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
+= J_{iI} \hat{\mathbf  u}_I$" src="form_1305.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_{iI}(\hat{\mathbf  x}) \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1284.png"/></picture>
+\]" src="form_1306.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
-J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1285.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
+J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1307.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_iI(\hat{\mathbf  x})^{-1} \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1286.png"/></picture>
+\]" src="form_1308.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_hessian:</code> it assumes <picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
+<code>mapping_piola_hessian:</code> it assumes <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J_{iI}(\hat{\mathbf x})
-\hat{\mathbf u}(\hat{\mathbf x})$" src="form_1287.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+\hat{\mathbf u}(\hat{\mathbf x})$" src="form_1309.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J_{iI}(\hat{\mathbf  x}) \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQCache.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQCache.html	2024-03-17 21:57:32.819168680 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQCache.html	2024-03-17 21:57:32.827168729 +0000
@@ -529,7 +529,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const std::function&lt; std::vector&lt; <a class="el" href="classPoint.html">Point</a>&lt; spacedim &gt; &gt;(const typename <a class="el" href="classTriangulation.html">Triangulation</a>&lt; dim, spacedim &gt;::cell_iterator &amp;)&gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>compute_points_on_cell</em></span>&#href_anchor"memdoc">
-<p>Initialize the data cache by letting the function given as an argument provide the mapping support points for all cells (on all levels) of the given triangulation. The function must return a vector of <code><a class="el" href="classPoint.html">Point</a>&lt;spacedim&gt;</code> whose length is the same as the size of the polynomial space, <picture><source srcset="form_1303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(p+1)^\text{dim}$" src="form_1303.png"/></picture>, where <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> is the polynomial degree of the mapping, and it must be in the order the mapping or <a class="el" href="classFE__Q.html">FE_Q</a> sort their points, i.e., all <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1304.png"/></picture> vertex points first, then the points on the lines, quads, and hexes according to the usual hierarchical numbering. No attempt is made to validate these points internally, except for the number of given points.</p>
+<p>Initialize the data cache by letting the function given as an argument provide the mapping support points for all cells (on all levels) of the given triangulation. The function must return a vector of <code><a class="el" href="classPoint.html">Point</a>&lt;spacedim&gt;</code> whose length is the same as the size of the polynomial space, <picture><source srcset="form_1316_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(p+1)^\text{dim}$" src="form_1316.png"/></picture>, where <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> is the polynomial degree of the mapping, and it must be in the order the mapping or <a class="el" href="classFE__Q.html">FE_Q</a> sort their points, i.e., all <picture><source srcset="form_1317_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1317.png"/></picture> vertex points first, then the points on the lines, quads, and hexes according to the usual hierarchical numbering. No attempt is made to validate these points internally, except for the number of given points.</p>
 <dl class="section note"><dt>Note</dt><dd>If multiple threads are enabled, this function will run in parallel, invoking the function passed in several times. Thus, in case <a class="el" href="classMultithreadInfo.html#href_anchor">MultithreadInfo::n_threads()</a>&gt;1, the user code must make sure that the function, typically a lambda, does not write into data shared with other threads.</dd>
 <dd>
 The cache is invalidated upon the signal <a class="el" href="structTriangulation_1_1Signals.html#href_anchor">Triangulation::Signals::any_change</a> of the underlying triangulation. </dd></dl>
@@ -1026,37 +1026,37 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_contravariant:</code> maps a vector field on the reference cell to the physical cell through the Jacobian:  </p><p class="formulaDsp">
-<picture><source srcset="form_1258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})\hat{\mathbf  u}(\hat{\mathbf
 x}).
-\]" src="form_1258.png"/></picture>
+\]" src="form_1285.png"/></picture>
 </p>
 <p> In physics, this is usually referred to as the contravariant transformation. Mathematically, it is the push forward of a vector field.</p>
 <p class="endli"></p>
 </li>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of one-forms on the reference cell to a field of one-forms on the physical cell. (Theoretically this would refer to a DerivativeForm&lt;1,dim,1&gt; but we canonically identify this type with a <a class="el" href="classTensor.html">Tensor&lt;1,dim&gt;</a>). Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}\hat{\mathbf u}(\hat{\mathbf  x}).
-\]" src="form_1259.png"/></picture>
+\]" src="form_1286.png"/></picture>
 </p>
 <p> Gradients of scalar differentiable functions are transformed this way.</p>
 <p class="interli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})^{-T}\hat{\mathbf
 u}(\hat{\mathbf  x})
-\]" src="form_1260.png"/></picture>
+\]" src="form_1287.png"/></picture>
 </p>
 <p> because we assume that the mapping <picture><source srcset="form_85_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F_K$" src="form_85.png"/></picture> is always invertible, and consequently its Jacobian <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> is an invertible matrix.</p>
 <p class="endli"></p>
 </li>
 <li>
 <code>mapping_piola:</code> A field of <em>dim-1</em>-forms on the reference cell is also represented by a vector field, but again transforms differently, namely by the Piola transform  <p class="formulaDsp">
-<picture><source srcset="form_1261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf u(\mathbf x) = \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf x}) \hat{\mathbf  u}(\hat{\mathbf x}).
-\]" src="form_1261.png"/></picture>
+\]" src="form_1288.png"/></picture>
 </p>
  </li>
 </ul>
@@ -1110,21 +1110,21 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1262.png"/></picture> and <picture><source srcset="form_1263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1263.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
+<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1289.png"/></picture> and <picture><source srcset="form_1290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1290.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  T}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1264.png"/></picture>
+\]" src="form_1291.png"/></picture>
 </p>
 <p> Jacobians of spacedim-vector valued differentiable functions are transformed this way.</p>
 <p class="endli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  u}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1265.png"/></picture>
+\]" src="form_1292.png"/></picture>
 </p>
  </li>
 </ul>
@@ -1181,35 +1181,35 @@
 </div><div class="memdoc">
 <p>Transform a tensor field from the reference cell to the physical cell. These tensors are usually the Jacobians in the reference cell of vector fields that have been pulled back from the physical cell. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
-= J \hat{\mathbf  u}$" src="form_1266.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
+= J \hat{\mathbf  u}$" src="form_1293.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1267.png"/></picture>
+\]" src="form_1294.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
-J^{-T} \hat{\mathbf  u}$" src="form_1268.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+J^{-T} \hat{\mathbf  u}$" src="form_1295.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x})^{-T} \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1269.png"/></picture>
+\]" src="form_1296.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J(\hat{\mathbf x}) \hat{\mathbf
-u}(\hat{\mathbf x})$" src="form_1270.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+u}(\hat{\mathbf x})$" src="form_1297.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1271.png"/></picture>
+\]" src="form_1298.png"/></picture>
 </p>
  </li>
 </ul>
@@ -1268,21 +1268,21 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant_gradient:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1277_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1299_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) = \hat{\mathbf  T}_{iJK}(\hat{\mathbf  x})
-J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1277.png"/></picture>
+J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1299.png"/></picture>
 </p>
 <p>,</p>
 <p class="endli">where </p><p class="formulaDsp">
-<picture><source srcset="form_1278_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
+<picture><source srcset="form_1300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1278.png"/></picture>
+\]" src="form_1300.png"/></picture>
 </p>
  </li>
 </ul>
 <p>Hessians of spacedim-vector valued differentiable functions are transformed this way (After subtraction of the product of the derivative with the Jacobian gradient).</p>
 <p>In the case when dim=spacedim the previous formula reduces to </p><p class="formulaDsp">
-<picture><source srcset="form_1279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1279.png"/></picture>
+<picture><source srcset="form_1301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1301.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -1334,40 +1334,40 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1280_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
-\mathbf u_i$" src="form_1280.png"/></picture> and <picture><source srcset="form_1281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
-u}_I$" src="form_1281.png"/></picture>, with <picture><source srcset="form_1282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1282.png"/></picture> a vector field.</p>
+<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
+\mathbf u_i$" src="form_1302.png"/></picture> and <picture><source srcset="form_1303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
+u}_I$" src="form_1303.png"/></picture>, with <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1304.png"/></picture> a vector field.</p>
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
-= J_{iI} \hat{\mathbf  u}_I$" src="form_1283.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
+= J_{iI} \hat{\mathbf  u}_I$" src="form_1305.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_{iI}(\hat{\mathbf  x}) \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1284.png"/></picture>
+\]" src="form_1306.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
-J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1285.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
+J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1307.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_iI(\hat{\mathbf  x})^{-1} \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1286.png"/></picture>
+\]" src="form_1308.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_hessian:</code> it assumes <picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQEulerian.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQEulerian.html	2024-03-17 21:57:32.907169223 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQEulerian.html	2024-03-17 21:57:32.907169223 +0000
@@ -813,37 +813,37 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_contravariant:</code> maps a vector field on the reference cell to the physical cell through the Jacobian:  </p><p class="formulaDsp">
-<picture><source srcset="form_1258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})\hat{\mathbf  u}(\hat{\mathbf
 x}).
-\]" src="form_1258.png"/></picture>
+\]" src="form_1285.png"/></picture>
 </p>
 <p> In physics, this is usually referred to as the contravariant transformation. Mathematically, it is the push forward of a vector field.</p>
 <p class="endli"></p>
 </li>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of one-forms on the reference cell to a field of one-forms on the physical cell. (Theoretically this would refer to a DerivativeForm&lt;1,dim,1&gt; but we canonically identify this type with a <a class="el" href="classTensor.html">Tensor&lt;1,dim&gt;</a>). Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}\hat{\mathbf u}(\hat{\mathbf  x}).
-\]" src="form_1259.png"/></picture>
+\]" src="form_1286.png"/></picture>
 </p>
 <p> Gradients of scalar differentiable functions are transformed this way.</p>
 <p class="interli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf u(\mathbf x) = J(\hat{\mathbf  x})^{-T}\hat{\mathbf
 u}(\hat{\mathbf  x})
-\]" src="form_1260.png"/></picture>
+\]" src="form_1287.png"/></picture>
 </p>
 <p> because we assume that the mapping <picture><source srcset="form_85_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F_K$" src="form_85.png"/></picture> is always invertible, and consequently its Jacobian <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> is an invertible matrix.</p>
 <p class="endli"></p>
 </li>
 <li>
 <code>mapping_piola:</code> A field of <em>dim-1</em>-forms on the reference cell is also represented by a vector field, but again transforms differently, namely by the Piola transform  <p class="formulaDsp">
-<picture><source srcset="form_1261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf u(\mathbf x) = \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf x}) \hat{\mathbf  u}(\hat{\mathbf x}).
-\]" src="form_1261.png"/></picture>
+\]" src="form_1288.png"/></picture>
 </p>
  </li>
 </ul>
@@ -897,21 +897,21 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1262.png"/></picture> and <picture><source srcset="form_1263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1263.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
+<p>Transform a field of differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T} = \nabla \mathbf u$" src="form_1289.png"/></picture> and <picture><source srcset="form_1290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf  T} = \hat \nabla \hat{\mathbf  u}$" src="form_1290.png"/></picture>, with <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> a vector field. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  T}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1264.png"/></picture>
+\]" src="form_1291.png"/></picture>
 </p>
 <p> Jacobians of spacedim-vector valued differentiable functions are transformed this way.</p>
 <p class="endli">In the case when dim=spacedim the previous formula reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_1265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) = \hat{\mathbf  u}(\hat{\mathbf  x})
                        J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1265.png"/></picture>
+\]" src="form_1292.png"/></picture>
 </p>
  </li>
 </ul>
@@ -968,35 +968,35 @@
 </div><div class="memdoc">
 <p>Transform a tensor field from the reference cell to the physical cell. These tensors are usually the Jacobians in the reference cell of vector fields that have been pulled back from the physical cell. The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
-= J \hat{\mathbf  u}$" src="form_1266.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_gradient:</code> it assumes <picture><source srcset="form_1293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x)
+= J \hat{\mathbf  u}$" src="form_1293.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1267.png"/></picture>
+\]" src="form_1294.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
-J^{-T} \hat{\mathbf  u}$" src="form_1268.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_gradient:</code> it assumes <picture><source srcset="form_1295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+J^{-T} \hat{\mathbf  u}$" src="form_1295.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 J(\hat{\mathbf  x})^{-T} \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1269.png"/></picture>
+\]" src="form_1296.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
+<code>mapping_piola_gradient:</code> it assumes <picture><source srcset="form_1297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J(\hat{\mathbf x}) \hat{\mathbf
-u}(\hat{\mathbf x})$" src="form_1270.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+u}(\hat{\mathbf x})$" src="form_1297.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J(\hat{\mathbf  x}) \hat{\mathbf  T}(\hat{\mathbf  x})
 J(\hat{\mathbf  x})^{-1}.
-\]" src="form_1271.png"/></picture>
+\]" src="form_1298.png"/></picture>
 </p>
  </li>
 </ul>
@@ -1055,21 +1055,21 @@
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
 <p class="startli"><code>mapping_covariant_gradient:</code> maps a field of forms on the reference cell to a field of forms on the physical cell. Mathematically, it is the pull back of the differential form  </p><p class="formulaDsp">
-<picture><source srcset="form_1277_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1299_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) = \hat{\mathbf  T}_{iJK}(\hat{\mathbf  x})
-J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1277.png"/></picture>
+J_{jJ}^{\dagger} J_{kK}^{\dagger}\]" src="form_1299.png"/></picture>
 </p>
 <p>,</p>
 <p class="endli">where </p><p class="formulaDsp">
-<picture><source srcset="form_1278_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
+<picture><source srcset="form_1300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ J^{\dagger} = J(\hat{\mathbf  x})(J(\hat{\mathbf  x})^{T}
 J(\hat{\mathbf  x}))^{-1}.
-\]" src="form_1278.png"/></picture>
+\]" src="form_1300.png"/></picture>
 </p>
  </li>
 </ul>
 <p>Hessians of spacedim-vector valued differentiable functions are transformed this way (After subtraction of the product of the derivative with the Jacobian gradient).</p>
 <p>In the case when dim=spacedim the previous formula reduces to </p><p class="formulaDsp">
-<picture><source srcset="form_1279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1279.png"/></picture>
+<picture><source srcset="form_1301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[J^{\dagger} = J^{-1}\]" src="form_1301.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -1121,40 +1121,40 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1280_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
-\mathbf u_i$" src="form_1280.png"/></picture> and <picture><source srcset="form_1281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
-u}_I$" src="form_1281.png"/></picture>, with <picture><source srcset="form_1282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1282.png"/></picture> a vector field.</p>
+<p>Transform a field of 3-differential forms from the reference cell to the physical cell. It is useful to think of <picture><source srcset="form_1302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}_{ijk} = D^2_{jk}
+\mathbf u_i$" src="form_1302.png"/></picture> and <picture><source srcset="form_1303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\hat T}_{IJK} = \hat D^2_{JK} \mathbf{\hat
+u}_I$" src="form_1303.png"/></picture>, with <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i$" src="form_1304.png"/></picture> a vector field.</p>
 <p>The mapping kinds currently implemented by derived classes are: </p><ul>
 <li>
-<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
-= J_{iI} \hat{\mathbf  u}_I$" src="form_1283.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_contravariant_hessian:</code> it assumes <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x)
+= J_{iI} \hat{\mathbf  u}_I$" src="form_1305.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_{iI}(\hat{\mathbf  x}) \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1284.png"/></picture>
+\]" src="form_1306.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
-J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1285.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<code>mapping_covariant_hessian:</code> it assumes <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
+J_{iI}^{-T} \hat{\mathbf  u}_I$" src="form_1307.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 J_iI(\hat{\mathbf  x})^{-1} \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
 J_{jJ}(\hat{\mathbf  x})^{-1} J_{kK}(\hat{\mathbf  x})^{-1}.
-\]" src="form_1286.png"/></picture>
+\]" src="form_1308.png"/></picture>
 </p>
  </li>
 <li>
-<code>mapping_piola_hessian:</code> it assumes <picture><source srcset="form_1287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
+<code>mapping_piola_hessian:</code> it assumes <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_i(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})} J_{iI}(\hat{\mathbf x})
-\hat{\mathbf u}(\hat{\mathbf x})$" src="form_1287.png"/></picture> so that  <p class="formulaDsp">
-<picture><source srcset="form_1288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+\hat{\mathbf u}(\hat{\mathbf x})$" src="form_1309.png"/></picture> so that  <p class="formulaDsp">
+<picture><source srcset="form_1310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf T_{ijk}(\mathbf x) =
 \frac{1}{\text{det}\;J(\hat{\mathbf x})}
 J_{iI}(\hat{\mathbf  x}) \hat{\mathbf  T}_{IJK}(\hat{\mathbf  x})
/usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ_1_1InternalData.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ_1_1InternalData.html	2024-03-17 21:57:32.947169470 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classMappingQ_1_1InternalData.html	2024-03-17 21:57:32.943169445 +0000
@@ -368,7 +368,7 @@
       </table>
 </div><div class="memdoc">
 <p>Number of shape functions. If this is a Q1 mapping, then it is simply the number of vertices per cell. However, since also derived classes use this class (e.g. the Mapping_Q() class), the number of shape functions may also be different.</p>
-<p>In general, it is <picture><source srcset="form_1303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(p+1)^\text{dim}$" src="form_1303.png"/></picture>, where <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> is the polynomial degree of the mapping. </p>
+<p>In general, it is <picture><source srcset="form_1316_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(p+1)^\text{dim}$" src="form_1316.png"/></picture>, where <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> is the polynomial degree of the mapping. </p>
 
 <p class="definition">Definition at line <a class="el" href="mapping__q_8h_source.html#href_anchor">382</a> of file <a class="el" href="mapping__q_8h_source.html">mapping_q.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classMatrixFreeOperators_1_1LaplaceOperator.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classMatrixFreeOperators_1_1LaplaceOperator.html	2024-03-17 21:57:33.007169840 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classMatrixFreeOperators_1_1LaplaceOperator.html	2024-03-17 21:57:33.011169865 +0000
@@ -231,8 +231,8 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> fe_degree, <a class="el" href="classint.html">int</a> n_q_points_1d = fe_degree + 1, <a class="el" href="classint.html">int</a> n_components = 1, <a class="el" href="classMatrixFreeOperators_1_1Base.html">typename</a> VectorType = LinearAlgebra::distributed::Vector&lt;double&gt;, <a class="el" href="classMatrixFreeOperators_1_1Base.html">typename</a> VectorizedArrayType = VectorizedArray&lt;typename VectorType::value_type&gt;&gt;<br />
-class MatrixFreeOperators::LaplaceOperator&lt; dim, fe_degree, n_q_points_1d, n_components, VectorType, VectorizedArrayType &gt;</div><p>This class implements the operation of the action of a Laplace matrix, namely <picture><source srcset="form_2003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ L_{ij} = \int_\Omega c(\mathbf x) \mathbf \nabla N_i(\mathbf x)
-\cdot \mathbf \nabla N_j(\mathbf x)\,d \mathbf x$" src="form_2003.png"/></picture>, where <picture><source srcset="form_2004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(\mathbf x)$" src="form_2004.png"/></picture> is the scalar heterogeneity coefficient.</p>
+class MatrixFreeOperators::LaplaceOperator&lt; dim, fe_degree, n_q_points_1d, n_components, VectorType, VectorizedArrayType &gt;</div><p>This class implements the operation of the action of a Laplace matrix, namely <picture><source srcset="form_2001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ L_{ij} = \int_\Omega c(\mathbf x) \mathbf \nabla N_i(\mathbf x)
+\cdot \mathbf \nabla N_j(\mathbf x)\,d \mathbf x$" src="form_2001.png"/></picture>, where <picture><source srcset="form_2002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(\mathbf x)$" src="form_2002.png"/></picture> is the scalar heterogeneity coefficient.</p>
 <p>Note that this class only supports the non-blocked vector variant of the <a class="el" href="classMatrixFreeOperators_1_1Base.html">Base</a> operator because only a single <a class="el" href="classFEEvaluation.html">FEEvaluation</a> object is used in the apply function. </p>
 
 <p class="definition">Definition at line <a class="el" href="operators_8h_source.html#href_anchor">870</a> of file <a class="el" href="operators_8h_source.html">operators.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1DiscreteFaceQuadratureGenerator.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1DiscreteFaceQuadratureGenerator.html	2024-03-17 21:57:33.103170434 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1DiscreteFaceQuadratureGenerator.html	2024-03-17 21:57:33.111170483 +0000
@@ -285,7 +285,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the quadrature rule for the region <picture><source srcset="form_2086_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) &lt; 0 \}$" src="form_2086.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>. </p>
+<p>Return the quadrature rule for the region <picture><source srcset="form_2077_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) &lt; 0 \}$" src="form_2077.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1774</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
@@ -315,7 +315,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the quadrature rule for the region <picture><source srcset="form_2087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) &gt; 0 \}$" src="form_2087.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>. </p>
+<p>Return the quadrature rule for the region <picture><source srcset="form_2078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) &gt; 0 \}$" src="form_2078.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1782</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
@@ -345,8 +345,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the quadrature rule for the region <picture><source srcset="form_2088_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) = 0 \}$" src="form_2088.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>The normal at the quadrature points will be parallel to <picture><source srcset="form_2085_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \psi$" src="form_2085.png"/></picture>. </dd></dl>
+<p>Return the quadrature rule for the region <picture><source srcset="form_2079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) = 0 \}$" src="form_2079.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>The normal at the quadrature points will be parallel to <picture><source srcset="form_2076_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \psi$" src="form_2076.png"/></picture>. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1791</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1DiscreteQuadratureGenerator.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1DiscreteQuadratureGenerator.html	2024-03-17 21:57:33.139170656 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1DiscreteQuadratureGenerator.html	2024-03-17 21:57:33.147170706 +0000
@@ -277,7 +277,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the quadrature rule for the region <picture><source srcset="form_2082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) &lt; 0 \}$" src="form_2082.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>. </p>
+<p>Return the quadrature rule for the region <picture><source srcset="form_2034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) &lt; 0 \}$" src="form_2034.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1668</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
@@ -307,7 +307,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the quadrature rule for the region <picture><source srcset="form_2083_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) &gt; 0 \}$" src="form_2083.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>. </p>
+<p>Return the quadrature rule for the region <picture><source srcset="form_2035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) &gt; 0 \}$" src="form_2035.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1677</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
@@ -337,8 +337,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the quadrature rule for the region <picture><source srcset="form_2084_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) = 0 \}$" src="form_2084.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>The normal at the quadrature points will be parallel to <picture><source srcset="form_2085_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \psi$" src="form_2085.png"/></picture>. </dd></dl>
+<p>Return the quadrature rule for the region <picture><source srcset="form_2036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) = 0 \}$" src="form_2036.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>The normal at the quadrature points will be parallel to <picture><source srcset="form_2076_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \psi$" src="form_2076.png"/></picture>. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1686</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FEImmersedSurfaceValues.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FEImmersedSurfaceValues.html	2024-03-17 21:57:33.239171274 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FEImmersedSurfaceValues.html	2024-03-17 21:57:33.239171274 +0000
@@ -506,7 +506,7 @@
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>quadrature_point</em></span>&#href_anchor"memdoc">
 <p>Returns the surface gradient of the shape function with index <code>function_no</code> at the quadrature point with index <code>quadrature_point</code>.</p>
-<p>The surface gradient is defined as the projection of the gradient to the tangent plane of the surface: <picture><source srcset="form_2009_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \nabla u - (n \cdot \nabla u) n $" src="form_2009.png"/></picture>, where <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> is the unit normal to the surface.</p>
+<p>The surface gradient is defined as the projection of the gradient to the tangent plane of the surface: <picture><source srcset="form_2025_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \nabla u - (n \cdot \nabla u) n $" src="form_2025.png"/></picture>, where <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> is the unit normal to the surface.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients | update_normal_vectors</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe__immersed__values_8cc_source.html#href_anchor">138</a> of file <a class="el" href="fe__immersed__values_8cc_source.html">fe_immersed_values.cc</a>.</p>
@@ -653,7 +653,7 @@
 <p>If the shape function is vector-valued, then this returns the only non- zero component. If the shape function has more than one non-zero component (i.e. it is not primitive), then throw an exception of type ExcShapeFunctionNotPrimitive. In that case, use the <a class="el" href="classFEValuesBase.html#href_anchor">shape_value_component()</a> function.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated. Note that this number runs from zero to dofs_per_cell, even in the case of an <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated. Note that this number runs from zero to dofs_per_cell, even in the case of an <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated</td></tr>
   </table>
   </dd>
@@ -692,7 +692,7 @@
 <p>Compute one vector component of the value of a shape function at a quadrature point. If the finite element is scalar, then only component zero is allowed and the return value equals that of the <a class="el" href="classFEValuesBase.html#href_anchor">shape_value()</a> function. If the finite element is vector valued but all shape functions are primitive (i.e. they are non-zero in only one component), then the value returned by <a class="el" href="classFEValuesBase.html#href_anchor">shape_value()</a> equals that of this function for exactly one component. This function is therefore only of greater interest if the shape function is not primitive, but then it is necessary since the other function cannot be used.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated.</td></tr>
     <tr><td class="paramname">component</td><td>vector component to be evaluated.</td></tr>
   </table>
@@ -729,7 +729,7 @@
 <p>The same holds for the arguments of this function as for the <a class="el" href="classFEValuesBase.html#href_anchor">shape_value()</a> function.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> to be evaluated.</td></tr>
+    <tr><td class="paramname">i</td><td>Number of the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> to be evaluated.</td></tr>
     <tr><td class="paramname">q_point</td><td>Number of the quadrature point at which function is to be evaluated.</td></tr>
   </table>
   </dd>
@@ -917,17 +917,17 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the values of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the <a class="el" href="#href_anchor">reinit()</a> function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1305.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x_q^K)$" src="form_1306.png"/></picture> where <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1307.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and the related <a class="el" href="classFEValuesBase.html#href_anchor">get_function_gradients()</a> function is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
+<p>Return the values of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the <a class="el" href="#href_anchor">reinit()</a> function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1249.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1250_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x_q^K)$" src="form_1250.png"/></picture> where <picture><source srcset="form_1251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1251.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and the related <a class="el" href="classFEValuesBase.html#href_anchor">get_function_gradients()</a> function is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
 <p>If the current cell is not active (i.e., it has children), then the finite element function is, strictly speaking, defined by shape functions that live on these child cells. Rather than evaluating the shape functions on the child cells, with the quadrature points defined on the current cell, this function first interpolates the finite element function to shape functions defined on the current cell, and then evaluates this interpolated function.</p>
 <p>This function may only be used if the finite element in use is a scalar one, i.e. has only one vector component. To get values of multi-component elements, there is another <a class="el" href="classFEValuesBase.html#href_anchor">get_function_values()</a> below, returning a vector of vectors of results.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">values</td><td>The values of the function specified by fe_function at the quadrature points of the current cell. The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the values of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the solution vector.</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">values</td><td>The values of the function specified by fe_function at the quadrature points of the current cell. The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the values of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the solution vector.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> will contain the value of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> will contain the value of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -959,7 +959,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_values()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> is a vector of values of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>values[q]</code> equals the number of components of the finite element, i.e. <code>values[q](c)</code> returns the value of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>values[q]</code> is a vector of values of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>values[q]</code> equals the number of components of the finite element, i.e. <code>values[q](c)</code> returns the value of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">2749</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1115,16 +1115,16 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the gradients of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the <a class="el" href="#href_anchor">reinit()</a> function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1305.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(\mathbf x_q^K)$" src="form_1308.png"/></picture> where <picture><source srcset="form_1307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1307.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and it is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
+<p>Return the gradients of a finite element function at the quadrature points of the current cell, face, or subface (selected the last time the <a class="el" href="#href_anchor">reinit()</a> function was called). That is, if the first argument <code>fe_function</code> is a vector of nodal values of a finite element function <picture><source srcset="form_1249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1249.png"/></picture> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> object, then the output vector (the second argument, <code>values</code>) is the vector of values <picture><source srcset="form_1252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(\mathbf x_q^K)$" src="form_1252.png"/></picture> where <picture><source srcset="form_1251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_q^K$" src="form_1251.png"/></picture> are the quadrature points on the current cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This function is first discussed in the Results section of <a class="el" href="step_4.html">step-4</a>, and it is also used in <a class="el" href="step_15.html">step-15</a> along with numerous other tutorial programs.</p>
 <p>This function may only be used if the finite element in use is a scalar one, i.e. has only one vector component. There is a corresponding function of the same name for vector-valued finite elements.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">gradients</td><td>The gradients of the function specified by fe_function at the quadrature points of the current cell. The gradients are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the gradients of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">gradients</td><td>The gradients of the function specified by fe_function at the quadrature points of the current cell. The gradients are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the gradients of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> will contain the gradient of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>gradients[q][d]</code> represents the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> will contain the gradient of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>gradients[q][d]</code> represents the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1156,7 +1156,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_gradients()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> is a vector of gradients of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>gradients[q]</code> equals the number of components of the finite element, i.e. <code>gradients[q][c]</code> returns the gradient of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>gradients[q][c][d]</code> is the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>gradients[q]</code> is a vector of gradients of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>gradients[q]</code> equals the number of components of the finite element, i.e. <code>gradients[q][c]</code> returns the gradient of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>gradients[q][c][d]</code> is the derivative in coordinate direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_gradients</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">2932</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1263,11 +1263,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">hessians</td><td>The Hessians of the function specified by fe_function at the quadrature points of the current cell. The Hessians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Hessians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">hessians</td><td>The Hessians of the function specified by fe_function at the quadrature points of the current cell. The Hessians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Hessians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> will contain the Hessian of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>hessians[q][i][j]</code> represents the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture>th component of the matrix of second derivatives at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> will contain the Hessian of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>hessians[q][i][j]</code> represents the <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture>th component of the matrix of second derivatives at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1304,7 +1304,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_hessians()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> is a vector of Hessians of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>hessians[q]</code> equals the number of components of the finite element, i.e. <code>hessians[q][c]</code> returns the Hessian of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>hessians[q][c][i][j]</code> is the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture>th component of the matrix of second derivatives of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>hessians[q]</code> is a vector of Hessians of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>hessians[q]</code> equals the number of components of the finite element, i.e. <code>hessians[q][c]</code> returns the Hessian of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>hessians[q][c][i][j]</code> is the <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture>th component of the matrix of second derivatives of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3041</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1411,11 +1411,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">laplacians</td><td>The Laplacians of the function specified by fe_function at the quadrature points of the current cell. The Laplacians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Laplacians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the input vector.</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">laplacians</td><td>The Laplacians of the function specified by fe_function at the quadrature points of the current cell. The Laplacians are computed in real space (as opposed to on the unit cell). The object is assume to already have the correct size. The data type stored by this output vector must be what you get when you multiply the Laplacians of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument). This happens to be equal to the type of the elements of the input vector.</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> will contain the Laplacian of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd>
+<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> will contain the Laplacian of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd>
 <dd>
 For each component of the output vector, there holds <code>laplacians[q]=trace(hessians[q])</code>, where <code>hessians</code> would be the output of the <a class="el" href="classFEValuesBase.html#href_anchor">get_function_hessians()</a> function.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a> object was last initialized.</dd>
@@ -1449,7 +1449,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_laplacians()</a>, but applied to multi-component (vector-valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> is a vector of Laplacians of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>laplacians[q]</code> equals the number of components of the finite element, i.e. <code>laplacians[q][c]</code> returns the Laplacian of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point.</dd>
+<dl class="section post"><dt>Postcondition</dt><dd><code>laplacians[q]</code> is a vector of Laplacians of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>laplacians[q]</code> equals the number of components of the finite element, i.e. <code>laplacians[q][c]</code> returns the Laplacian of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point.</dd>
 <dd>
 For each component of the output vector, there holds <code>laplacians[q][c]=trace(hessians[q][c])</code>, where <code>hessians</code> would be the output of the <a class="el" href="classFEValuesBase.html#href_anchor">get_function_hessians()</a> function.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_hessians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1596,11 +1596,11 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">fe_function</td><td>A vector of values that describes (globally) the finite element function that this function should evaluate at the quadrature points of the current cell.</td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">third_derivatives</td><td>The third derivatives of the function specified by fe_function at the quadrature points of the current cell. The third derivatives are computed in real space (as opposed to on the unit cell). The object is assumed to already have the correct size. The data type stored by this output vector must be what you get when you multiply the third derivatives of shape function times the type used to store the values of the unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">third_derivatives</td><td>The third derivatives of the function specified by fe_function at the quadrature points of the current cell. The third derivatives are computed in real space (as opposed to on the unit cell). The object is assumed to already have the correct size. The data type stored by this output vector must be what you get when you multiply the third derivatives of shape function times the type used to store the values of the unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of your finite element vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> (represented by the <code>fe_function</code> argument).</td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> will contain the third derivatives of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. <code>third_derivatives[q][i][j][k]</code> represents the <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1309.png"/></picture>th component of the 3rd order tensor of third derivatives at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> will contain the third derivatives of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. <code>third_derivatives[q][i][j][k]</code> represents the <picture><source srcset="form_1253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1253.png"/></picture>th component of the 3rd order tensor of third derivatives at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>The actual data type of the input vector may be either a <a class="el" href="classVector.html">Vector</a>&lt;T&gt;, <a class="el" href="classBlockVector.html">BlockVector</a>&lt;T&gt;, or one of the PETSc or Trilinos vector wrapper classes. It represents a global vector of DoF values associated with the <a class="el" href="classDoFHandler.html">DoFHandler</a> object with which this <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a> object was last initialized.</dd>
 <dd>
 For this function to work properly, the underlying <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_3rd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
@@ -1637,7 +1637,7 @@
 </table>
 </div><div class="memdoc">
 <p>This function does the same as the other <a class="el" href="classFEValuesBase.html#href_anchor">get_function_third_derivatives()</a>, but applied to multi-component (vector- valued) elements. The meaning of the arguments is as explained there.</p>
-<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> is a vector of third derivatives of the field described by fe_function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The size of the vector accessed by <code>third_derivatives[q]</code> equals the number of components of the finite element, i.e. <code>third_derivatives[q][c]</code> returns the third derivative of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Consequently, <code>third_derivatives[q][c][i][j][k]</code> is the <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1309.png"/></picture>th component of the tensor of third derivatives of the <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> of the current cell.</dd></dl>
+<dl class="section post"><dt>Postcondition</dt><dd><code>third_derivatives[q]</code> is a vector of third derivatives of the field described by fe_function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The size of the vector accessed by <code>third_derivatives[q]</code> equals the number of components of the finite element, i.e. <code>third_derivatives[q][c]</code> returns the third derivative of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Consequently, <code>third_derivatives[q][c][i][j][k]</code> is the <picture><source srcset="form_1253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1253.png"/></picture>th component of the tensor of third derivatives of the <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>th vector component of the vector field at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> of the current cell.</dd></dl>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_3rd_derivatives</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="fe_2fe__values_8cc_source.html#href_anchor">3268</a> of file <a class="el" href="fe_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -1956,7 +1956,7 @@
 </div><div class="memdoc">
 <p>Mapped quadrature weight. If this object refers to a volume evaluation (i.e. the derived class is of type <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a>), then this is the Jacobi determinant times the weight of the <code>q_point</code>th unit quadrature point.</p>
 <p>For surface evaluations (i.e. classes <a class="el" href="classFEFaceValues.html">FEFaceValues</a> or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a>), it is the mapped surface element times the weight of the quadrature point.</p>
-<p>You can think of the quantity returned by this function as the volume or surface element <picture><source srcset="form_1310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dx, ds$" src="form_1310.png"/></picture> in the integral that we implement here by quadrature.</p>
+<p>You can think of the quantity returned by this function as the volume or surface element <picture><source srcset="form_1254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dx, ds$" src="form_1254.png"/></picture> in the integral that we implement here by quadrature.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_JxW_values</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2009,7 +2009,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the Jacobian of the transformation at the specified quadrature point, i.e. <picture><source srcset="form_1289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1289.png"/></picture></p>
+<p>Return the Jacobian of the transformation at the specified quadrature point, i.e. <picture><source srcset="form_1255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{ij}=dx_i/d\hat x_j$" src="form_1255.png"/></picture></p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobians</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2063,7 +2063,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1311_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{jk}/d\hat x_i$" src="form_1311.png"/></picture>.</p>
+<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, i.e. <picture><source srcset="form_1256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{jk}/d\hat x_i$" src="form_1256.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_grads</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
 
 </div>
@@ -2117,7 +2117,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, pushed forward to the real cell coordinates, i.e. <picture><source srcset="form_1312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{iJ}/d\hat x_K (J_{jJ})^{-1} (J_{kK})^{-1}$" src="form_1312.png"/></picture>.</p>
+<p>Return the second derivative of the transformation from unit to real cell, i.e. the first derivative of the Jacobian, at the specified quadrature point, pushed forward to the real cell coordinates, i.e. <picture><source srcset="form_1257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_{ijk}=dJ_{iJ}/d\hat x_K (J_{jJ})^{-1} (J_{kK})^{-1}$" src="form_1257.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For this function to work properly, the underlying <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a>, <a class="el" href="classFEFaceValues.html">FEFaceValues</a>, or <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object on which you call it must have computed the information you are requesting. To do so, the <code>update_jacobian_pushed_forward_grads</code> flag must be an element of the list of UpdateFlags that you passed to the constructor of this object. See <a class="el" href="group__UpdateFlags.html">The interplay of UpdateFlags, Mapping, and FiniteElement in FEValues</a> for more information. </dd></dl>
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FEInterfaceValues.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FEInterfaceValues.html	2024-03-17 21:57:33.283171545 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FEInterfaceValues.html	2024-03-17 21:57:33.291171595 +0000
@@ -160,11 +160,11 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class NonMatching::FEInterfaceValues&lt; dim &gt;</div><p>This class is intended to facilitate assembling interface terms on faces in immersed (in the sense of cut) finite element methods. These types of terms occur mainly in cut discontinuous Galerkin methods. This class works analogously to <a class="el" href="classNonMatching_1_1FEValues.html">NonMatching::FEValues</a>. The domain is assumed to be described by a level set function, <picture><source srcset="form_2070_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi : \mathbb{R}^{dim} \to \mathbb{R}$" src="form_2070.png"/></picture>, and this class assumes that we want to integrate over two different regions of each face, <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_2072_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+class NonMatching::FEInterfaceValues&lt; dim &gt;</div><p>This class is intended to facilitate assembling interface terms on faces in immersed (in the sense of cut) finite element methods. These types of terms occur mainly in cut discontinuous Galerkin methods. This class works analogously to <a class="el" href="classNonMatching_1_1FEValues.html">NonMatching::FEValues</a>. The domain is assumed to be described by a level set function, <picture><source srcset="form_2027_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi : \mathbb{R}^{dim} \to \mathbb{R}$" src="form_2027.png"/></picture>, and this class assumes that we want to integrate over two different regions of each face, <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_2029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 N = \{x \in F : \psi(x) &lt; 0 \}, \\
 P = \{x \in F : \psi(x) &gt; 0 \},
-\]" src="form_2072.png"/></picture>
+\]" src="form_2029.png"/></picture>
 </p>
 <p> which we as before refer to as the "inside" and "outside" regions of the face. </p><div class="image">
 <object type="image/svg+xml" data="non_matching_fe_interface_values.svg" style="pointer-events: none;"></object>
@@ -198,7 +198,7 @@
 <div class="line">  }</div>
 <div class="ttc" id="aclassNonMatching_1_1FEInterfaceValues_html"><div class="ttname"><a href="classNonMatching_1_1FEInterfaceValues.html">NonMatching::FEInterfaceValues</a></div><div class="ttdef"><b>Definition</b> <a href="non__matching_2fe__values_8h_source.html#href_anchor">fe_values.h:438</a></div></div>
 <div class="ttc" id="aclassNonMatching_1_1FEInterfaceValues_html_a9ad40804b4c9f62a2f2d0efee7d33a22"><div class="ttname"><a href="#href_anchor">NonMatching::FEInterfaceValues::reinit</a></div><div class="ttdeci">void reinit(const CellIteratorType &amp;cell, const unsigned int face_no, const unsigned int sub_face_no, const CellNeighborIteratorType &amp;cell_neighbor, const unsigned int face_no_neighbor, const unsigned int sub_face_no_neighbor)</div></div>
-</div><!-- fragment --><p>To reduce the amount of work, the <a class="el" href="#href_anchor">reinit()</a> function of this class uses the <a class="el" href="classNonMatching_1_1MeshClassifier.html">MeshClassifier</a> passed to the constructor to check how the incoming cell relates to the level set function. The immersed quadrature rules are only generated if the cell is intersected. If the cell is completely inside or outside, it returns a cached <a class="el" href="classNonMatching_1_1FEInterfaceValues.html">FEInterfaceValues</a> object created with a quadrature over the reference cell: <picture><source srcset="form_2073_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim-1}$" src="form_2073.png"/></picture>. </p>
+</div><!-- fragment --><p>To reduce the amount of work, the <a class="el" href="#href_anchor">reinit()</a> function of this class uses the <a class="el" href="classNonMatching_1_1MeshClassifier.html">MeshClassifier</a> passed to the constructor to check how the incoming cell relates to the level set function. The immersed quadrature rules are only generated if the cell is intersected. If the cell is completely inside or outside, it returns a cached <a class="el" href="classNonMatching_1_1FEInterfaceValues.html">FEInterfaceValues</a> object created with a quadrature over the reference cell: <picture><source srcset="form_2030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim-1}$" src="form_2030.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8h_source.html#href_anchor">437</a> of file <a class="el" href="non__matching_2fe__values_8h_source.html">fe_values.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
@@ -352,7 +352,7 @@
   <table class="params">
     <tr><td class="paramname">mapping_collection</td><td>Collection of Mappings to be used. </td></tr>
     <tr><td class="paramname">fe_collection</td><td>Collection of FiniteElements to be used. </td></tr>
-    <tr><td class="paramname">q_collection</td><td>Collection of <a class="el" href="classQuadrature.html">Quadrature</a> rules over <picture><source srcset="form_2073_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim-1}$" src="form_2073.png"/></picture> that should be used when a face is not intersected and we do not need to generate immersed quadrature rules. </td></tr>
+    <tr><td class="paramname">q_collection</td><td>Collection of <a class="el" href="classQuadrature.html">Quadrature</a> rules over <picture><source srcset="form_2030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim-1}$" src="form_2030.png"/></picture> that should be used when a face is not intersected and we do not need to generate immersed quadrature rules. </td></tr>
     <tr><td class="paramname">q_collection_1d</td><td>Collection of 1-dimensional quadrature rules used to generate the immersed quadrature rules. See the <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> class. </td></tr>
     <tr><td class="paramname">mesh_classifier</td><td>Object used to determine when the immersed quadrature rules need to be generated. </td></tr>
     <tr><td class="paramname">region_update_flags</td><td>Struct storing UpdateFlags for the inside/outside region of the cell. </td></tr>
@@ -454,7 +454,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return an <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object reinitialized with a quadrature for the inside region of the cell: <picture><source srcset="form_2079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in K : \psi(x) &lt; 0 \}$" src="form_2079.png"/></picture>.</p>
+<p>Return an <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object reinitialized with a quadrature for the inside region of the cell: <picture><source srcset="form_2031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in K : \psi(x) &lt; 0 \}$" src="form_2031.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>If the quadrature rule over the region is empty, e.g. because the cell is completely located in the outside domain, the returned optional will not contain a value. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8cc_source.html#href_anchor">461</a> of file <a class="el" href="non__matching_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -477,7 +477,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return an <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object reinitialized with a quadrature for the outside region of the cell: <picture><source srcset="form_2080_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in K : \psi(x) &gt; 0 \}$" src="form_2080.png"/></picture>.</p>
+<p>Return an <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object reinitialized with a quadrature for the outside region of the cell: <picture><source srcset="form_2032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in K : \psi(x) &gt; 0 \}$" src="form_2032.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>If the quadrature rule over the region is empty, e.g. because the cell is completely located in the inside domain, the returned optional will not contain a value. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8cc_source.html#href_anchor">473</a> of file <a class="el" href="non__matching_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -508,7 +508,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Do work common to the constructors. The incoming QCollection should be quadratures integrating over <picture><source srcset="form_2073_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim-1}$" src="form_2073.png"/></picture>. These will be used on the non-intersected cells. </p>
+<p>Do work common to the constructors. The incoming QCollection should be quadratures integrating over <picture><source srcset="form_2030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim-1}$" src="form_2030.png"/></picture>. These will be used on the non-intersected cells. </p>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8cc_source.html#href_anchor">332</a> of file <a class="el" href="non__matching_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
 
@@ -762,7 +762,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>For each element in the FECollection passed to the constructor, this object contains an <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object created with a quadrature rule over the full reference cell: <picture><source srcset="form_2073_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim-1}$" src="form_2073.png"/></picture> and UpdateFlags for the inside region. Thus, these optionals should always contain a value.</p>
+<p>For each element in the FECollection passed to the constructor, this object contains an <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object created with a quadrature rule over the full reference cell: <picture><source srcset="form_2030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim-1}$" src="form_2030.png"/></picture> and UpdateFlags for the inside region. Thus, these optionals should always contain a value.</p>
 <p>When LocationToLevelSet of the cell is INSIDE (and we do not need to generate an immersed quadrature), we return the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object in this container corresponding to the cell's active_fe_index.</p>
 <p>This container is a std::deque, which is compatible with the <code><a class="el" href="classNonMatching_1_1FEInterfaceValues.html">FEInterfaceValues</a></code> class that does not have a copy-constructor. </p>
 
@@ -791,7 +791,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>For each element in the FECollection passed to the constructor, this object contains an <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object created with a quadrature rule over the full reference cell: <picture><source srcset="form_2073_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim-1}$" src="form_2073.png"/></picture> and UpdateFlags for the outside region. Thus, these optionals should always contain a value.</p>
+<p>For each element in the FECollection passed to the constructor, this object contains an <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> object created with a quadrature rule over the full reference cell: <picture><source srcset="form_2030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim-1}$" src="form_2030.png"/></picture> and UpdateFlags for the outside region. Thus, these optionals should always contain a value.</p>
 <p>When LocationToLevelSet of the cell is OUTSIDE (and we do not need to generate an immersed quadrature), we return the <a class="el" href="classFEValues.html">FEValues</a> object in this container corresponding to the cell's active_fe_index.</p>
 <p>This container is a std::deque, which is compatible with the <code><a class="el" href="classNonMatching_1_1FEInterfaceValues.html">FEInterfaceValues</a></code> class that does not have a copy-constructor. </p>
 
@@ -820,7 +820,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p><a class="el" href="classNonMatching_1_1FEInterfaceValues.html">FEInterfaceValues</a> object created with a quadrature rule integrating over the inside region, <picture><source srcset="form_2082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) &lt; 0 \}$" src="form_2082.png"/></picture>, that was generated in the last call to reinit(..). If the cell in the last call was not intersected or if 0 quadrature points were generated, this optional will not contain a value. </p>
+<p><a class="el" href="classNonMatching_1_1FEInterfaceValues.html">FEInterfaceValues</a> object created with a quadrature rule integrating over the inside region, <picture><source srcset="form_2034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) &lt; 0 \}$" src="form_2034.png"/></picture>, that was generated in the last call to reinit(..). If the cell in the last call was not intersected or if 0 quadrature points were generated, this optional will not contain a value. </p>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8h_source.html#href_anchor">668</a> of file <a class="el" href="non__matching_2fe__values_8h_source.html">fe_values.h</a>.</p>
 
@@ -847,7 +847,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p><a class="el" href="classNonMatching_1_1FEInterfaceValues.html">FEInterfaceValues</a> object created with a quadrature rule integrating over the outside region, <picture><source srcset="form_2083_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) &gt; 0 \}$" src="form_2083.png"/></picture>, that was generated in the last call to reinit(..). If the cell in the last call was not intersected or if 0 quadrature points were generated, this optional will not contain a value. </p>
+<p><a class="el" href="classNonMatching_1_1FEInterfaceValues.html">FEInterfaceValues</a> object created with a quadrature rule integrating over the outside region, <picture><source srcset="form_2035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) &gt; 0 \}$" src="form_2035.png"/></picture>, that was generated in the last call to reinit(..). If the cell in the last call was not intersected or if 0 quadrature points were generated, this optional will not contain a value. </p>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8h_source.html#href_anchor">677</a> of file <a class="el" href="non__matching_2fe__values_8h_source.html">fe_values.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FEValues.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FEValues.html	2024-03-17 21:57:33.331171843 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FEValues.html	2024-03-17 21:57:33.331171843 +0000
@@ -159,17 +159,17 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class NonMatching::FEValues&lt; dim &gt;</div><p>This class is intended to facilitate assembling in immersed (in the sense of cut) finite element methods when the domain is described by a level set function, <picture><source srcset="form_2070_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi : \mathbb{R}^{dim} \to \mathbb{R}$" src="form_2070.png"/></picture>. In this type of method, we typically need to integrate over 3 different regions of each cell, <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_2069_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+class NonMatching::FEValues&lt; dim &gt;</div><p>This class is intended to facilitate assembling in immersed (in the sense of cut) finite element methods when the domain is described by a level set function, <picture><source srcset="form_2027_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi : \mathbb{R}^{dim} \to \mathbb{R}$" src="form_2027.png"/></picture>. In this type of method, we typically need to integrate over 3 different regions of each cell, <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_2026_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 N = \{x \in K : \psi(x) &lt; 0 \}, \\
 P = \{x \in K : \psi(x) &gt; 0 \}, \\
 S = \{x \in K : \psi(x) = 0 \}.
-\]" src="form_2069.png"/></picture>
+\]" src="form_2026.png"/></picture>
 </p>
 <p> Thus we need quadrature rules for these 3 regions: </p><div class="image">
 <object type="image/svg+xml" data="immersed_quadratures.svg" style="pointer-events: none;"></object>
 </div>
-<p> As in the <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> class, we refer to <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture>, <picture><source srcset="form_175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_175.png"/></picture>, and <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> as the inside, outside, and surface regions. The constructor of this class takes a discrete level set function described by a <a class="el" href="classDoFHandler.html">DoFHandler</a> and a <a class="el" href="classVector.html">Vector</a>. When the <a class="el" href="#href_anchor">reinit()</a> function is called, the <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> will be called in the background to create these immersed quadrature rules. This class then creates <a class="el" href="classFEValues.html">FEValues</a> objects for the inside/outside regions and an <a class="el" href="classNonMatching_1_1FEImmersedSurfaceValues.html">FEImmersedSurfaceValues</a> object for the surface region. These objects can then be accessed through one of the functions: <a class="el" href="#href_anchor">get_inside_fe_values()</a>, <a class="el" href="#href_anchor">get_outside_fe_values()</a>, or <a class="el" href="#href_anchor">get_surface_fe_values()</a>. Since a cut between a cell and the domain can be arbitrarily small, the underlying algorithm may generate a quadrature rule with 0 points. This can, for example, happen if the relative size of the cut is similar to the floating-point accuracy. Since the FEValues-like objects are not allowed to contain 0 points, the object that get_inside/outside/surface_fe_values() returns is wrapped in a std_cxx17::optional. This requires us to check if the returned FEValues-like object contains a value before we use it: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classNonMatching_1_1FEValues.html">NonMatching::FEValues&lt;dim&gt;</a> fe_values(...);</div>
+<p> As in the <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> class, we refer to <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture>, <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_149.png"/></picture>, and <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> as the inside, outside, and surface regions. The constructor of this class takes a discrete level set function described by a <a class="el" href="classDoFHandler.html">DoFHandler</a> and a <a class="el" href="classVector.html">Vector</a>. When the <a class="el" href="#href_anchor">reinit()</a> function is called, the <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> will be called in the background to create these immersed quadrature rules. This class then creates <a class="el" href="classFEValues.html">FEValues</a> objects for the inside/outside regions and an <a class="el" href="classNonMatching_1_1FEImmersedSurfaceValues.html">FEImmersedSurfaceValues</a> object for the surface region. These objects can then be accessed through one of the functions: <a class="el" href="#href_anchor">get_inside_fe_values()</a>, <a class="el" href="#href_anchor">get_outside_fe_values()</a>, or <a class="el" href="#href_anchor">get_surface_fe_values()</a>. Since a cut between a cell and the domain can be arbitrarily small, the underlying algorithm may generate a quadrature rule with 0 points. This can, for example, happen if the relative size of the cut is similar to the floating-point accuracy. Since the FEValues-like objects are not allowed to contain 0 points, the object that get_inside/outside/surface_fe_values() returns is wrapped in a std_cxx17::optional. This requires us to check if the returned FEValues-like object contains a value before we use it: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classNonMatching_1_1FEValues.html">NonMatching::FEValues&lt;dim&gt;</a> fe_values(...);</div>
 <div class="line"> </div>
 <div class="line"><span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;cell : dof_handler.active_cell_iterators())</div>
 <div class="line"> {</div>
@@ -190,7 +190,7 @@
 <div class="line"> }</div>
 <div class="ttc" id="aclassNonMatching_1_1FEValues_html"><div class="ttname"><a href="classNonMatching_1_1FEValues.html">NonMatching::FEValues</a></div><div class="ttdef"><b>Definition</b> <a href="non__matching_2fe__values_8h_source.html#href_anchor">fe_values.h:145</a></div></div>
 <div class="ttc" id="aclassNonMatching_1_1FEValues_html_ae834e212add93e7680ee972806cbff60"><div class="ttname"><a href="#href_anchor">NonMatching::FEValues::fe_values_inside</a></div><div class="ttdeci">std_cxx17::optional&lt;::FEValues&lt; dim &gt; &gt; fe_values_inside</div><div class="ttdef"><b>Definition</b> <a href="non__matching_2fe__values_8h_source.html#href_anchor">fe_values.h:345</a></div></div>
-</div><!-- fragment --><p>Of course, it is somewhat expensive to generate the immersed quadrature rules and create <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a> objects with the generated quadratures. To reduce the amount of work, the <a class="el" href="#href_anchor">reinit()</a> function of this class uses the <a class="el" href="classNonMatching_1_1MeshClassifier.html">MeshClassifier</a> passed to the constructor to check how the incoming cell relates to the level set function. It only generates the immersed quadrature rules if the cell is intersected. If the cell is completely inside or outside, it returns a cached <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a> object created with a quadrature over the reference cell: <picture><source srcset="form_2071_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim}$" src="form_2071.png"/></picture>. </p>
+</div><!-- fragment --><p>Of course, it is somewhat expensive to generate the immersed quadrature rules and create <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a> objects with the generated quadratures. To reduce the amount of work, the <a class="el" href="#href_anchor">reinit()</a> function of this class uses the <a class="el" href="classNonMatching_1_1MeshClassifier.html">MeshClassifier</a> passed to the constructor to check how the incoming cell relates to the level set function. It only generates the immersed quadrature rules if the cell is intersected. If the cell is completely inside or outside, it returns a cached <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a> object created with a quadrature over the reference cell: <picture><source srcset="form_2028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim}$" src="form_2028.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8h_source.html#href_anchor">144</a> of file <a class="el" href="non__matching_2fe__values_8h_source.html">fe_values.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
@@ -341,7 +341,7 @@
   <table class="params">
     <tr><td class="paramname">mapping_collection</td><td>Collection of Mappings to be used. </td></tr>
     <tr><td class="paramname">fe_collection</td><td>Collection of FiniteElements to be used. </td></tr>
-    <tr><td class="paramname">q_collection</td><td>Collection of <a class="el" href="classQuadrature.html">Quadrature</a> rules over <picture><source srcset="form_2071_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim}$" src="form_2071.png"/></picture> that should be used when a cell is not intersected and we do not need to generate immersed quadrature rules. </td></tr>
+    <tr><td class="paramname">q_collection</td><td>Collection of <a class="el" href="classQuadrature.html">Quadrature</a> rules over <picture><source srcset="form_2028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim}$" src="form_2028.png"/></picture> that should be used when a cell is not intersected and we do not need to generate immersed quadrature rules. </td></tr>
     <tr><td class="paramname">q_collection_1d</td><td>Collection of 1-dimensional quadrature rules used to generate the immersed quadrature rules. See the <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> class. </td></tr>
     <tr><td class="paramname">mesh_classifier</td><td>Object used to determine when the immersed quadrature rules need to be generated. </td></tr>
     <tr><td class="paramname">region_update_flags</td><td>Struct storing UpdateFlags for the inside/outside/surface region of the cell. </td></tr>
@@ -398,7 +398,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return an <a class="el" href="classFEValues.html">FEValues</a> object reinitialized with a quadrature for the inside region of the cell: <picture><source srcset="form_2079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in K : \psi(x) &lt; 0 \}$" src="form_2079.png"/></picture>.</p>
+<p>Return an <a class="el" href="classFEValues.html">FEValues</a> object reinitialized with a quadrature for the inside region of the cell: <picture><source srcset="form_2031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in K : \psi(x) &lt; 0 \}$" src="form_2031.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>If the quadrature rule over the region is empty, e.g. because the cell is completely located in the outside domain, the returned optional will not contain a value. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8cc_source.html#href_anchor">241</a> of file <a class="el" href="non__matching_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -421,7 +421,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return an <a class="el" href="classFEValues.html">FEValues</a> object reinitialized with a quadrature for the outside region of the cell: <picture><source srcset="form_2080_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in K : \psi(x) &gt; 0 \}$" src="form_2080.png"/></picture>.</p>
+<p>Return an <a class="el" href="classFEValues.html">FEValues</a> object reinitialized with a quadrature for the outside region of the cell: <picture><source srcset="form_2032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in K : \psi(x) &gt; 0 \}$" src="form_2032.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>If the quadrature rule over the region is empty, e.g. because the cell is completely located in the inside domain, the returned optional will not contain a value. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8cc_source.html#href_anchor">253</a> of file <a class="el" href="non__matching_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -444,7 +444,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return an <a class="el" href="classFEValues.html">FEValues</a> object reinitialized with a quadrature for the surface region of the cell: <picture><source srcset="form_2081_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in K : \psi(x) = 0 \}$" src="form_2081.png"/></picture>.</p>
+<p>Return an <a class="el" href="classFEValues.html">FEValues</a> object reinitialized with a quadrature for the surface region of the cell: <picture><source srcset="form_2033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in K : \psi(x) = 0 \}$" src="form_2033.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>If the quadrature rule over the region is empty, e.g. because the cell is not intersected, the returned optional will not contain a value. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8cc_source.html#href_anchor">265</a> of file <a class="el" href="non__matching_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
@@ -475,7 +475,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Do work common to the constructors. The incoming QCollection should be quadratures integrating over <picture><source srcset="form_2071_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim}$" src="form_2071.png"/></picture>. These will be used on the non-intersected cells. </p>
+<p>Do work common to the constructors. The incoming QCollection should be quadratures integrating over <picture><source srcset="form_2028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim}$" src="form_2028.png"/></picture>. These will be used on the non-intersected cells. </p>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8cc_source.html#href_anchor">105</a> of file <a class="el" href="non__matching_2fe__values_8cc_source.html">fe_values.cc</a>.</p>
 
@@ -692,7 +692,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>For each element in the FECollection passed to the constructor, this object contains an <a class="el" href="classFEValues.html">FEValues</a> object created with a quadrature rule over the full reference cell: <picture><source srcset="form_2071_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim}$" src="form_2071.png"/></picture> and UpdateFlags for the inside region. Thus, these optionals should always contain a value.</p>
+<p>For each element in the FECollection passed to the constructor, this object contains an <a class="el" href="classFEValues.html">FEValues</a> object created with a quadrature rule over the full reference cell: <picture><source srcset="form_2028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim}$" src="form_2028.png"/></picture> and UpdateFlags for the inside region. Thus, these optionals should always contain a value.</p>
 <p>When LocationToLevelSet of the cell is INSIDE (and we do not need to generate an immersed quadrature), we return the <a class="el" href="classFEValues.html">FEValues</a> object in this container corresponding to the cell's active_fe_index.</p>
 <p>This container is a std::deque, which is compatible with the <code><a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a></code> class that does not have a copy-constructor. </p>
 
@@ -721,7 +721,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>For each element in the FECollection passed to the constructor, this object contains an <a class="el" href="classFEValues.html">FEValues</a> object created with a quadrature rule over the full reference cell: <picture><source srcset="form_2071_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim}$" src="form_2071.png"/></picture> and UpdateFlags for the outside region. Thus, these optionals should always contain a value.</p>
+<p>For each element in the FECollection passed to the constructor, this object contains an <a class="el" href="classFEValues.html">FEValues</a> object created with a quadrature rule over the full reference cell: <picture><source srcset="form_2028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^{dim}$" src="form_2028.png"/></picture> and UpdateFlags for the outside region. Thus, these optionals should always contain a value.</p>
 <p>When LocationToLevelSet of the cell is OUTSIDE (and we do not need to generate an immersed quadrature), we return the <a class="el" href="classFEValues.html">FEValues</a> object in this container corresponding to the cell's active_fe_index.</p>
 <p>This container is a std::deque, which is compatible with the <code><a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a></code> class that does not have a copy-constructor. </p>
 
@@ -750,7 +750,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p><a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a> object created with a quadrature rule integrating over the inside region, <picture><source srcset="form_2082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) &lt; 0 \}$" src="form_2082.png"/></picture>, that was generated in the last call to reinit(..). If the cell in the last call was not intersected or if 0 quadrature points were generated, this optional will not contain a value. </p>
+<p><a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a> object created with a quadrature rule integrating over the inside region, <picture><source srcset="form_2034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) &lt; 0 \}$" src="form_2034.png"/></picture>, that was generated in the last call to reinit(..). If the cell in the last call was not intersected or if 0 quadrature points were generated, this optional will not contain a value. </p>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8h_source.html#href_anchor">345</a> of file <a class="el" href="non__matching_2fe__values_8h_source.html">fe_values.h</a>.</p>
 
@@ -777,7 +777,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p><a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a> object created with a quadrature rule integrating over the outside region, <picture><source srcset="form_2083_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) &gt; 0 \}$" src="form_2083.png"/></picture>, that was generated in the last call to reinit(..). If the cell in the last call was not intersected or if 0 quadrature points were generated, this optional will not contain a value. </p>
+<p><a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a> object created with a quadrature rule integrating over the outside region, <picture><source srcset="form_2035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) &gt; 0 \}$" src="form_2035.png"/></picture>, that was generated in the last call to reinit(..). If the cell in the last call was not intersected or if 0 quadrature points were generated, this optional will not contain a value. </p>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8h_source.html#href_anchor">354</a> of file <a class="el" href="non__matching_2fe__values_8h_source.html">fe_values.h</a>.</p>
 
@@ -804,7 +804,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p><a class="el" href="classNonMatching_1_1FEImmersedSurfaceValues.html">FEImmersedSurfaceValues</a> object created with a quadrature rule integrating over the surface region, <picture><source srcset="form_2084_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) = 0 \}$" src="form_2084.png"/></picture>, that was generated in the last call to reinit(..). If the cell in the last call was not intersected or if 0 quadrature points were generated, this optional will not contain a value. </p>
+<p><a class="el" href="classNonMatching_1_1FEImmersedSurfaceValues.html">FEImmersedSurfaceValues</a> object created with a quadrature rule integrating over the surface region, <picture><source srcset="form_2036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) = 0 \}$" src="form_2036.png"/></picture>, that was generated in the last call to reinit(..). If the cell in the last call was not intersected or if 0 quadrature points were generated, this optional will not contain a value. </p>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8h_source.html#href_anchor">364</a> of file <a class="el" href="non__matching_2fe__values_8h_source.html">fe_values.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FaceQuadratureGenerator.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FaceQuadratureGenerator.html	2024-03-17 21:57:33.359172015 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FaceQuadratureGenerator.html	2024-03-17 21:57:33.367172064 +0000
@@ -133,16 +133,16 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class NonMatching::FaceQuadratureGenerator&lt; dim &gt;</div><p>This class creates immersed quadrature rules over a face, <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture>, of a <a class="el" href="classBoundingBox.html">BoundingBox</a>, when the domain is described by a level set function, <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_517.png"/></picture>.</p>
-<p>In the same way as in the <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> class, this class generates quadrature rules to integrate over 3 different regions of the face, <picture><source srcset="form_2066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F \subset \mathbb{R}^{dim}$" src="form_2066.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_2067_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+class NonMatching::FaceQuadratureGenerator&lt; dim &gt;</div><p>This class creates immersed quadrature rules over a face, <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture>, of a <a class="el" href="classBoundingBox.html">BoundingBox</a>, when the domain is described by a level set function, <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_526.png"/></picture>.</p>
+<p>In the same way as in the <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> class, this class generates quadrature rules to integrate over 3 different regions of the face, <picture><source srcset="form_2068_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F \subset \mathbb{R}^{dim}$" src="form_2068.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_2069_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 N = \{x \in F : \psi(x) &lt; 0 \}, \\
 P = \{x \in F : \psi(x) &gt; 0 \}, \\
 S = \{x \in F : \psi(x) = 0 \},
-\]" src="form_2067.png"/></picture>
+\]" src="form_2069.png"/></picture>
 </p>
-<p> which are again referred to as the "inside", <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture>, "outside", <picture><source srcset="form_175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_175.png"/></picture>, and "surface" region, <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>. These type of quadrature rules are in general needed in immersed discontinuous Galerkin methods.</p>
-<p>Under the hood, this class uses the <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> class to build these rules. This is done by restricting the dim-dimensional level set function to the face, thus creating a (dim-1)-dimensional level set function, <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture>. It then creates the (dim-1)-dimensional quadratures by calling <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> with <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture>. This means that what holds for the <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> class in general also holds for this class. In particular, if the 1d-quadrature that is used as base contains <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> points, the number of points will be proportional to <picture><source srcset="form_2064_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n^{dim-1}$" src="form_2064.png"/></picture> in the in the inside/outside quadratures and to <picture><source srcset="form_2068_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n^{dim-2}$" src="form_2068.png"/></picture> in the surface quadrature. </p>
+<p> which are again referred to as the "inside", <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture>, "outside", <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_149.png"/></picture>, and "surface" region, <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>. These type of quadrature rules are in general needed in immersed discontinuous Galerkin methods.</p>
+<p>Under the hood, this class uses the <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> class to build these rules. This is done by restricting the dim-dimensional level set function to the face, thus creating a (dim-1)-dimensional level set function, <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture>. It then creates the (dim-1)-dimensional quadratures by calling <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> with <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture>. This means that what holds for the <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> class in general also holds for this class. In particular, if the 1d-quadrature that is used as base contains <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> points, the number of points will be proportional to <picture><source srcset="form_2066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n^{dim-1}$" src="form_2066.png"/></picture> in the in the inside/outside quadratures and to <picture><source srcset="form_2070_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n^{dim-2}$" src="form_2070.png"/></picture> in the surface quadrature. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">292</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
@@ -239,7 +239,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the quadrature rule for the region <picture><source srcset="form_2086_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) &lt; 0 \}$" src="form_2086.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>. </p>
+<p>Return the quadrature rule for the region <picture><source srcset="form_2077_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) &lt; 0 \}$" src="form_2077.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1774</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
@@ -261,7 +261,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the quadrature rule for the region <picture><source srcset="form_2087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) &gt; 0 \}$" src="form_2087.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>. </p>
+<p>Return the quadrature rule for the region <picture><source srcset="form_2078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) &gt; 0 \}$" src="form_2078.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1782</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
@@ -283,8 +283,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the quadrature rule for the region <picture><source srcset="form_2088_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) = 0 \}$" src="form_2088.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>The normal at the quadrature points will be parallel to <picture><source srcset="form_2085_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \psi$" src="form_2085.png"/></picture>. </dd></dl>
+<p>Return the quadrature rule for the region <picture><source srcset="form_2079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) = 0 \}$" src="form_2079.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>The normal at the quadrature points will be parallel to <picture><source srcset="form_2076_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \psi$" src="form_2076.png"/></picture>. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1791</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FaceQuadratureGenerator_3_011_01_4.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FaceQuadratureGenerator_3_011_01_4.html	2024-03-17 21:57:33.391172213 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1FaceQuadratureGenerator_3_011_01_4.html	2024-03-17 21:57:33.395172237 +0000
@@ -220,7 +220,7 @@
 </div><div class="memdoc">
 
 <p></p>
-<p>Return the quadrature rule for the region <picture><source srcset="form_2086_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) &lt; 0 \}$" src="form_2086.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>.   </p>
+<p>Return the quadrature rule for the region <picture><source srcset="form_2077_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) &lt; 0 \}$" src="form_2077.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>.   </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1853</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
@@ -242,7 +242,7 @@
 </div><div class="memdoc">
 
 <p></p>
-<p>Return the quadrature rule for the region <picture><source srcset="form_2087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) &gt; 0 \}$" src="form_2087.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>.   </p>
+<p>Return the quadrature rule for the region <picture><source srcset="form_2078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) &gt; 0 \}$" src="form_2078.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>.   </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1860</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
@@ -262,7 +262,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the quadrature rule for the region <picture><source srcset="form_2088_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) = 0 \}$" src="form_2088.png"/></picture> where, <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>.</p>
+<p>Return the quadrature rule for the region <picture><source srcset="form_2079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) = 0 \}$" src="form_2079.png"/></picture> where, <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> is the face of the <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>.</p>
 <dl class="section note"><dt>Note</dt><dd>In 1d, this quadrature always contains 0 points. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1868</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
@@ -309,7 +309,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p><a class="el" href="classQuadrature.html">Quadrature</a> for the region <picture><source srcset="form_2086_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) &lt; 0 \}$" src="form_2086.png"/></picture>. Created in the last call to <a class="el" href="#href_anchor">generate()</a>. </p>
+<p><a class="el" href="classQuadrature.html">Quadrature</a> for the region <picture><source srcset="form_2077_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) &lt; 0 \}$" src="form_2077.png"/></picture>. Created in the last call to <a class="el" href="#href_anchor">generate()</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">455</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
 
@@ -334,7 +334,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p><a class="el" href="classQuadrature.html">Quadrature</a> for the region <picture><source srcset="form_2087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) &gt; 0 \}$" src="form_2087.png"/></picture>. Created in the last call to <a class="el" href="#href_anchor">generate()</a>. </p>
+<p><a class="el" href="classQuadrature.html">Quadrature</a> for the region <picture><source srcset="form_2078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) &gt; 0 \}$" src="form_2078.png"/></picture>. Created in the last call to <a class="el" href="#href_anchor">generate()</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">462</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
 
@@ -359,7 +359,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p><a class="el" href="classQuadrature.html">Quadrature</a> for the region <picture><source srcset="form_2088_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) = 0 \}$" src="form_2088.png"/></picture>. This quadrature always contains zero points in 1d. </p>
+<p><a class="el" href="classQuadrature.html">Quadrature</a> for the region <picture><source srcset="form_2079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in F : \psi(x) = 0 \}$" src="form_2079.png"/></picture>. This quadrature always contains zero points in 1d. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">469</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1ImmersedSurfaceQuadrature.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1ImmersedSurfaceQuadrature.html	2024-03-17 21:57:33.431172459 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1ImmersedSurfaceQuadrature.html	2024-03-17 21:57:33.439172509 +0000
@@ -207,41 +207,41 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim&gt;<br />
-class NonMatching::ImmersedSurfaceQuadrature&lt; dim, spacedim &gt;</div><p>This class defines a quadrature formula to integrate over the intersection between an oriented surface, <picture><source srcset="form_2026_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{S}$" src="form_2026.png"/></picture>, and a cell or face. The word "immersed" in the class name reflects that the surface may intersect the cell/face in an arbitrary way.</p>
-<p>The spacedim template parameter of this class is the dimension that the (spacedim-1)-dimensional surface is embedded in: <picture><source srcset="form_2027_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{S} \subset \mathbb{R}^{\text{spacedim}}$" src="form_2027.png"/></picture>. The dim parameter describes the dimension of the "object" that the surface intersects. That is, dim = spacedim corresponds to the surface intersecting a cell and dim = spacedim - 1 corresponds to the surface intersecting a face. The quadrature formula is described by a set of quadrature points, <picture><source srcset="form_2028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{x}_q \in \mathbb{R}^{\text{dim}}$" src="form_2028.png"/></picture>, weights, <picture><source srcset="form_274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_q$" src="form_274.png"/></picture>, and normalized surface normals, <picture><source srcset="form_2029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{n}_q \in \mathbb{R}^{\text{spacedim}}$" src="form_2029.png"/></picture>.</p>
-<p>Consider first the case dim = spacedim. We typically want to compute integrals in real space. A surface, <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>, intersecting a cell, <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, in real space can be mapped onto a surface, <picture><source srcset="form_2026_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{S}$" src="form_2026.png"/></picture>, intersecting the unit cell, <picture><source srcset="form_140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{K}$" src="form_140.png"/></picture>. Thus an integral over <picture><source srcset="form_2030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S\cap K$" src="form_2030.png"/></picture> in real space can be transformed to an integral over <picture><source srcset="form_2031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{S} \cap \hat{K}$" src="form_2031.png"/></picture> according to  </p><p class="formulaDsp">
-<picture><source srcset="form_2032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+class NonMatching::ImmersedSurfaceQuadrature&lt; dim, spacedim &gt;</div><p>This class defines a quadrature formula to integrate over the intersection between an oriented surface, <picture><source srcset="form_2037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{S}$" src="form_2037.png"/></picture>, and a cell or face. The word "immersed" in the class name reflects that the surface may intersect the cell/face in an arbitrary way.</p>
+<p>The spacedim template parameter of this class is the dimension that the (spacedim-1)-dimensional surface is embedded in: <picture><source srcset="form_2038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{S} \subset \mathbb{R}^{\text{spacedim}}$" src="form_2038.png"/></picture>. The dim parameter describes the dimension of the "object" that the surface intersects. That is, dim = spacedim corresponds to the surface intersecting a cell and dim = spacedim - 1 corresponds to the surface intersecting a face. The quadrature formula is described by a set of quadrature points, <picture><source srcset="form_2039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{x}_q \in \mathbb{R}^{\text{dim}}$" src="form_2039.png"/></picture>, weights, <picture><source srcset="form_274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_q$" src="form_274.png"/></picture>, and normalized surface normals, <picture><source srcset="form_2040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{n}_q \in \mathbb{R}^{\text{spacedim}}$" src="form_2040.png"/></picture>.</p>
+<p>Consider first the case dim = spacedim. We typically want to compute integrals in real space. A surface, <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>, intersecting a cell, <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, in real space can be mapped onto a surface, <picture><source srcset="form_2037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{S}$" src="form_2037.png"/></picture>, intersecting the unit cell, <picture><source srcset="form_114_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{K}$" src="form_114.png"/></picture>. Thus an integral over <picture><source srcset="form_2041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S\cap K$" src="form_2041.png"/></picture> in real space can be transformed to an integral over <picture><source srcset="form_2042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{S} \cap \hat{K}$" src="form_2042.png"/></picture> according to  </p><p class="formulaDsp">
+<picture><source srcset="form_2043_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_{S\cap K} f dS =
 \int_{S\cap K} f |d\bar{S}| =
 \int_{\hat{S}\cap\hat{K}} f \circ F_{K} \det(J) |\left( J^{-1} \right
 )^T d\hat{S}|,
-\]" src="form_2032.png"/></picture>
+\]" src="form_2043.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_K$" src="form_2033.png"/></picture> is the mapping from reference to real space and <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> is its Jacobian matrix. This transformation is possible since the continuous surface elements are vectors: <picture><source srcset="form_2034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\bar{S}, d\hat{S} \in \mathbb{R}^{spacedim}$" src="form_2034.png"/></picture>, which are parallel to the normals of <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> and <picture><source srcset="form_2026_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{S}$" src="form_2026.png"/></picture>. That is, the normal is needed to do the transformation. Thus, in addition to storing points and weights, this quadrature stores also the normalized normal for each quadrature point. This can be viewed as storing a discrete surface element,  </p><p class="formulaDsp">
-<picture><source srcset="form_2035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_2044_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_K$" src="form_2044.png"/></picture> is the mapping from reference to real space and <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> is its Jacobian matrix. This transformation is possible since the continuous surface elements are vectors: <picture><source srcset="form_2045_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\bar{S}, d\hat{S} \in \mathbb{R}^{spacedim}$" src="form_2045.png"/></picture>, which are parallel to the normals of <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> and <picture><source srcset="form_2037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{S}$" src="form_2037.png"/></picture>. That is, the normal is needed to do the transformation. Thus, in addition to storing points and weights, this quadrature stores also the normalized normal for each quadrature point. This can be viewed as storing a discrete surface element,  </p><p class="formulaDsp">
+<picture><source srcset="form_2046_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \Delta \hat{S}_q \dealcoloneq w_q \hat{n}_q \approx d\hat{S}(\hat{x}_q),
-\]" src="form_2035.png"/></picture>
+\]" src="form_2046.png"/></picture>
 </p>
 <p> for each quadrature point. The surface integral in real space would then be approximated as  </p><p class="formulaDsp">
-<picture><source srcset="form_2036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2047_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_{S\cap K} f dS \approx
 \sum_{q} f \left(F_{K}(\hat{x}_{q}) \right) \det(J_q)
 |\left( J_q^{-1} \right)^T \hat{n}_q| w_q.
-\]" src="form_2036.png"/></picture>
+\]" src="form_2047.png"/></picture>
 </p>
 <div class="image">
 <object type="image/svg+xml" data="immersed_surface_quadrature.svg" style="pointer-events: none;"></object>
 </div>
-<p>When dim = spacedim - 1, this class represents a (spacedim-2)-dimensional integral. That is, if spacedim = 3 we have a line integral immersed in a face. Let <picture><source srcset="form_2037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{r}(t)$" src="form_2037.png"/></picture>, <picture><source srcset="form_2038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t \in [0,T]$" src="form_2038.png"/></picture> be an arc-length parameterizations of <picture><source srcset="form_2039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{F}\cap \hat{S}$" src="form_2039.png"/></picture>, i.e., the part of the surface that intersects the face in reference space. This means that <picture><source srcset="form_2040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{r}(t) = F_K(\hat{r}(t))$" src="form_2040.png"/></picture> is a parameterization of <picture><source srcset="form_2041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S\cap F$" src="form_2041.png"/></picture>. The transformation of the line integral now reads  </p><p class="formulaDsp">
-<picture><source srcset="form_2042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>When dim = spacedim - 1, this class represents a (spacedim-2)-dimensional integral. That is, if spacedim = 3 we have a line integral immersed in a face. Let <picture><source srcset="form_2048_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{r}(t)$" src="form_2048.png"/></picture>, <picture><source srcset="form_2049_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t \in [0,T]$" src="form_2049.png"/></picture> be an arc-length parameterizations of <picture><source srcset="form_2050_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{F}\cap \hat{S}$" src="form_2050.png"/></picture>, i.e., the part of the surface that intersects the face in reference space. This means that <picture><source srcset="form_2051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{r}(t) = F_K(\hat{r}(t))$" src="form_2051.png"/></picture> is a parameterization of <picture><source srcset="form_2052_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S\cap F$" src="form_2052.png"/></picture>. The transformation of the line integral now reads  </p><p class="formulaDsp">
+<picture><source srcset="form_2053_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_{S\cap F} f dr
 = \int_{0}^T f(\bar{r}(t)) \left \|\frac{d\bar{r}}{dt} \right \| dt
 = \int_{0}^T f(F_K(\hat{r}(t))) \left \| J \frac{d\hat{r}}{dt} \right \| dt
 \approx \sum_{q} f \left(F_{K}(\hat{x}_{q}) \right) \|J(\hat{x}_q)
 \hat{t}_q \| w_q,
-\]" src="form_2042.png"/></picture>
+\]" src="form_2053.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2043_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{t}_q = \frac{d\hat{r}}{dt}(x_q) $" src="form_2043.png"/></picture> is the tangent to the curve at <picture><source srcset="form_2044_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{x}_q$" src="form_2044.png"/></picture>. This tangent can also be computed as <picture><source srcset="form_2045_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_q = \hat{n}_q \times \hat{n}_F / \| \hat{n}_q \times \hat{n}_F \|$" src="form_2045.png"/></picture> where <picture><source srcset="form_2046_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{n}_F$" src="form_2046.png"/></picture> is the face normal. It would be possible to compute the tangent by only knowing the normal to the curve in the face plane (i.e. the dim-dimensional normal). However, when these quadratures are used, the weak form typically involves the so-called conormal, which can not be computed without knowing the surface normal in <picture><source srcset="form_2047_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^{\text{spacedim}}$" src="form_2047.png"/></picture>. The conormal is the unit vector parallel to the projection of the face normal into the surface plane. This is the same as the normalized <a class="el" href="DEALGlossary.html#href_anchor">boundary form</a>. </p>
+<p> where <picture><source srcset="form_2054_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{t}_q = \frac{d\hat{r}}{dt}(x_q) $" src="form_2054.png"/></picture> is the tangent to the curve at <picture><source srcset="form_2055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{x}_q$" src="form_2055.png"/></picture>. This tangent can also be computed as <picture><source srcset="form_2056_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_q = \hat{n}_q \times \hat{n}_F / \| \hat{n}_q \times \hat{n}_F \|$" src="form_2056.png"/></picture> where <picture><source srcset="form_2057_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{n}_F$" src="form_2057.png"/></picture> is the face normal. It would be possible to compute the tangent by only knowing the normal to the curve in the face plane (i.e. the dim-dimensional normal). However, when these quadratures are used, the weak form typically involves the so-called conormal, which can not be computed without knowing the surface normal in <picture><source srcset="form_2058_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^{\text{spacedim}}$" src="form_2058.png"/></picture>. The conormal is the unit vector parallel to the projection of the face normal into the surface plane. This is the same as the normalized <a class="el" href="DEALGlossary.html#href_anchor">boundary form</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="immersed__surface__quadrature_8h_source.html#href_anchor">107</a> of file <a class="el" href="immersed__surface__quadrature_8h_source.html">immersed_surface_quadrature.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1QuadratureGenerator.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1QuadratureGenerator.html	2024-03-17 21:57:33.467172682 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1QuadratureGenerator.html	2024-03-17 21:57:33.471172707 +0000
@@ -131,24 +131,24 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class NonMatching::QuadratureGenerator&lt; dim &gt;</div><p>This class creates immersed quadrature rules over a <a class="el" href="classBoundingBox.html">BoundingBox</a>, <picture><source srcset="form_2060_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B \subset \mathbb{R}^{dim}$" src="form_2060.png"/></picture>, when the domain is described by a level set function, <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_517.png"/></picture>.</p>
+class NonMatching::QuadratureGenerator&lt; dim &gt;</div><p>This class creates immersed quadrature rules over a <a class="el" href="classBoundingBox.html">BoundingBox</a>, <picture><source srcset="form_2062_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B \subset \mathbb{R}^{dim}$" src="form_2062.png"/></picture>, when the domain is described by a level set function, <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_526.png"/></picture>.</p>
 <p>This class creates quadrature rules for the intersections between the box and the three different regions defined by the level set function. That is, it creates quadrature rules to integrate over the following regions  </p><p class="formulaDsp">
-<picture><source srcset="form_2061_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2063_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 N = \{x \in B : \psi(x) &lt; 0 \}, \\
 P = \{x \in B : \psi(x) &gt; 0 \}, \\
 S = \{x \in B : \psi(x) = 0 \}.
-\]" src="form_2061.png"/></picture>
+\]" src="form_2063.png"/></picture>
 </p>
  <div class="image">
 <object type="image/svg+xml" data="immersed_quadratures.svg" style="pointer-events: none;"></object>
 </div>
-<p>When working with level set functions, the most common is to describe a domain, <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, as  </p><p class="formulaDsp">
-<picture><source srcset="form_2062_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>When working with level set functions, the most common is to describe a domain, <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, as  </p><p class="formulaDsp">
+<picture><source srcset="form_2064_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \Omega = \{ x \in \mathbb{R}^{dim} : \psi(x) &lt; 0 \}.
-\]" src="form_2062.png"/></picture>
+\]" src="form_2064.png"/></picture>
 </p>
-<p> Given this, we shall use the name convention that <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> is the "inside" region (i.e. inside <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>), <picture><source srcset="form_175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_175.png"/></picture> is the "outside" region and <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> is the "surface" region. The "inside" and "outside" quadratures will also be referred to as the "bulk"-quadratures.</p>
-<p>The underlying algorithm use a 1-dimensional quadrature rule as base for creating the immersed quadrature rules. Gauss-Legendre quadrature (<a class="el" href="classQGauss.html">QGauss</a>) is recommended. The constructor takes an hp::QCollection&lt;1&gt;. One can select which 1d-quadrature in the collection should be used through the set_1d_quadrature() function. The number of quadrature points in the constructed quadratures will vary depending on the level set function. More quadrature points will be created if the intersection is "bad", for example, if the zero-contour has a high curvature compared to the size of the box. However, if the number of points in the 1d quadrature is <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> the number of points will be proportional to <picture><source srcset="form_2063_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n^{dim}$" src="form_2063.png"/></picture> in the bulk quadratures and to <picture><source srcset="form_2064_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n^{dim-1}$" src="form_2064.png"/></picture> in the surface quadrature. For example, in the 2d-example in the above figure, there are 2 points in the 1d-quadrature. If the 1d-quadrature is a Gauss-Legendre quadrature and the grid has size <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>, the immersed quadratures typically give global errors proportional to <picture><source srcset="form_2065_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{2n}$" src="form_2065.png"/></picture>, both for the bulk and surface integrals. If the 1d-quadrature has positive weights, the weights of the immersed quadratures will also be positive.</p>
+<p> Given this, we shall use the name convention that <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> is the "inside" region (i.e. inside <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>), <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_149.png"/></picture> is the "outside" region and <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> is the "surface" region. The "inside" and "outside" quadratures will also be referred to as the "bulk"-quadratures.</p>
+<p>The underlying algorithm use a 1-dimensional quadrature rule as base for creating the immersed quadrature rules. Gauss-Legendre quadrature (<a class="el" href="classQGauss.html">QGauss</a>) is recommended. The constructor takes an hp::QCollection&lt;1&gt;. One can select which 1d-quadrature in the collection should be used through the set_1d_quadrature() function. The number of quadrature points in the constructed quadratures will vary depending on the level set function. More quadrature points will be created if the intersection is "bad", for example, if the zero-contour has a high curvature compared to the size of the box. However, if the number of points in the 1d quadrature is <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> the number of points will be proportional to <picture><source srcset="form_2065_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n^{dim}$" src="form_2065.png"/></picture> in the bulk quadratures and to <picture><source srcset="form_2066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n^{dim-1}$" src="form_2066.png"/></picture> in the surface quadrature. For example, in the 2d-example in the above figure, there are 2 points in the 1d-quadrature. If the 1d-quadrature is a Gauss-Legendre quadrature and the grid has size <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>, the immersed quadratures typically give global errors proportional to <picture><source srcset="form_2067_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{2n}$" src="form_2067.png"/></picture>, both for the bulk and surface integrals. If the 1d-quadrature has positive weights, the weights of the immersed quadratures will also be positive.</p>
 <p>A detailed description of the underlying algorithm can be found in "High-Order %Quadrature Methods for Implicitly Defined Surfaces and
 Volumes in Hyperrectangles, R. I. Saye, SIAM J. Sci. Comput., 37(2), &lt;a
 href="<a href="http://www.dx.doi.org/10.1137/140966290">http://www.dx.doi.org/10.1137/140966290</a>"&gt;
@@ -244,7 +244,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the quadrature rule for the region <picture><source srcset="form_2082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) &lt; 0 \}$" src="form_2082.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>. </p>
+<p>Return the quadrature rule for the region <picture><source srcset="form_2034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) &lt; 0 \}$" src="form_2034.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1668</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
@@ -266,7 +266,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the quadrature rule for the region <picture><source srcset="form_2083_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) &gt; 0 \}$" src="form_2083.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>. </p>
+<p>Return the quadrature rule for the region <picture><source srcset="form_2035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) &gt; 0 \}$" src="form_2035.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1677</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
@@ -288,8 +288,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the quadrature rule for the region <picture><source srcset="form_2084_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) = 0 \}$" src="form_2084.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>The normal at the quadrature points will be parallel to <picture><source srcset="form_2085_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \psi$" src="form_2085.png"/></picture>. </dd></dl>
+<p>Return the quadrature rule for the region <picture><source srcset="form_2036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) = 0 \}$" src="form_2036.png"/></picture> created in the previous call to <a class="el" href="#href_anchor">generate()</a>. Here, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is <a class="el" href="classBoundingBox.html">BoundingBox</a> passed to <a class="el" href="#href_anchor">generate()</a>.</p>
+<dl class="section note"><dt>Note</dt><dd>The normal at the quadrature points will be parallel to <picture><source srcset="form_2076_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \psi$" src="form_2076.png"/></picture>. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1686</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1DiscreteQuadratureGeneratorImplementation_1_1RefSpaceFEFieldFunction.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1DiscreteQuadratureGeneratorImplementation_1_1RefSpaceFEFieldFunction.html	2024-03-17 21:57:33.523173028 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1DiscreteQuadratureGeneratorImplementation_1_1RefSpaceFEFieldFunction.html	2024-03-17 21:57:33.527173053 +0000
@@ -233,7 +233,7 @@
 <p>where <picture><source srcset="form_1224_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_j$" src="form_1224.png"/></picture> are the local solution values and <picture><source srcset="form_2710_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\phi}_j(\hat(x))$" src="form_2710.png"/></picture> are the local reference space shape functions. The gradient and Hessian of this function are thus derivatives with respect to the reference space coordinates, <picture><source srcset="form_2711_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{x}_0, \hat{x}_1, \ldots$" src="form_2711.png"/></picture>.</p>
 <p>Note that this class is similar to FEFieldFunction, but that FEFieldFunction implements the following function on a given cell, <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>,</p>
 <p><picture><source srcset="form_2712_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x) = \sum_{j=0}^{n-1} f_j \hat{\phi}_j(F_K^{-1}(x))$" src="form_2712.png"/></picture>,</p>
-<p>which has the same coefficients but uses real space basis functions. Here, <picture><source srcset="form_2033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_K$" src="form_2033.png"/></picture> is the mapping from the reference cell to the real cell.</p>
+<p>which has the same coefficients but uses real space basis functions. Here, <picture><source srcset="form_2044_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_K$" src="form_2044.png"/></picture> is the mapping from the reference cell to the real cell.</p>
 <p>Before calling the value/gradient/hessian function, the set_active_cell function must be called to specify which cell the function should be evaluated on. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1312</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QGenerator.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QGenerator.html	2024-03-17 21:57:33.563173275 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QGenerator.html	2024-03-17 21:57:33.567173300 +0000
@@ -150,20 +150,20 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim&gt;<br />
 class NonMatching::internal::QuadratureGeneratorImplementation::QGenerator&lt; dim, spacedim &gt;</div><p>This class implements the Saye-algorithm cited in the documentation of the <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> class.</p>
-<p>The generate function takes a number of <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture>-dimensional level set functions, <picture><source srcset="form_2096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_i$" src="form_2096.png"/></picture>, and a <a class="el" href="classBoundingBox.html">BoundingBox&lt;dim&gt;</a>, and builds a partitioning of quadratures, as defined in documentation of the <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a> class. That is, this class builds an object of type QPartitioning&lt;dim&gt;.</p>
-<p>If all <picture><source srcset="form_2096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_i$" src="form_2096.png"/></picture> passed to generate can be determined to be positive or negative definite, the <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a> will consist of a single quadrature forming a tensor product.</p>
-<p>If this is not the case, the algorithm uses recursion over the spatial dimension. The spacedim template parameter denotes the dimension we started with and dim denotes on what level we are in the recursion. That is, we first construct a <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a>&lt;dim - 1&gt; and then build the higher dimensional quadratures from these. What we in the end actually want is a spacedim-dimensional partitioning of quadratures, for a single level set function, <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_517.png"/></picture>.</p>
-<p>The algorithm is based on the implicit function theorem. Starting with a single level set function, <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_517.png"/></picture>, we try to find a direction <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>, such that</p>
-<p><picture><source srcset="form_2074_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\frac{\partial \psi}{\partial x_i}| &gt; 0$" src="form_2074.png"/></picture>.</p>
+<p>The generate function takes a number of <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture>-dimensional level set functions, <picture><source srcset="form_2087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_i$" src="form_2087.png"/></picture>, and a <a class="el" href="classBoundingBox.html">BoundingBox&lt;dim&gt;</a>, and builds a partitioning of quadratures, as defined in documentation of the <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a> class. That is, this class builds an object of type QPartitioning&lt;dim&gt;.</p>
+<p>If all <picture><source srcset="form_2087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_i$" src="form_2087.png"/></picture> passed to generate can be determined to be positive or negative definite, the <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a> will consist of a single quadrature forming a tensor product.</p>
+<p>If this is not the case, the algorithm uses recursion over the spatial dimension. The spacedim template parameter denotes the dimension we started with and dim denotes on what level we are in the recursion. That is, we first construct a <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a>&lt;dim - 1&gt; and then build the higher dimensional quadratures from these. What we in the end actually want is a spacedim-dimensional partitioning of quadratures, for a single level set function, <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_526.png"/></picture>.</p>
+<p>The algorithm is based on the implicit function theorem. Starting with a single level set function, <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_526.png"/></picture>, we try to find a direction <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>, such that</p>
+<p><picture><source srcset="form_2071_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\frac{\partial \psi}{\partial x_i}| &gt; 0$" src="form_2071.png"/></picture>.</p>
 <p>throughout the whole box. This means that the zero-contour of the level set function can be parameterized by an implicit function</p>
-<p><picture><source srcset="form_2122_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H = H(x_0, ..., x_{i-1}, x_{i+1}, ..., x_{dim-1})$" src="form_2122.png"/></picture>,</p>
+<p><picture><source srcset="form_2113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H = H(x_0, ..., x_{i-1}, x_{i+1}, ..., x_{dim-1})$" src="form_2113.png"/></picture>,</p>
 <p>so that</p>
-<p><picture><source srcset="form_2123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(..., x_{i-1}, H(..., x_{i-1}, x_{i+1}, ...), x_{i+1}, ...) = 0$" src="form_2123.png"/></picture>,</p>
-<p>over a subset, <picture><source srcset="form_2124_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I \subset C \subset \mathbb{R}^{dim-1}$" src="form_2124.png"/></picture>, of the cross section, <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>, of the box (see <a class="el" href="classBoundingBox.html#href_anchor">BoundingBox::cross_section</a>). Here, <picture><source srcset="form_2098_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I$" src="form_2098.png"/></picture> is the "indefinite"-region defined in the <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a> class. To follow convention in the original paper, we will -refer to <picture><source srcset="form_1769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H$" src="form_1769.png"/></picture> as the "height-function" and to <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> as the "height-function direction".</p>
-<p>If a height function direction can be found, we go down in dimension by creating two new level set functions, <picture><source srcset="form_2125_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\psi_0, \psi_1\}$" src="form_2125.png"/></picture>, which are the restriction of <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_517.png"/></picture> to the top and bottom faces of the box (in the height function direction). We then delegate to <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QGenerator.html">QGenerator</a>&lt;dim-1, spacedim&gt; to create a <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a>&lt;dim-1&gt; over the cross section.</p>
+<p><picture><source srcset="form_2114_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(..., x_{i-1}, H(..., x_{i-1}, x_{i+1}, ...), x_{i+1}, ...) = 0$" src="form_2114.png"/></picture>,</p>
+<p>over a subset, <picture><source srcset="form_2115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I \subset C \subset \mathbb{R}^{dim-1}$" src="form_2115.png"/></picture>, of the cross section, <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>, of the box (see <a class="el" href="classBoundingBox.html#href_anchor">BoundingBox::cross_section</a>). Here, <picture><source srcset="form_2089_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I$" src="form_2089.png"/></picture> is the "indefinite"-region defined in the <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a> class. To follow convention in the original paper, we will -refer to <picture><source srcset="form_1768_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H$" src="form_1768.png"/></picture> as the "height-function" and to <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> as the "height-function direction".</p>
+<p>If a height function direction can be found, we go down in dimension by creating two new level set functions, <picture><source srcset="form_2116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\psi_0, \psi_1\}$" src="form_2116.png"/></picture>, which are the restriction of <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_526.png"/></picture> to the top and bottom faces of the box (in the height function direction). We then delegate to <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QGenerator.html">QGenerator</a>&lt;dim-1, spacedim&gt; to create a <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a>&lt;dim-1&gt; over the cross section.</p>
 <p>When we reach the base case, <picture><source srcset="form_743_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim = 1$" src="form_743.png"/></picture>, the creation of QPartitioning&lt;1&gt; is simple. See the documentation in specialized class: <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QGenerator_3_011_00_01spacedim_01_4.html">QGenerator&lt;1, spacedim&gt;</a>.</p>
 <p>As we go up through the dimensions and create the higher dimensional quadratures, we need to know the function value of the height functions at the lower dimensional quadrature points. Since the functions are implicit, we need to do root-finding on the level set functions to find the function values. For this we use the class <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1UpThroughDimensionCreator.html">UpThroughDimensionCreator</a>, see documentation there.</p>
-<p>When we have <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> level set functions (i.e. after having gone down in dimension), we try to find a height function direction, which works for all those <picture><source srcset="form_2096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_i$" src="form_2096.png"/></picture> which are intersected by the zero contour (i.e. those not positive or negative definite). If such a direction exist, we will have a maximum of <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> associated implicit height functions, <picture><source srcset="form_2126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_j$" src="form_2126.png"/></picture>. Each <picture><source srcset="form_2126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_j$" src="form_2126.png"/></picture> parametrize the <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture>-coordinate of the zero-contour over a region, <picture><source srcset="form_2127_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_j$" src="form_2127.png"/></picture>. The indefinite region in the lower dimensional partitioning is the union of these <picture><source srcset="form_2128_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I = \cup_j I_j$" src="form_2128.png"/></picture>.</p>
+<p>When we have <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> level set functions (i.e. after having gone down in dimension), we try to find a height function direction, which works for all those <picture><source srcset="form_2087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_i$" src="form_2087.png"/></picture> which are intersected by the zero contour (i.e. those not positive or negative definite). If such a direction exist, we will have a maximum of <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> associated implicit height functions, <picture><source srcset="form_2117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_j$" src="form_2117.png"/></picture>. Each <picture><source srcset="form_2117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_j$" src="form_2117.png"/></picture> parametrize the <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture>-coordinate of the zero-contour over a region, <picture><source srcset="form_2118_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_j$" src="form_2118.png"/></picture>. The indefinite region in the lower dimensional partitioning is the union of these <picture><source srcset="form_2119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I = \cup_j I_j$" src="form_2119.png"/></picture>.</p>
 <p>As we try to find a height function direction, we estimate bounds on the gradient components by approximating each component as a 1st-order Taylor-polynomial. If a direction can not be found, the box is split and we recurse on each smaller box. This makes an implicit function more likely to exist since we seek it over a smaller portion of the zero contour. It also makes the estimated bounds tighter since we extrapolate the Taylor-polynomial a shorter distance.</p>
 <p>Since we can not split a box forever, there is an maximum number of allowed splits on the additional data struct passed to the constructor. If this is reached, the algorithm uses the midpoint method as a last resort. </p>
 
@@ -313,7 +313,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Gets the <picture><source srcset="form_2100_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(dim - 1)$" src="form_2100.png"/></picture>-dimensional quadratures from the lower dimensional algorithm and creates the <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture>-dimensional quadrature rules over the box from the lower dimensional ones. </p>
+<p>Gets the <picture><source srcset="form_2091_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(dim - 1)$" src="form_2091.png"/></picture>-dimensional quadratures from the lower dimensional algorithm and creates the <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture>-dimensional quadrature rules over the box from the lower dimensional ones. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">1118</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QGenerator_3_011_00_01spacedim_01_4.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QGenerator_3_011_00_01spacedim_01_4.html	2024-03-17 21:57:33.599173498 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QGenerator_3_011_00_01spacedim_01_4.html	2024-03-17 21:57:33.599173498 +0000
@@ -151,8 +151,8 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> spacedim&gt;<br />
 class NonMatching::internal::QuadratureGeneratorImplementation::QGenerator&lt; 1, spacedim &gt;</div><p>The 1d-base case of the recursive algorithm QGenerator&lt;dim, spacedim&gt;.</p>
-<p>Let <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture> and <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> be the left and right bounds of the one-dimensional <a class="el" href="classBoundingBox.html">BoundingBox</a>. This interval is partitioned into <picture><source srcset="form_2129_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[x_0, x_1, ..., x_n]$" src="form_2129.png"/></picture> where <picture><source srcset="form_2130_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0 = L$" src="form_2130.png"/></picture>, <picture><source srcset="form_2131_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_n = R$" src="form_2131.png"/></picture>, and the remaining <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture> are the roots of the level set functions in the interval <picture><source srcset="form_2101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L, R]$" src="form_2101.png"/></picture>. In each interval, <picture><source srcset="form_2132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[x_i, x_{i+1}]$" src="form_2132.png"/></picture>, quadrature points are distributed according to a 1d-quadrature rule. These points are added to one of the regions of <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a> determined from the signs of the level set functions on the interval (see documentation of <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a>).</p>
-<p>If spacedim = 1 the points <picture><source srcset="form_2133_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[x_1, x_{n-1}]$" src="form_2133.png"/></picture> are also added as surface quadrature points to <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html#href_anchor">QPartitioning::surface</a>. </p>
+<p>Let <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture> and <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> be the left and right bounds of the one-dimensional <a class="el" href="classBoundingBox.html">BoundingBox</a>. This interval is partitioned into <picture><source srcset="form_2120_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[x_0, x_1, ..., x_n]$" src="form_2120.png"/></picture> where <picture><source srcset="form_2121_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0 = L$" src="form_2121.png"/></picture>, <picture><source srcset="form_2122_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_n = R$" src="form_2122.png"/></picture>, and the remaining <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture> are the roots of the level set functions in the interval <picture><source srcset="form_2092_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L, R]$" src="form_2092.png"/></picture>. In each interval, <picture><source srcset="form_2123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[x_i, x_{i+1}]$" src="form_2123.png"/></picture>, quadrature points are distributed according to a 1d-quadrature rule. These points are added to one of the regions of <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a> determined from the signs of the level set functions on the interval (see documentation of <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a>).</p>
+<p>If spacedim = 1 the points <picture><source srcset="form_2124_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[x_1, x_{n-1}]$" src="form_2124.png"/></picture> are also added as surface quadrature points to <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html#href_anchor">QPartitioning::surface</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">1208</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
 </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html	2024-03-17 21:57:33.619173621 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html	2024-03-17 21:57:33.619173621 +0000
@@ -120,18 +120,18 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
 class NonMatching::internal::QuadratureGeneratorImplementation::QPartitioning&lt; dim &gt;</div><p>Class that stores quadrature rules to integrate over 4 different regions of a single <a class="el" href="classBoundingBox.html">BoundingBox</a>, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>. Given multiple level set functions,</p>
-<p><picture><source srcset="form_2093_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_i : \mathbb{R}^{dim} \rightarrow \mathbb{R}$" src="form_2093.png"/></picture>, <picture><source srcset="form_2094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i = 0, 1, ...$" src="form_2094.png"/></picture>,</p>
-<p>the box, <picture><source srcset="form_2060_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B \subset \mathbb{R}^{dim}$" src="form_2060.png"/></picture>, is partitioned into a "negative", "positive", and "indefinite" region, <picture><source srcset="form_2095_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B = N \cup P \cup I$" src="form_2095.png"/></picture>, according to the signs of <picture><source srcset="form_2096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_i$" src="form_2096.png"/></picture> over each region:</p>
+<p><picture><source srcset="form_2084_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_i : \mathbb{R}^{dim} \rightarrow \mathbb{R}$" src="form_2084.png"/></picture>, <picture><source srcset="form_2085_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i = 0, 1, ...$" src="form_2085.png"/></picture>,</p>
+<p>the box, <picture><source srcset="form_2062_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B \subset \mathbb{R}^{dim}$" src="form_2062.png"/></picture>, is partitioned into a "negative", "positive", and "indefinite" region, <picture><source srcset="form_2086_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B = N \cup P \cup I$" src="form_2086.png"/></picture>, according to the signs of <picture><source srcset="form_2087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_i$" src="form_2087.png"/></picture> over each region:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2088_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 N = \{x \in B : \psi_i(x) &lt; 0, \forall i \}, \\
 P = \{x \in B : \psi_i(x) &gt; 0, \forall i \}, \\
 I = B \setminus (\overline{N} \cup \overline{P}).
-\]" src="form_2097.png"/></picture>
+\]" src="form_2088.png"/></picture>
 </p>
-<p>Thus, all <picture><source srcset="form_2096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_i$" src="form_2096.png"/></picture> are positive over <picture><source srcset="form_175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_175.png"/></picture> and negative over <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture>. Over <picture><source srcset="form_2098_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I$" src="form_2098.png"/></picture> the level set functions differ in sign. This class holds quadrature rules for each of these regions. In addition, when there is a single level set function, <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_517.png"/></picture>, it holds a surface quadrature for the zero contour of <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_517.png"/></picture>:</p>
-<p><picture><source srcset="form_2099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S = \{x \in B : \psi(x) = 0 \}$" src="form_2099.png"/></picture>.</p>
-<p>Note that when there is a single level set function, <picture><source srcset="form_2098_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I$" src="form_2098.png"/></picture> is empty and <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> and <picture><source srcset="form_175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_175.png"/></picture> are the regions that one typically integrates over in an immersed finite element method. </p>
+<p>Thus, all <picture><source srcset="form_2087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_i$" src="form_2087.png"/></picture> are positive over <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_149.png"/></picture> and negative over <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture>. Over <picture><source srcset="form_2089_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I$" src="form_2089.png"/></picture> the level set functions differ in sign. This class holds quadrature rules for each of these regions. In addition, when there is a single level set function, <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_526.png"/></picture>, it holds a surface quadrature for the zero contour of <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_526.png"/></picture>:</p>
+<p><picture><source srcset="form_2090_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S = \{x \in B : \psi(x) = 0 \}$" src="form_2090.png"/></picture>.</p>
+<p>Note that when there is a single level set function, <picture><source srcset="form_2089_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I$" src="form_2089.png"/></picture> is empty and <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> and <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_149.png"/></picture> are the regions that one typically integrates over in an immersed finite element method. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">753</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
 </div><h2 class="groupheader">Member Function Documentation</h2>
@@ -171,7 +171,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p><a class="el" href="classQuadrature.html">Quadrature</a> for the region <picture><source srcset="form_2147_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi_i(x) &lt; 0 \forall i \}$" src="form_2147.png"/></picture> of the box, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>. </p>
+<p><a class="el" href="classQuadrature.html">Quadrature</a> for the region <picture><source srcset="form_2137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi_i(x) &lt; 0 \forall i \}$" src="form_2137.png"/></picture> of the box, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">767</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
 
@@ -190,7 +190,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p><a class="el" href="classQuadrature.html">Quadrature</a> for the region <picture><source srcset="form_2148_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi_i(x) &gt; 0 \forall i \}$" src="form_2148.png"/></picture> of the box, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>. </p>
+<p><a class="el" href="classQuadrature.html">Quadrature</a> for the region <picture><source srcset="form_2138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi_i(x) &gt; 0 \forall i \}$" src="form_2138.png"/></picture> of the box, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">773</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
 
@@ -228,7 +228,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p><a class="el" href="classQuadrature.html">Quadrature</a> for the region <picture><source srcset="form_2084_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) = 0 \}$" src="form_2084.png"/></picture> of the box, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>. </p>
+<p><a class="el" href="classQuadrature.html">Quadrature</a> for the region <picture><source srcset="form_2036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in B : \psi(x) = 0 \}$" src="form_2036.png"/></picture> of the box, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">785</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1RootFinder.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1RootFinder.html	2024-03-17 21:57:33.635173719 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1RootFinder.html	2024-03-17 21:57:33.643173769 +0000
@@ -122,7 +122,7 @@
 <tr class="separator:a4cc3d6bb74416a94efa60a35ff8d87e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>A class that attempts to find multiple distinct roots of a function, <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, over an interval, <picture><source srcset="form_2089_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[l, r]$" src="form_2089.png"/></picture>. This is done as follows. If there is a sign change in function value between the interval end points, we solve for the root. If there is no sign change, we attempt to bound the function value away from zero on <picture><source srcset="form_2090_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[a, b]$" src="form_2090.png"/></picture>, to conclude that no roots exist. If we can't exclude that there are roots, we split the interval in two: <picture><source srcset="form_2091_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[l, (r + l) / 2]$" src="form_2091.png"/></picture>, <picture><source srcset="form_2092_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[(r + l) / 2, r]$" src="form_2092.png"/></picture>, and use the same algorithm recursively on each interval. This means that we can typically find 2 distinct roots, but not 3.</p>
+<div class="textblock"><p>A class that attempts to find multiple distinct roots of a function, <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, over an interval, <picture><source srcset="form_2080_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[l, r]$" src="form_2080.png"/></picture>. This is done as follows. If there is a sign change in function value between the interval end points, we solve for the root. If there is no sign change, we attempt to bound the function value away from zero on <picture><source srcset="form_2081_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[a, b]$" src="form_2081.png"/></picture>, to conclude that no roots exist. If we can't exclude that there are roots, we split the interval in two: <picture><source srcset="form_2082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[l, (r + l) / 2]$" src="form_2082.png"/></picture>, <picture><source srcset="form_2083_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[(r + l) / 2, r]$" src="form_2083.png"/></picture>, and use the same algorithm recursively on each interval. This means that we can typically find 2 distinct roots, but not 3.</p>
 <p>The bounds on the functions values are estimated using the function taylor_estimate_function_bounds, which approximates the function as a second order Taylor-polynomial around the interval midpoint. When we have a sign change on an interval, this class uses boost::math::tools::toms748_solve for finding roots . </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">608</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
@@ -168,7 +168,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">std::vector&lt; double &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>roots</em></span>&#href_anchor"memdoc">
-<p>For each of the incoming <code>functions</code>, attempt to find the roots over the interval defined by <code>interval</code> and add these to <code>roots</code>. The returned roots will be sorted in ascending order: <picture><source srcset="form_2146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0 &lt; x_1 &lt;...$" src="form_2146.png"/></picture> and duplicate roots (with respect to the tolerance in <a class="el" href="structNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1RootFinder_1_1AdditionalData.html">AdditionalData</a>) will be removed. </p>
+<p>For each of the incoming <code>functions</code>, attempt to find the roots over the interval defined by <code>interval</code> and add these to <code>roots</code>. The returned roots will be sorted in ascending order: <picture><source srcset="form_2136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0 &lt; x_1 &lt;...$" src="form_2136.png"/></picture> and duplicate roots (with respect to the tolerance in <a class="el" href="structNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1RootFinder_1_1AdditionalData.html">AdditionalData</a>) will be removed. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">532</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1UpThroughDimensionCreator.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1UpThroughDimensionCreator.html	2024-03-17 21:57:33.671173942 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1UpThroughDimensionCreator.html	2024-03-17 21:57:33.675173967 +0000
@@ -131,13 +131,13 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim&gt;<br />
-class NonMatching::internal::QuadratureGeneratorImplementation::UpThroughDimensionCreator&lt; dim, spacedim &gt;</div><p>This class is responsible for creating quadrature points for the <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture>-dimensional quadrature partitioning from an <picture><source srcset="form_2100_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(dim - 1)$" src="form_2100.png"/></picture>-dimensional "indefinite" quadrature (see <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a> documentation).</p>
-<p>To be precise, let <picture><source srcset="form_2101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L, R]$" src="form_2101.png"/></picture> be the extents of the box in the height function direction and let <picture><source srcset="form_2102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I \subset \mathbb{R}^{dim-1}$" src="form_2102.png"/></picture> be the lower dimensional indefinite region. This class will create quadrature points over <picture><source srcset="form_2103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I \times [L, R] \subset \mathbb{R}^{dim}$" src="form_2103.png"/></picture> and in the case <picture><source srcset="form_2104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim=spacedim$" src="form_2104.png"/></picture>, points for the surface quadrature.</p>
-<p>For each lower dimensional quadrature point, <picture><source srcset="form_2105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_I, w_I)$" src="form_2105.png"/></picture> in the indefinite quadrature, we create several 1d-level set functions by restricting <picture><source srcset="form_2106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_j$" src="form_2106.png"/></picture> to <picture><source srcset="form_2107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_I$" src="form_2107.png"/></picture>. We then partition the interval <picture><source srcset="form_2101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L, R]$" src="form_2101.png"/></picture> into <picture><source srcset="form_2108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[y_0, y_1, ..., y_n]$" src="form_2108.png"/></picture>, where <picture><source srcset="form_2109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_0 = L$" src="form_2109.png"/></picture>, <picture><source srcset="form_2110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_n = R$" src="form_2110.png"/></picture>, and the remaining <picture><source srcset="form_2111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_i$" src="form_2111.png"/></picture> are the roots of the 1d-level set functions in <picture><source srcset="form_2101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L, R]$" src="form_2101.png"/></picture>. Since the level set functions change sign between the roots, each interval belong to different regions in the quadrature partitioning.</p>
-<p>In each interval, <picture><source srcset="form_2112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[y_i, y_{i+1}]$" src="form_2112.png"/></picture>, we distribute points according to the 1d-base quadrature, <picture><source srcset="form_2113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_q, w_q)$" src="form_2113.png"/></picture> and take the cartesian product with <picture><source srcset="form_2105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_I, w_I)$" src="form_2105.png"/></picture> to create the <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture>-dimensional quadrature points, <picture><source srcset="form_2114_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(X_q, W_q)$" src="form_2114.png"/></picture>: <picture><source srcset="form_2115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_q = x_I \times (y_i + (y_{i+1} - y_i) x_q)$" src="form_2115.png"/></picture>, <picture><source srcset="form_2116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W_q = w_I (y_{i+1} - y_i) w_q$" src="form_2116.png"/></picture>.</p>
-<p>When <picture><source srcset="form_2104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim=spacedim$" src="form_2104.png"/></picture>, we have a single level set function, <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_517.png"/></picture>. Since we have fulfilled the implicit function theorem, there is a single root <picture><source srcset="form_2117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_1 \in [L, R]$" src="form_2117.png"/></picture>. The point, <picture><source srcset="form_2118_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_s = x_I \times y_1$" src="form_2118.png"/></picture>, will be added as a point in the surface quadrature. One can show that the correct weight of this point is</p>
-<p><picture><source srcset="form_2119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_s = \frac{\|\nabla \psi(x_s)\|}{|\partial_i \psi(x_s)|} w_I$" src="form_2119.png"/></picture>,</p>
-<p>where <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> is the height function direction. </p>
+class NonMatching::internal::QuadratureGeneratorImplementation::UpThroughDimensionCreator&lt; dim, spacedim &gt;</div><p>This class is responsible for creating quadrature points for the <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture>-dimensional quadrature partitioning from an <picture><source srcset="form_2091_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(dim - 1)$" src="form_2091.png"/></picture>-dimensional "indefinite" quadrature (see <a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a> documentation).</p>
+<p>To be precise, let <picture><source srcset="form_2092_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L, R]$" src="form_2092.png"/></picture> be the extents of the box in the height function direction and let <picture><source srcset="form_2093_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I \subset \mathbb{R}^{dim-1}$" src="form_2093.png"/></picture> be the lower dimensional indefinite region. This class will create quadrature points over <picture><source srcset="form_2094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I \times [L, R] \subset \mathbb{R}^{dim}$" src="form_2094.png"/></picture> and in the case <picture><source srcset="form_2095_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim=spacedim$" src="form_2095.png"/></picture>, points for the surface quadrature.</p>
+<p>For each lower dimensional quadrature point, <picture><source srcset="form_2096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_I, w_I)$" src="form_2096.png"/></picture> in the indefinite quadrature, we create several 1d-level set functions by restricting <picture><source srcset="form_2097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_j$" src="form_2097.png"/></picture> to <picture><source srcset="form_2098_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_I$" src="form_2098.png"/></picture>. We then partition the interval <picture><source srcset="form_2092_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L, R]$" src="form_2092.png"/></picture> into <picture><source srcset="form_2099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[y_0, y_1, ..., y_n]$" src="form_2099.png"/></picture>, where <picture><source srcset="form_2100_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_0 = L$" src="form_2100.png"/></picture>, <picture><source srcset="form_2101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_n = R$" src="form_2101.png"/></picture>, and the remaining <picture><source srcset="form_2102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_i$" src="form_2102.png"/></picture> are the roots of the 1d-level set functions in <picture><source srcset="form_2092_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L, R]$" src="form_2092.png"/></picture>. Since the level set functions change sign between the roots, each interval belong to different regions in the quadrature partitioning.</p>
+<p>In each interval, <picture><source srcset="form_2103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[y_i, y_{i+1}]$" src="form_2103.png"/></picture>, we distribute points according to the 1d-base quadrature, <picture><source srcset="form_2104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_q, w_q)$" src="form_2104.png"/></picture> and take the cartesian product with <picture><source srcset="form_2096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_I, w_I)$" src="form_2096.png"/></picture> to create the <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture>-dimensional quadrature points, <picture><source srcset="form_2105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(X_q, W_q)$" src="form_2105.png"/></picture>: <picture><source srcset="form_2106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_q = x_I \times (y_i + (y_{i+1} - y_i) x_q)$" src="form_2106.png"/></picture>, <picture><source srcset="form_2107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W_q = w_I (y_{i+1} - y_i) w_q$" src="form_2107.png"/></picture>.</p>
+<p>When <picture><source srcset="form_2095_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim=spacedim$" src="form_2095.png"/></picture>, we have a single level set function, <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_526.png"/></picture>. Since we have fulfilled the implicit function theorem, there is a single root <picture><source srcset="form_2108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_1 \in [L, R]$" src="form_2108.png"/></picture>. The point, <picture><source srcset="form_2109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_s = x_I \times y_1$" src="form_2109.png"/></picture>, will be added as a point in the surface quadrature. One can show that the correct weight of this point is</p>
+<p><picture><source srcset="form_2110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_s = \frac{\|\nabla \psi(x_s)\|}{|\partial_i \psi(x_s)|} w_I$" src="form_2110.png"/></picture>,</p>
+<p>where <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> is the height function direction. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">828</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
 </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
@@ -197,7 +197,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a>&lt; dim &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>q_partitioning</em></span>&#href_anchor"memdoc">
-<p>Create <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture>-dimensional immersed quadratures from the incoming <picture><source srcset="form_2149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(dim-1)$" src="form_2149.png"/></picture>-dimensional quadratures and add these to <code>q_partitioning</code>. </p>
+<p>Create <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture>-dimensional immersed quadratures from the incoming <picture><source srcset="form_2139_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(dim-1)$" src="form_2139.png"/></picture>-dimensional quadratures and add these to <code>q_partitioning</code>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">725</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
@@ -270,7 +270,7 @@
 </table>
 </div><div class="memdoc">
 <p>Create a surface quadrature point from the lower-dimensional point and add it to surface_quadrature.</p>
-<p>This function is only called when <picture><source srcset="form_2104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim=spacedim$" src="form_2104.png"/></picture> and there is a single level set function. At this point there should only be a single root in the interval <picture><source srcset="form_2101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L, R]$" src="form_2101.png"/></picture> </p>
+<p>This function is only called when <picture><source srcset="form_2095_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim=spacedim$" src="form_2095.png"/></picture> and there is a single level set function. At this point there should only be a single root in the interval <picture><source srcset="form_2092_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L, R]$" src="form_2092.png"/></picture> </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">781</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
@@ -379,7 +379,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>1d-functions, that are restrictions of each dim-dimensional level set function passed to <a class="el" href="#href_anchor">generate()</a> to some <picture><source srcset="form_2149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(dim-1)$" src="form_2149.png"/></picture>-dimensional point. </p>
+<p>1d-functions, that are restrictions of each dim-dimensional level set function passed to <a class="el" href="#href_anchor">generate()</a> to some <picture><source srcset="form_2139_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(dim-1)$" src="form_2139.png"/></picture>-dimensional point. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">898</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
 
@@ -433,7 +433,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>The roots of the functions in point_restrictions. This will be the values of the height functions, <picture><source srcset="form_2150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{H_i(x_I)\}$" src="form_2150.png"/></picture> at some lower dimensional quadrature point, <picture><source srcset="form_2151_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_I \in \mathbb{R}^{dim-1}$" src="form_2151.png"/></picture>. </p>
+<p>The roots of the functions in point_restrictions. This will be the values of the height functions, <picture><source srcset="form_2140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{H_i(x_I)\}$" src="form_2140.png"/></picture> at some lower dimensional quadrature point, <picture><source srcset="form_2141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_I \in \mathbb{R}^{dim-1}$" src="form_2141.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">911</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonlinearSolverSelector.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonlinearSolverSelector.html	2024-03-17 21:57:33.711174189 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonlinearSolverSelector.html	2024-03-17 21:57:33.711174189 +0000
@@ -523,10 +523,10 @@
 <p>A function object that users may supply and that is intended to prepare the linear solver for subsequent calls to solve_jacobian_system().</p>
 <p>The job of <a class="el" href="#href_anchor">setup_jacobian()</a> is to prepare the linear solver for subsequent calls to <a class="el" href="#href_anchor">solve_with_jacobian()</a>, in the solution of linear systems <picture><source srcset="form_1910_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax = b$" src="form_1910.png"/></picture>. The exact nature of this system depends on the SolutionStrategy that has been selected.</p>
 <p>In the cases strategy = SolutionStrategy::newton or SolutionStrategy::linesearch, <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is the Jacobian <picture><source srcset="form_2213_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J = \partial
-F/\partial u$" src="form_2213.png"/></picture>. If strategy = SolutionStrategy::picard, <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is the approximate Jacobian matrix <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>.</p>
+F/\partial u$" src="form_2213.png"/></picture>. If strategy = SolutionStrategy::picard, <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is the approximate Jacobian matrix <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">current_u</td><td>Current value of <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture></td></tr>
+    <tr><td class="paramname">current_u</td><td>Current value of <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture></td></tr>
   </table>
   </dd>
 </dl>
/usr/share/doc/packages/dealii/doxygen/deal.II/classNonlinearSolverSelector_1_1AdditionalData.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classNonlinearSolverSelector_1_1AdditionalData.html	2024-03-17 21:57:33.739174362 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classNonlinearSolverSelector_1_1AdditionalData.html	2024-03-17 21:57:33.743174387 +0000
@@ -350,7 +350,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Relative <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture> tolerance of the residual to be reached.</p>
+<p>Relative <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture> tolerance of the residual to be reached.</p>
 <dl class="section note"><dt>Note</dt><dd>Solver terminates successfully if either the function tolerance or the relative tolerance has been reached. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="nonlinear_8h_source.html#href_anchor">186</a> of file <a class="el" href="nonlinear_8h_source.html">nonlinear.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1ArclengthProjectionLineManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1ArclengthProjectionLineManifold.html	2024-03-17 21:57:33.803174757 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1ArclengthProjectionLineManifold.html	2024-03-17 21:57:33.795174708 +0000
@@ -573,7 +573,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
+<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
 <p>This function is used in the computations required by the <a class="el" href="classChartManifold.html#href_anchor">get_tangent_vector()</a> function. Since not all users of the <a class="el" href="classManifold.html">Manifold</a> class interface will require calling that function, the current function is implemented but will trigger an exception whenever called. This allows derived classes to avoid implementing the push_forward_gradient function if this functionality is not needed in the user program.</p>
 <p>Refer to the general documentation of this class for more information. </p>
 
@@ -603,24 +603,24 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a vector that, at <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1427.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
-<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1442.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
-<picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>Return a vector that, at <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1429.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
+<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1439.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
+<picture><source srcset="form_1440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \zeta(t) &amp;= \xi_1 +  t (\xi_2-\xi_1)
  \\          &amp;= F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                             -F^{-1}(\mathbf x_1)\right]
-\end{align*}" src="form_1443.png"/></picture>
+\end{align*}" src="form_1440.png"/></picture>
 </p>
 <p> In image space, i.e., in the space in which we operate, this leads to the curve  </p><p class="formulaDsp">
-<picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_1441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s(t) &amp;= F(\zeta(t))
  \\          &amp;= F(\xi_1 +  t (\xi_2-\xi_1))
  \\          &amp;= F\left(F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                     -F^{-1}(\mathbf x_1)\right]\right).
-\end{align*}" src="form_1444.png"/></picture>
+\end{align*}" src="form_1441.png"/></picture>
 </p>
-<p> What the current function is supposed to return is <picture><source srcset="form_1431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1431.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
-<picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> What the current function is supposed to return is <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1433.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
+<picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s'(0) &amp;=
     \frac{d}{dt}\left. F\left(F^{-1}(\mathbf x_1)
                        + t\left[F^{-1}(\mathbf x_2)
@@ -629,11 +629,11 @@
 \\ &amp;= \nabla_\xi F\left(F^{-1}(\mathbf x_1)\right)
                    \left[F^{-1}(\mathbf x_2)
                                 -F^{-1}(\mathbf x_1)\right].
-\end{align*}" src="form_1445.png"/></picture>
+\end{align*}" src="form_1442.png"/></picture>
 </p>
 <p> This formula may then have to be slightly modified by considering any periodicity that was assumed in the call to the constructor.</p>
-<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1446.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1447.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
-x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1448.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
+<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1443.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1444.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
+x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1445.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">x1</td><td>The first point that describes the geodesic, and the one at which the "direction" is to be evaluated. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1DirectionalProjectionManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1DirectionalProjectionManifold.html	2024-03-17 21:57:33.855175078 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1DirectionalProjectionManifold.html	2024-03-17 21:57:33.863175128 +0000
@@ -500,7 +500,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a vector that, at <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1427.png"/></picture>. For the current class, we assume that the manifold is flat, so the geodesic is the straight line between the two points, and we return <picture><source srcset="form_1436_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2-\mathbf x_1$" src="form_1436.png"/></picture>. The normalization of the vector is chosen so that it fits the convention described in <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a>.</p>
+<p>Return a vector that, at <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1429.png"/></picture>. For the current class, we assume that the manifold is flat, so the geodesic is the straight line between the two points, and we return <picture><source srcset="form_1437_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2-\mathbf x_1$" src="form_1437.png"/></picture>. The normalization of the vector is chosen so that it fits the convention described in <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a>.</p>
 <dl class="section note"><dt>Note</dt><dd>If you use this class as a stepping stone to build a manifold that only "slightly" deviates from a flat manifold, by overloading the <a class="el" href="#href_anchor">project_to_manifold()</a> function.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -509,7 +509,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>A "direction" vector tangential to the geodesic. Here, this is <picture><source srcset="form_1436_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2-\mathbf x_1$" src="form_1436.png"/></picture>, possibly modified by the periodicity of the domain as set in the constructor, to use the "shortest" connection between the points through the periodic boundary as necessary. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>A "direction" vector tangential to the geodesic. Here, this is <picture><source srcset="form_1437_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2-\mathbf x_1$" src="form_1437.png"/></picture>, possibly modified by the periodicity of the domain as set in the constructor, to use the "shortest" connection between the points through the periodic boundary as necessary. </dd></dl>
 
 <p>Reimplemented from <a class="el" href="classManifold.html#href_anchor">Manifold&lt; dim, spacedim &gt;</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1NURBSPatchManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1NURBSPatchManifold.html	2024-03-17 21:57:33.919175474 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1NURBSPatchManifold.html	2024-03-17 21:57:33.919175474 +0000
@@ -448,7 +448,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given a point in the spacedim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> that maps from the uv coordinate system to the Euclidean coordinate system. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
+<p>Given a point in the spacedim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> that maps from the uv coordinate system to the Euclidean coordinate system. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
 <p>This function is used in the computations required by the <a class="el" href="classChartManifold.html#href_anchor">get_tangent_vector()</a> function.</p>
 <p>Refer to the general documentation of this class for more information. </p>
 
@@ -637,7 +637,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
+<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
 <p>This function is used in the computations required by the <a class="el" href="classChartManifold.html#href_anchor">get_tangent_vector()</a> function. Since not all users of the <a class="el" href="classManifold.html">Manifold</a> class interface will require calling that function, the current function is implemented but will trigger an exception whenever called. This allows derived classes to avoid implementing the push_forward_gradient function if this functionality is not needed in the user program.</p>
 <p>Refer to the general documentation of this class for more information. </p>
 
@@ -667,24 +667,24 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a vector that, at <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1427.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
-<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1442.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
-<picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>Return a vector that, at <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1429.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
+<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1439.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
+<picture><source srcset="form_1440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \zeta(t) &amp;= \xi_1 +  t (\xi_2-\xi_1)
  \\          &amp;= F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                             -F^{-1}(\mathbf x_1)\right]
-\end{align*}" src="form_1443.png"/></picture>
+\end{align*}" src="form_1440.png"/></picture>
 </p>
 <p> In image space, i.e., in the space in which we operate, this leads to the curve  </p><p class="formulaDsp">
-<picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_1441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s(t) &amp;= F(\zeta(t))
  \\          &amp;= F(\xi_1 +  t (\xi_2-\xi_1))
  \\          &amp;= F\left(F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                     -F^{-1}(\mathbf x_1)\right]\right).
-\end{align*}" src="form_1444.png"/></picture>
+\end{align*}" src="form_1441.png"/></picture>
 </p>
-<p> What the current function is supposed to return is <picture><source srcset="form_1431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1431.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
-<picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> What the current function is supposed to return is <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1433.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
+<picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s'(0) &amp;=
     \frac{d}{dt}\left. F\left(F^{-1}(\mathbf x_1)
                        + t\left[F^{-1}(\mathbf x_2)
@@ -693,11 +693,11 @@
 \\ &amp;= \nabla_\xi F\left(F^{-1}(\mathbf x_1)\right)
                    \left[F^{-1}(\mathbf x_2)
                                 -F^{-1}(\mathbf x_1)\right].
-\end{align*}" src="form_1445.png"/></picture>
+\end{align*}" src="form_1442.png"/></picture>
 </p>
 <p> This formula may then have to be slightly modified by considering any periodicity that was assumed in the call to the constructor.</p>
-<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1446.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1447.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
-x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1448.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
+<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1443.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1444.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
+x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1445.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">x1</td><td>The first point that describes the geodesic, and the one at which the "direction" is to be evaluated. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1NormalProjectionManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1NormalProjectionManifold.html	2024-03-17 21:57:33.979175844 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1NormalProjectionManifold.html	2024-03-17 21:57:33.987175894 +0000
@@ -494,7 +494,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a vector that, at <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1427.png"/></picture>. For the current class, we assume that the manifold is flat, so the geodesic is the straight line between the two points, and we return <picture><source srcset="form_1436_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2-\mathbf x_1$" src="form_1436.png"/></picture>. The normalization of the vector is chosen so that it fits the convention described in <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a>.</p>
+<p>Return a vector that, at <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1429.png"/></picture>. For the current class, we assume that the manifold is flat, so the geodesic is the straight line between the two points, and we return <picture><source srcset="form_1437_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2-\mathbf x_1$" src="form_1437.png"/></picture>. The normalization of the vector is chosen so that it fits the convention described in <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a>.</p>
 <dl class="section note"><dt>Note</dt><dd>If you use this class as a stepping stone to build a manifold that only "slightly" deviates from a flat manifold, by overloading the <a class="el" href="#href_anchor">project_to_manifold()</a> function.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -503,7 +503,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>A "direction" vector tangential to the geodesic. Here, this is <picture><source srcset="form_1436_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2-\mathbf x_1$" src="form_1436.png"/></picture>, possibly modified by the periodicity of the domain as set in the constructor, to use the "shortest" connection between the points through the periodic boundary as necessary. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>A "direction" vector tangential to the geodesic. Here, this is <picture><source srcset="form_1437_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2-\mathbf x_1$" src="form_1437.png"/></picture>, possibly modified by the periodicity of the domain as set in the constructor, to use the "shortest" connection between the points through the periodic boundary as necessary. </dd></dl>
 
 <p>Reimplemented from <a class="el" href="classManifold.html#href_anchor">Manifold&lt; dim, spacedim &gt;</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1NormalToMeshProjectionManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1NormalToMeshProjectionManifold.html	2024-03-17 21:57:34.047176265 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classOpenCASCADE_1_1NormalToMeshProjectionManifold.html	2024-03-17 21:57:34.043176240 +0000
@@ -494,7 +494,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a vector that, at <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1427.png"/></picture>. For the current class, we assume that the manifold is flat, so the geodesic is the straight line between the two points, and we return <picture><source srcset="form_1436_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2-\mathbf x_1$" src="form_1436.png"/></picture>. The normalization of the vector is chosen so that it fits the convention described in <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a>.</p>
+<p>Return a vector that, at <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1429.png"/></picture>. For the current class, we assume that the manifold is flat, so the geodesic is the straight line between the two points, and we return <picture><source srcset="form_1437_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2-\mathbf x_1$" src="form_1437.png"/></picture>. The normalization of the vector is chosen so that it fits the convention described in <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a>.</p>
 <dl class="section note"><dt>Note</dt><dd>If you use this class as a stepping stone to build a manifold that only "slightly" deviates from a flat manifold, by overloading the <a class="el" href="#href_anchor">project_to_manifold()</a> function.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -503,7 +503,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>A "direction" vector tangential to the geodesic. Here, this is <picture><source srcset="form_1436_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2-\mathbf x_1$" src="form_1436.png"/></picture>, possibly modified by the periodicity of the domain as set in the constructor, to use the "shortest" connection between the points through the periodic boundary as necessary. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>A "direction" vector tangential to the geodesic. Here, this is <picture><source srcset="form_1437_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2-\mathbf x_1$" src="form_1437.png"/></picture>, possibly modified by the periodicity of the domain as set in the constructor, to use the "shortest" connection between the points through the periodic boundary as necessary. </dd></dl>
 
 <p>Reimplemented from <a class="el" href="classManifold.html#href_anchor">Manifold&lt; dim, spacedim &gt;</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPArpackSolver.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPArpackSolver.html	2024-03-17 21:57:34.103176610 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPArpackSolver.html	2024-03-17 21:57:34.103176610 +0000
@@ -273,7 +273,7 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;typename VectorType&gt;<br />
 class PArpackSolver&lt; VectorType &gt;</div><p>Interface for using PARPACK. PARPACK is a collection of Fortran77 subroutines designed to solve large scale eigenvalue problems. Here we interface to the routines <code>pdneupd</code>, <code>pdseupd</code>, <code>pdnaupd</code>, <code>pdsaupd</code> of PARPACK. The package is designed to compute a few eigenvalues and corresponding eigenvectors of a general n by n matrix A. It is most appropriate for large sparse matrices A.</p>
-<p>In this class we make use of the method applied to the generalized eigenspectrum problem <picture><source srcset="form_1577_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(A-\lambda B)x=0$" src="form_1577.png"/></picture>, for <picture><source srcset="form_1578_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x\neq0$" src="form_1578.png"/></picture>; where <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is a system matrix, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is a <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>, and <picture><source srcset="form_1579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda, x$" src="form_1579.png"/></picture> are a set of eigenvalues and eigenvectors respectively.</p>
+<p>In this class we make use of the method applied to the generalized eigenspectrum problem <picture><source srcset="form_1590_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(A-\lambda B)x=0$" src="form_1590.png"/></picture>, for <picture><source srcset="form_1591_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x\neq0$" src="form_1591.png"/></picture>; where <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is a system matrix, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is a <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>, and <picture><source srcset="form_1592_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda, x$" src="form_1592.png"/></picture> are a set of eigenvalues and eigenvectors respectively.</p>
 <p>The <a class="el" href="classArpackSolver.html">ArpackSolver</a> can be used in application codes in the following way: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classSolverControl.html">SolverControl</a> <a class="code hl_variable" href="#href_anchor">solver_control</a> (1000, 1e-9);</div>
 <div class="line"><span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> num_arnoldi_vectors = 2*size_of_spectrum + 2;</div>
 <div class="line"><a class="code hl_struct" href="structPArpackSolver_1_1AdditionalData.html">PArpackSolver&lt;V&gt;::AdditionalData</a></div>
@@ -298,7 +298,7 @@
 <div class="ttc" id="aclassPArpackSolver_html_ad8f35b8588d6b675226c68ab23d37178"><div class="ttname"><a href="#href_anchor">PArpackSolver::additional_data</a></div><div class="ttdeci">const AdditionalData additional_data</div><div class="ttdef"><b>Definition</b> <a href="parpack__solver_8h_source.html#href_anchor">parpack_solver.h:386</a></div></div>
 <div class="ttc" id="aclassSolverControl_html"><div class="ttname"><a href="classSolverControl.html">SolverControl</a></div><div class="ttdef"><b>Definition</b> <a href="solver__control_8h_source.html#href_anchor">solver_control.h:68</a></div></div>
 <div class="ttc" id="astructPArpackSolver_1_1AdditionalData_html"><div class="ttname"><a href="structPArpackSolver_1_1AdditionalData.html">PArpackSolver::AdditionalData</a></div><div class="ttdef"><b>Definition</b> <a href="parpack__solver_8h_source.html#href_anchor">parpack_solver.h:276</a></div></div>
-</div><!-- fragment --><p> for the generalized eigenvalue problem <picture><source srcset="form_1580_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=B\lambda x$" src="form_1580.png"/></picture>, where the variable <code>size_of_spectrum</code> tells PARPACK the number of eigenvector/eigenvalue pairs to solve for. Here, <code>lambda</code> is a vector that will contain the eigenvalues computed, <code>x</code> a vector of objects of type <code>V</code> that will contain the eigenvectors computed.</p>
+</div><!-- fragment --><p> for the generalized eigenvalue problem <picture><source srcset="form_1593_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=B\lambda x$" src="form_1593.png"/></picture>, where the variable <code>size_of_spectrum</code> tells PARPACK the number of eigenvector/eigenvalue pairs to solve for. Here, <code>lambda</code> is a vector that will contain the eigenvalues computed, <code>x</code> a vector of objects of type <code>V</code> that will contain the eigenvectors computed.</p>
 <p>Currently, only three modes of (P)Arpack are implemented. In mode 3 (default), <code>OP</code> is an inverse operation for the matrix <code>A - sigma * B</code>, where <code> sigma </code> is a shift value, set to zero by default. Whereas in mode 2, <code>OP</code> is an inverse of <code>M</code>. Finally, mode 1 corresponds to standard eigenvalue problem without spectral transformation <picture><source srcset="form_1722_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=\lambda x$" src="form_1722.png"/></picture>. The mode can be specified via <a class="el" href="structPArpackSolver_1_1AdditionalData.html">AdditionalData</a> object. Note that for shift-and-invert (mode=3), the sought eigenpairs are those after the spectral transformation is applied.</p>
 <p>The <code>OP</code> can be specified by using a <a class="el" href="classLinearOperator.html">LinearOperator</a>: </p><div class="fragment"><div class="line"><span class="keyword">const</span> <span class="keywordtype">double</span> shift = 5.0;</div>
 <div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> op_A = linear_operator&lt;vector_t&gt;(A);</div>
@@ -631,7 +631,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>n_eigenvalues</em></span>&#href_anchor"memdoc">
-<p>Solve the generalized eigensprectrum problem <picture><source srcset="form_1582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A x=\lambda B x$" src="form_1582.png"/></picture> by calling the <code>pd(n/s)eupd</code> and <code>pd(n/s)aupd</code> functions of PARPACK.</p>
+<p>Solve the generalized eigensprectrum problem <picture><source srcset="form_1594_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A x=\lambda B x$" src="form_1594.png"/></picture> by calling the <code>pd(n/s)eupd</code> and <code>pd(n/s)aupd</code> functions of PARPACK.</p>
 <p>In <code>mode=3</code>, <code>inverse</code> should correspond to <picture><source srcset="form_1723_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[A-\sigma B]^{-1}$" src="form_1723.png"/></picture>, whereas in <code>mode=2</code> it should represent <picture><source srcset="form_1724_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B^{-1}$" src="form_1724.png"/></picture>. For <code>mode=1</code> both <code>B</code> and <code>inverse</code> are ignored. </p>
 
 <p class="definition">Definition at line <a class="el" href="parpack__solver_8h_source.html#href_anchor">770</a> of file <a class="el" href="parpack__solver_8h_source.html">parpack_solver.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1CommunicationPattern.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1CommunicationPattern.html	2024-03-17 21:57:34.131176783 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1CommunicationPattern.html	2024-03-17 21:57:34.131176783 +0000
@@ -291,7 +291,7 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classMPI__Comm.html">MPI_Comm</a></td>          <td class="paramname"><span class="paramname"><em>communicator</em></span>&#href_anchor"memdoc">
 <p>Reinitialization that takes the number of locally-owned degrees of freedom <code>local_size</code> and an index set for the required ghost indices <code>ghost_indices</code>.</p>
-<p>The local index range is translated to global indices in an ascending and one-to-one fashion, i.e., the indices of process <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> sit exactly between the indices of the processes <picture><source srcset="form_579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p-1$" src="form_579.png"/></picture> and <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>, respectively.</p>
+<p>The local index range is translated to global indices in an ascending and one-to-one fashion, i.e., the indices of process <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> sit exactly between the indices of the processes <picture><source srcset="form_579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p-1$" src="form_579.png"/></picture> and <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>, respectively.</p>
 <p>The export_to_ghost_array will populate an array containing values from locally-owned AND ghost indices, as for the relevant set of dofs of a usual FEM simulation. </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__communication__pattern_8cc_source.html#href_anchor">46</a> of file <a class="el" href="petsc__communication__pattern_8cc_source.html">petsc_communication_pattern.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1FullMatrix.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1FullMatrix.html	2024-03-17 21:57:34.191177154 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1FullMatrix.html	2024-03-17 21:57:34.199177204 +0000
@@ -1505,8 +1505,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the l1-norm of the matrix, that is <picture><source srcset="form_1613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=max_{all columns
-j}\sum_{all rows i} |M_ij|$" src="form_1613.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e. <picture><source srcset="form_1614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1614.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
+<p>Return the l1-norm of the matrix, that is <picture><source srcset="form_1609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=max_{all columns
+j}\sum_{all rows i} |M_ij|$" src="form_1609.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e. <picture><source srcset="form_1610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1610.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__matrix__base_8cc_source.html#href_anchor">417</a> of file <a class="el" href="petsc__matrix__base_8cc_source.html">petsc_matrix_base.cc</a>.</p>
 
@@ -1534,8 +1534,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the linfty-norm of the matrix, that is <picture><source srcset="form_1615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_infty=max_{all rows
-i}\sum_{all columns j} |M_ij|$" src="form_1615.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e. <picture><source srcset="form_1616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_infty \leq |M|_infty |v|_infty$" src="form_1616.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
+<p>Return the linfty-norm of the matrix, that is <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_infty=max_{all rows
+i}\sum_{all columns j} |M_ij|$" src="form_1611.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e. <picture><source srcset="form_1612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_infty \leq |M|_infty |v|_infty$" src="form_1612.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__matrix__base_8cc_source.html#href_anchor">430</a> of file <a class="el" href="petsc__matrix__base_8cc_source.html">petsc_matrix_base.cc</a>.</p>
 
@@ -1591,7 +1591,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the square of the norm of the vector <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1611.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
+<p>Return the square of the norm of the vector <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1608.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
 <p>Obviously, the matrix needs to be quadratic for this operation.</p>
 <p>The implementation of this function is not as efficient as the one in the <code><a class="el" href="classPETScWrappers_1_1MatrixBase.html">MatrixBase</a></code> class used in deal.II (i.e. the original one, not the PETSc wrapper class) since PETSc doesn't support this operation and needs a temporary vector.</p>
 <p>Note that if the current object represents a parallel distributed matrix (of type <a class="el" href="classPETScWrappers_1_1MPI_1_1SparseMatrix.html">PETScWrappers::MPI::SparseMatrix</a>), then the given vector has to be a distributed vector as well. Conversely, if the matrix is not distributed, then neither may the vector be. </p>
@@ -1622,7 +1622,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1601.png"/></picture>.</p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1600.png"/></picture>.</p>
 <p>The implementation of this function is not as efficient as the one in the <code><a class="el" href="classPETScWrappers_1_1MatrixBase.html">MatrixBase</a></code> class used in deal.II (i.e. the original one, not the PETSc wrapper class) since PETSc doesn't support this operation and needs a temporary vector.</p>
 <p>Note that if the current object represents a parallel distributed matrix (of type <a class="el" href="classPETScWrappers_1_1MPI_1_1SparseMatrix.html">PETScWrappers::MPI::SparseMatrix</a>), then both vectors have to be distributed vectors as well. Conversely, if the matrix is not distributed, then neither of the vectors may be. </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1BlockSparseMatrix.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1BlockSparseMatrix.html	2024-03-17 21:57:34.271177648 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1BlockSparseMatrix.html	2024-03-17 21:57:34.279177697 +0000
@@ -875,7 +875,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1598.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. </p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1601.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__block__sparse__matrix_8h_source.html#href_anchor">410</a> of file <a class="el" href="petsc__block__sparse__matrix_8h_source.html">petsc_block_sparse_matrix.h</a>.</p>
 
@@ -987,7 +987,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult()</a> but takes the transposed matrix. </p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult()</a> but takes the transposed matrix. </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__block__sparse__matrix_8h_source.html#href_anchor">441</a> of file <a class="el" href="petsc__block__sparse__matrix_8h_source.html">petsc_block_sparse_matrix.h</a>.</p>
 
@@ -2037,7 +2037,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Adding Matrix-vector multiplication. Add <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M*src$" src="form_1599.png"/></picture> on <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1600.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. </p>
+<p>Adding Matrix-vector multiplication. Add <picture><source srcset="form_1598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M*src$" src="form_1598.png"/></picture> on <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1599.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. </p>
 
 </div>
 </div>
@@ -2142,7 +2142,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1601.png"/></picture>. </p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1600.png"/></picture>. </p>
 
 </div>
 </div>
@@ -2611,7 +2611,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1598.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix.</p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1601.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix.</p>
 <p>Due to problems with deriving template arguments between the block and non-block versions of the vmult/Tvmult functions, the actual functions are implemented in derived classes, with implementations forwarding the calls to the implementations provided here under a unique name for which template arguments can be derived by the compiler. </p>
 
 </div>
@@ -2719,7 +2719,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult()</a> but takes the transposed matrix.</p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult()</a> but takes the transposed matrix.</p>
 <p>Due to problems with deriving template arguments between the block and non-block versions of the vmult/Tvmult functions, the actual functions are implemented in derived classes, with implementations forwarding the calls to the implementations provided here under a unique name for which template arguments can be derived by the compiler. </p>
 
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1BlockVector.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1BlockVector.html	2024-03-17 21:57:34.347178118 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1BlockVector.html	2024-03-17 21:57:34.351178142 +0000
@@ -1933,7 +1933,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the square of the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm. </p>
+<p>Return the square of the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm. </p>
 
 </div>
 </div>
@@ -1985,7 +1985,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm of the vector, i.e. the sum of the absolute values. </p>
+<p>Return the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm of the vector, i.e. the sum of the absolute values. </p>
 
 </div>
 </div>
@@ -2011,7 +2011,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm of the vector, i.e. the square root of the sum of the squares of the elements. </p>
+<p>Return the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm of the vector, i.e. the square root of the sum of the squares of the elements. </p>
 
 </div>
 </div>
@@ -2037,7 +2037,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the maximum absolute value of the elements of this vector, which is the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of a vector. </p>
+<p>Return the maximum absolute value of the elements of this vector, which is the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of a vector. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1SparseMatrix.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1SparseMatrix.html	2024-03-17 21:57:34.427178612 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1SparseMatrix.html	2024-03-17 21:57:34.431178636 +0000
@@ -814,7 +814,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the square of the norm of the vector <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1742_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v^\ast,Mv\right)$" src="form_1742.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
+<p>Return the square of the norm of the vector <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v^\ast,Mv\right)$" src="form_1735.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
 <p>Obviously, the matrix needs to be quadratic for this operation.</p>
 <p>The implementation of this function is not as efficient as the one in the <code><a class="el" href="classPETScWrappers_1_1MatrixBase.html">MatrixBase</a></code> class used in deal.II (i.e. the original one, not the PETSc wrapper class) since PETSc doesn't support this operation and needs a temporary vector. </p>
 
@@ -837,7 +837,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classPETScWrappers_1_1MPI_1_1Vector.html">Vector</a> &amp;</td>          <td class="paramname"><span class="paramname"><em>v</em></span>&#href_anchor"memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1743_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u^\ast,Mv\right)$" src="form_1743.png"/></picture>.</p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1736_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u^\ast,Mv\right)$" src="form_1736.png"/></picture>.</p>
 <p>The implementation of this function is not as efficient as the one in the <code><a class="el" href="classPETScWrappers_1_1MatrixBase.html">MatrixBase</a></code> class used in deal.II (i.e. the original one, not the PETSc wrapper class) since PETSc doesn't support this operation and needs a temporary vector. </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__parallel__sparse__matrix_8cc_source.html#href_anchor">815</a> of file <a class="el" href="petsc__parallel__sparse__matrix_8cc_source.html">petsc_parallel_sparse_matrix.cc</a>.</p>
@@ -2059,8 +2059,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the l1-norm of the matrix, that is <picture><source srcset="form_1613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=max_{all columns
-j}\sum_{all rows i} |M_ij|$" src="form_1613.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e. <picture><source srcset="form_1614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1614.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
+<p>Return the l1-norm of the matrix, that is <picture><source srcset="form_1609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=max_{all columns
+j}\sum_{all rows i} |M_ij|$" src="form_1609.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e. <picture><source srcset="form_1610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1610.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__matrix__base_8cc_source.html#href_anchor">417</a> of file <a class="el" href="petsc__matrix__base_8cc_source.html">petsc_matrix_base.cc</a>.</p>
 
@@ -2088,8 +2088,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the linfty-norm of the matrix, that is <picture><source srcset="form_1615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_infty=max_{all rows
-i}\sum_{all columns j} |M_ij|$" src="form_1615.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e. <picture><source srcset="form_1616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_infty \leq |M|_infty |v|_infty$" src="form_1616.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
+<p>Return the linfty-norm of the matrix, that is <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_infty=max_{all rows
+i}\sum_{all columns j} |M_ij|$" src="form_1611.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e. <picture><source srcset="form_1612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_infty \leq |M|_infty |v|_infty$" src="form_1612.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__matrix__base_8cc_source.html#href_anchor">430</a> of file <a class="el" href="petsc__matrix__base_8cc_source.html">petsc_matrix_base.cc</a>.</p>
 
@@ -2145,7 +2145,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the square of the norm of the vector <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1611.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
+<p>Return the square of the norm of the vector <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1608.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
 <p>Obviously, the matrix needs to be quadratic for this operation.</p>
 <p>The implementation of this function is not as efficient as the one in the <code><a class="el" href="classPETScWrappers_1_1MatrixBase.html">MatrixBase</a></code> class used in deal.II (i.e. the original one, not the PETSc wrapper class) since PETSc doesn't support this operation and needs a temporary vector.</p>
 <p>Note that if the current object represents a parallel distributed matrix (of type <a class="el" href="classPETScWrappers_1_1MPI_1_1SparseMatrix.html">PETScWrappers::MPI::SparseMatrix</a>), then the given vector has to be a distributed vector as well. Conversely, if the matrix is not distributed, then neither may the vector be. </p>
@@ -2176,7 +2176,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1601.png"/></picture>.</p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1600.png"/></picture>.</p>
 <p>The implementation of this function is not as efficient as the one in the <code><a class="el" href="classPETScWrappers_1_1MatrixBase.html">MatrixBase</a></code> class used in deal.II (i.e. the original one, not the PETSc wrapper class) since PETSc doesn't support this operation and needs a temporary vector.</p>
 <p>Note that if the current object represents a parallel distributed matrix (of type <a class="el" href="classPETScWrappers_1_1MPI_1_1SparseMatrix.html">PETScWrappers::MPI::SparseMatrix</a>), then both vectors have to be distributed vectors as well. Conversely, if the matrix is not distributed, then neither of the vectors may be. </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1Vector.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1Vector.html	2024-03-17 21:57:34.503179082 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MPI_1_1Vector.html	2024-03-17 21:57:34.511179130 +0000
@@ -1929,7 +1929,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the square of the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm. </p>
+<p>Return the square of the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm. </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__vector__base_8cc_source.html#href_anchor">612</a> of file <a class="el" href="petsc__vector__base_8cc_source.html">petsc_vector_base.cc</a>.</p>
 
@@ -1985,7 +1985,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p><picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm of the vector. The sum of the absolute values.</p>
+<p><picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm of the vector. The sum of the absolute values.</p>
 <dl class="section note"><dt>Note</dt><dd>In complex-valued PETSc priori to 3.7.0 this norm is implemented as the sum of absolute values of real and imaginary parts of elements of a complex vector. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="petsc__vector__base_8cc_source.html#href_anchor">672</a> of file <a class="el" href="petsc__vector__base_8cc_source.html">petsc_vector_base.cc</a>.</p>
@@ -2014,7 +2014,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p><picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm of the vector. The square root of the sum of the squares of the elements. </p>
+<p><picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm of the vector. The square root of the sum of the squares of the elements. </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__vector__base_8cc_source.html#href_anchor">685</a> of file <a class="el" href="petsc__vector__base_8cc_source.html">petsc_vector_base.cc</a>.</p>
 
@@ -2042,7 +2042,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p><picture><source srcset="form_1648_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_p$" src="form_1648.png"/></picture>-norm of the vector. The pth root of the sum of the pth powers of the absolute values of the elements. </p>
+<p><picture><source srcset="form_1651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_p$" src="form_1651.png"/></picture>-norm of the vector. The pth root of the sum of the pth powers of the absolute values of the elements. </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__vector__base_8cc_source.html#href_anchor">698</a> of file <a class="el" href="petsc__vector__base_8cc_source.html">petsc_vector_base.cc</a>.</p>
 
@@ -2070,7 +2070,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p><picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of the vector. Return the value of the vector element with the maximum absolute value. </p>
+<p><picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of the vector. Return the value of the vector element with the maximum absolute value. </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__vector__base_8cc_source.html#href_anchor">740</a> of file <a class="el" href="petsc__vector__base_8cc_source.html">petsc_vector_base.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MatrixBase.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MatrixBase.html	2024-03-17 21:57:34.567179476 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MatrixBase.html	2024-03-17 21:57:34.571179501 +0000
@@ -1290,8 +1290,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the l1-norm of the matrix, that is <picture><source srcset="form_1613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=max_{all columns
-j}\sum_{all rows i} |M_ij|$" src="form_1613.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e. <picture><source srcset="form_1614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1614.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
+<p>Return the l1-norm of the matrix, that is <picture><source srcset="form_1609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=max_{all columns
+j}\sum_{all rows i} |M_ij|$" src="form_1609.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e. <picture><source srcset="form_1610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1610.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__matrix__base_8cc_source.html#href_anchor">417</a> of file <a class="el" href="petsc__matrix__base_8cc_source.html">petsc_matrix_base.cc</a>.</p>
 
@@ -1311,8 +1311,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the linfty-norm of the matrix, that is <picture><source srcset="form_1615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_infty=max_{all rows
-i}\sum_{all columns j} |M_ij|$" src="form_1615.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e. <picture><source srcset="form_1616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_infty \leq |M|_infty |v|_infty$" src="form_1616.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
+<p>Return the linfty-norm of the matrix, that is <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_infty=max_{all rows
+i}\sum_{all columns j} |M_ij|$" src="form_1611.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e. <picture><source srcset="form_1612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_infty \leq |M|_infty |v|_infty$" src="form_1612.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__matrix__base_8cc_source.html#href_anchor">430</a> of file <a class="el" href="petsc__matrix__base_8cc_source.html">petsc_matrix_base.cc</a>.</p>
 
@@ -1352,7 +1352,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the square of the norm of the vector <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1611.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
+<p>Return the square of the norm of the vector <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1608.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
 <p>Obviously, the matrix needs to be quadratic for this operation.</p>
 <p>The implementation of this function is not as efficient as the one in the <code><a class="el" href="classPETScWrappers_1_1MatrixBase.html">MatrixBase</a></code> class used in deal.II (i.e. the original one, not the PETSc wrapper class) since PETSc doesn't support this operation and needs a temporary vector.</p>
 <p>Note that if the current object represents a parallel distributed matrix (of type <a class="el" href="classPETScWrappers_1_1MPI_1_1SparseMatrix.html">PETScWrappers::MPI::SparseMatrix</a>), then the given vector has to be a distributed vector as well. Conversely, if the matrix is not distributed, then neither may the vector be. </p>
@@ -1376,7 +1376,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classPETScWrappers_1_1VectorBase.html">VectorBase</a> &amp;</td>          <td class="paramname"><span class="paramname"><em>v</em></span>&#href_anchor"memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1601.png"/></picture>.</p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1600.png"/></picture>.</p>
 <p>The implementation of this function is not as efficient as the one in the <code><a class="el" href="classPETScWrappers_1_1MatrixBase.html">MatrixBase</a></code> class used in deal.II (i.e. the original one, not the PETSc wrapper class) since PETSc doesn't support this operation and needs a temporary vector.</p>
 <p>Note that if the current object represents a parallel distributed matrix (of type <a class="el" href="classPETScWrappers_1_1MPI_1_1SparseMatrix.html">PETScWrappers::MPI::SparseMatrix</a>), then both vectors have to be distributed vectors as well. Conversely, if the matrix is not distributed, then neither of the vectors may be. </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MatrixFree.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MatrixFree.html	2024-03-17 21:57:34.643179946 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1MatrixFree.html	2024-03-17 21:57:34.647179971 +0000
@@ -1949,8 +1949,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the l1-norm of the matrix, that is <picture><source srcset="form_1613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=max_{all columns
-j}\sum_{all rows i} |M_ij|$" src="form_1613.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e. <picture><source srcset="form_1614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1614.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
+<p>Return the l1-norm of the matrix, that is <picture><source srcset="form_1609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=max_{all columns
+j}\sum_{all rows i} |M_ij|$" src="form_1609.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e. <picture><source srcset="form_1610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1610.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__matrix__base_8cc_source.html#href_anchor">417</a> of file <a class="el" href="petsc__matrix__base_8cc_source.html">petsc_matrix_base.cc</a>.</p>
 
@@ -1978,8 +1978,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the linfty-norm of the matrix, that is <picture><source srcset="form_1615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_infty=max_{all rows
-i}\sum_{all columns j} |M_ij|$" src="form_1615.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e. <picture><source srcset="form_1616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_infty \leq |M|_infty |v|_infty$" src="form_1616.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
+<p>Return the linfty-norm of the matrix, that is <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_infty=max_{all rows
+i}\sum_{all columns j} |M_ij|$" src="form_1611.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e. <picture><source srcset="form_1612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_infty \leq |M|_infty |v|_infty$" src="form_1612.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__matrix__base_8cc_source.html#href_anchor">430</a> of file <a class="el" href="petsc__matrix__base_8cc_source.html">petsc_matrix_base.cc</a>.</p>
 
@@ -2035,7 +2035,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the square of the norm of the vector <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1611.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
+<p>Return the square of the norm of the vector <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1608.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
 <p>Obviously, the matrix needs to be quadratic for this operation.</p>
 <p>The implementation of this function is not as efficient as the one in the <code><a class="el" href="classPETScWrappers_1_1MatrixBase.html">MatrixBase</a></code> class used in deal.II (i.e. the original one, not the PETSc wrapper class) since PETSc doesn't support this operation and needs a temporary vector.</p>
 <p>Note that if the current object represents a parallel distributed matrix (of type <a class="el" href="classPETScWrappers_1_1MPI_1_1SparseMatrix.html">PETScWrappers::MPI::SparseMatrix</a>), then the given vector has to be a distributed vector as well. Conversely, if the matrix is not distributed, then neither may the vector be. </p>
@@ -2066,7 +2066,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1601.png"/></picture>.</p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1600.png"/></picture>.</p>
 <p>The implementation of this function is not as efficient as the one in the <code><a class="el" href="classPETScWrappers_1_1MatrixBase.html">MatrixBase</a></code> class used in deal.II (i.e. the original one, not the PETSc wrapper class) since PETSc doesn't support this operation and needs a temporary vector.</p>
 <p>Note that if the current object represents a parallel distributed matrix (of type <a class="el" href="classPETScWrappers_1_1MPI_1_1SparseMatrix.html">PETScWrappers::MPI::SparseMatrix</a>), then both vectors have to be distributed vectors as well. Conversely, if the matrix is not distributed, then neither of the vectors may be. </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1NonlinearSolver.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1NonlinearSolver.html	2024-03-17 21:57:34.683180194 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1NonlinearSolver.html	2024-03-17 21:57:34.691180242 +0000
@@ -181,7 +181,7 @@
 <div class="line">   Mat &amp; petsc_matrix();</div>
 <div class="line">   ...</div>
 </div><!-- fragment --><p>In particular, the supported types are the ones that can <em>wrap</em> PETSc's native vector and matrix classes, that are able to modify them in place, and that can return PETSc native types when requested.</p>
-<p>To use the solvers the user needs to provide the implementation of <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> via the <a class="el" href="#href_anchor">NonlinearSolver::residual</a> callback.</p>
+<p>To use the solvers the user needs to provide the implementation of <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> via the <a class="el" href="#href_anchor">NonlinearSolver::residual</a> callback.</p>
 <p>The default linearization procedure of a solver instantiated with this class consists in using Jacobian-Free-Newton-Krylov; the action of tangent matrices inside a linear solver process are approximated via matrix-free finite-differencing of the nonlinear residual equations. For details, consult the <a href="https://petsc.org/release/manual/snes/#href_anchor">PETSc manual</a>.</p>
 <p>In alternative, users can also provide the implementation of the Jacobian. This can be accomplished in two ways:</p><ul>
 <li>PETSc style using <a class="el" href="#href_anchor">NonlinearSolver::jacobian</a></li>
/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1SparseMatrix.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1SparseMatrix.html	2024-03-17 21:57:34.759180662 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1SparseMatrix.html	2024-03-17 21:57:34.763180687 +0000
@@ -1939,8 +1939,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the l1-norm of the matrix, that is <picture><source srcset="form_1613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=max_{all columns
-j}\sum_{all rows i} |M_ij|$" src="form_1613.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e. <picture><source srcset="form_1614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1614.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
+<p>Return the l1-norm of the matrix, that is <picture><source srcset="form_1609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=max_{all columns
+j}\sum_{all rows i} |M_ij|$" src="form_1609.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e. <picture><source srcset="form_1610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1610.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__matrix__base_8cc_source.html#href_anchor">417</a> of file <a class="el" href="petsc__matrix__base_8cc_source.html">petsc_matrix_base.cc</a>.</p>
 
@@ -1968,8 +1968,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the linfty-norm of the matrix, that is <picture><source srcset="form_1615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_infty=max_{all rows
-i}\sum_{all columns j} |M_ij|$" src="form_1615.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e. <picture><source srcset="form_1616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_infty \leq |M|_infty |v|_infty$" src="form_1616.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
+<p>Return the linfty-norm of the matrix, that is <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_infty=max_{all rows
+i}\sum_{all columns j} |M_ij|$" src="form_1611.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e. <picture><source srcset="form_1612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_infty \leq |M|_infty |v|_infty$" src="form_1612.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__matrix__base_8cc_source.html#href_anchor">430</a> of file <a class="el" href="petsc__matrix__base_8cc_source.html">petsc_matrix_base.cc</a>.</p>
 
@@ -2025,7 +2025,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the square of the norm of the vector <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1611.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
+<p>Return the square of the norm of the vector <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1608.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
 <p>Obviously, the matrix needs to be quadratic for this operation.</p>
 <p>The implementation of this function is not as efficient as the one in the <code><a class="el" href="classPETScWrappers_1_1MatrixBase.html">MatrixBase</a></code> class used in deal.II (i.e. the original one, not the PETSc wrapper class) since PETSc doesn't support this operation and needs a temporary vector.</p>
 <p>Note that if the current object represents a parallel distributed matrix (of type <a class="el" href="classPETScWrappers_1_1MPI_1_1SparseMatrix.html">PETScWrappers::MPI::SparseMatrix</a>), then the given vector has to be a distributed vector as well. Conversely, if the matrix is not distributed, then neither may the vector be. </p>
@@ -2056,7 +2056,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1601.png"/></picture>.</p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1600.png"/></picture>.</p>
 <p>The implementation of this function is not as efficient as the one in the <code><a class="el" href="classPETScWrappers_1_1MatrixBase.html">MatrixBase</a></code> class used in deal.II (i.e. the original one, not the PETSc wrapper class) since PETSc doesn't support this operation and needs a temporary vector.</p>
 <p>Note that if the current object represents a parallel distributed matrix (of type <a class="el" href="classPETScWrappers_1_1MPI_1_1SparseMatrix.html">PETScWrappers::MPI::SparseMatrix</a>), then both vectors have to be distributed vectors as well. Conversely, if the matrix is not distributed, then neither of the vectors may be. </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1TimeStepper.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1TimeStepper.html	2024-03-17 21:57:34.803180935 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1TimeStepper.html	2024-03-17 21:57:34.807180958 +0000
@@ -177,20 +177,20 @@
 <div class="textblock"><div class="compoundTemplParams">template&lt;typename VectorType = PETScWrappers::VectorBase, typename PMatrixType = PETScWrappers::MatrixBase, typename AMatrixType = PMatrixType&gt;<br />
 class PETScWrappers::TimeStepper&lt; VectorType, PMatrixType, AMatrixType &gt;</div><p>Interface to the PETSc TS solver for Ordinary Differential Equations and Differential-Algebraic Equations. The TS solver is described in the <a href="https://petsc.org/release/manual/ts/">PETSc manual</a>.</p>
 <p>This class supports two kinds of formulations. The explicit formulation:  </p><p class="formulaDsp">
-<picture><source srcset="form_1735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \begin{cases}
       \dot y = G(t,y)\, , \\
       y(t_0) = y_0\, , \\
   \end{cases}
-\]" src="form_1735.png"/></picture>
+\]" src="form_1737.png"/></picture>
 </p>
 <p> and the implicit formulation:  </p><p class="formulaDsp">
-<picture><source srcset="form_1736_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1738_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \begin{cases}
       F(t,y,\dot y) = 0\, , \\
       y(t_0) = y_0\, . \\
   \end{cases}
-\]" src="form_1736.png"/></picture>
+\]" src="form_1738.png"/></picture>
 </p>
 <p>The interface to PETSc is realized by means of std::function callbacks like in the <a class="el" href="classSUNDIALS_1_1IDA.html">SUNDIALS::IDA</a> and <a class="el" href="classSUNDIALS_1_1ARKode.html">SUNDIALS::ARKode</a> classes.</p>
 <p><a class="el" href="classPETScWrappers_1_1TimeStepper.html">TimeStepper</a> supports any vector and matrix type having constructors and methods:</p>
@@ -208,7 +208,7 @@
 <div class="line">   Mat &amp; petsc_matrix();</div>
 <div class="line">   ...</div>
 </div><!-- fragment --><p>In particular, the supported types are the ones that can <em>wrap</em> PETSc's native vector and matrix classes, that are able to modify them in place, and that can return PETSc native types when requested.</p>
-<p>To use explicit solvers (like for example explicit Runge-Kutta methods), the user only needs to provide the implementation of <picture><source srcset="form_1737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1737.png"/></picture> via the <a class="el" href="#href_anchor">TimeStepper::explicit_function</a>. For implicit solvers, users have also the alternative of providing the <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> function via <a class="el" href="#href_anchor">TimeStepper::implicit_function</a>. IMEX methods are also supported by providing both callbacks.</p>
+<p>To use explicit solvers (like for example explicit Runge-Kutta methods), the user only needs to provide the implementation of <picture><source srcset="form_1739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1739.png"/></picture> via the <a class="el" href="#href_anchor">TimeStepper::explicit_function</a>. For implicit solvers, users have also the alternative of providing the <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> function via <a class="el" href="#href_anchor">TimeStepper::implicit_function</a>. IMEX methods are also supported by providing both callbacks.</p>
 <p>The default linearization procedure of an implicit solver instantiated with this class consists in using Jacobian-Free-Newton-Krylov; the action of tangent matrices inside a linear solver process are approximated via matrix-free finite-differencing of the nonlinear residual equations that are ODE-solver specific. For details, consult the <a href="https://petsc.org/release/manual/snes/#href_anchor">PETSc manual</a>.</p>
 <p>In alternative, users can also provide the implementations of the <em>Jacobians</em>. This can be accomplished in two ways:</p><ul>
 <li>PETSc style using <a class="el" href="#href_anchor">TimeStepper::implicit_jacobian</a> and <a class="el" href="#href_anchor">TimeStepper::explicit_jacobian</a>.</li>
@@ -563,7 +563,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Callback for the computation of the implicit residual <picture><source srcset="form_1738_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(t, y, \dot y)$" src="form_1738.png"/></picture>.</p>
+<p>Callback for the computation of the implicit residual <picture><source srcset="form_1740_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(t, y, \dot y)$" src="form_1740.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>This variable represents a <a class="el" href="DEALGlossary.html#href_anchor">user provided callback</a>. See there for a description of how to deal with errors and other requirements and conventions. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="petsc__ts_8h_source.html#href_anchor">453</a> of file <a class="el" href="petsc__ts_8h_source.html">petsc_ts.h</a>.</p>
@@ -583,9 +583,9 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Callback for the computation of the implicit Jacobian  <picture><source srcset="form_1739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{\partial F}{\partial y} + \alpha \dfrac{\partial F}{\partial \dot
-y}$" src="form_1739.png"/></picture>.</p>
-<p>All implicit solvers implementations are recast to use the above linearization. The <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> parameter is time-step and solver-type specific.</p>
+<p>Callback for the computation of the implicit Jacobian  <picture><source srcset="form_1741_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{\partial F}{\partial y} + \alpha \dfrac{\partial F}{\partial \dot
+y}$" src="form_1741.png"/></picture>.</p>
+<p>All implicit solvers implementations are recast to use the above linearization. The <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> parameter is time-step and solver-type specific.</p>
 <dl class="section note"><dt>Note</dt><dd>This variable represents a <a class="el" href="DEALGlossary.html#href_anchor">user provided callback</a>. See there for a description of how to deal with errors and other requirements and conventions. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="petsc__ts_8h_source.html#href_anchor">475</a> of file <a class="el" href="petsc__ts_8h_source.html">petsc_ts.h</a>.</p>
@@ -605,7 +605,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Callback for the computation of the explicit residual <picture><source srcset="form_1740_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G(t, y)$" src="form_1740.png"/></picture>.</p>
+<p>Callback for the computation of the explicit residual <picture><source srcset="form_1742_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G(t, y)$" src="form_1742.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>This variable represents a <a class="el" href="DEALGlossary.html#href_anchor">user provided callback</a>. See there for a description of how to deal with errors and other requirements and conventions. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="petsc__ts_8h_source.html#href_anchor">486</a> of file <a class="el" href="petsc__ts_8h_source.html">petsc_ts.h</a>.</p>
@@ -625,8 +625,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Callback for the computation of the explicit Jacobian <picture><source srcset="form_1741_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{\partial
-G}{\partial y}$" src="form_1741.png"/></picture>.</p>
+<p>Callback for the computation of the explicit Jacobian <picture><source srcset="form_1743_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{\partial
+G}{\partial y}$" src="form_1743.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>This variable represents a <a class="el" href="DEALGlossary.html#href_anchor">user provided callback</a>. See there for a description of how to deal with errors and other requirements and conventions. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="petsc__ts_8h_source.html#href_anchor">501</a> of file <a class="el" href="petsc__ts_8h_source.html">petsc_ts.h</a>.</p>
@@ -668,9 +668,9 @@
       </table>
 </div><div class="memdoc">
 <p>Callback for the set up of the Jacobian system.</p>
-<p>This callback gives full control to users to set up the linearized equations  <picture><source srcset="form_1739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{\partial F}{\partial y} + \alpha \dfrac{\partial F}{\partial \dot
-y}$" src="form_1739.png"/></picture>.</p>
-<p>All implicit solvers implementations are recast to use the above linearization. The <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> parameter is time-step and solver-type specific.</p>
+<p>This callback gives full control to users to set up the linearized equations  <picture><source srcset="form_1741_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{\partial F}{\partial y} + \alpha \dfrac{\partial F}{\partial \dot
+y}$" src="form_1741.png"/></picture>.</p>
+<p>All implicit solvers implementations are recast to use the above linearization. The <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> parameter is time-step and solver-type specific.</p>
 <p>Solvers must be provided via <a class="el" href="#href_anchor">TimeStepper::solve_with_jacobian</a>.</p>
 <dl class="section note"><dt>Note</dt><dd>This variable represents a <a class="el" href="DEALGlossary.html#href_anchor">user provided callback</a>. See there for a description of how to deal with errors and other requirements and conventions. </dd></dl>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1VectorBase.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1VectorBase.html	2024-03-17 21:57:34.859181280 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPETScWrappers_1_1VectorBase.html	2024-03-17 21:57:34.867181329 +0000
@@ -1143,7 +1143,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the square of the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm. </p>
+<p>Return the square of the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm. </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__vector__base_8cc_source.html#href_anchor">612</a> of file <a class="el" href="petsc__vector__base_8cc_source.html">petsc_vector_base.cc</a>.</p>
 
@@ -1183,7 +1183,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p><picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm of the vector. The sum of the absolute values.</p>
+<p><picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm of the vector. The sum of the absolute values.</p>
 <dl class="section note"><dt>Note</dt><dd>In complex-valued PETSc priori to 3.7.0 this norm is implemented as the sum of absolute values of real and imaginary parts of elements of a complex vector. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="petsc__vector__base_8cc_source.html#href_anchor">672</a> of file <a class="el" href="petsc__vector__base_8cc_source.html">petsc_vector_base.cc</a>.</p>
@@ -1204,7 +1204,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p><picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm of the vector. The square root of the sum of the squares of the elements. </p>
+<p><picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm of the vector. The square root of the sum of the squares of the elements. </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__vector__base_8cc_source.html#href_anchor">685</a> of file <a class="el" href="petsc__vector__base_8cc_source.html">petsc_vector_base.cc</a>.</p>
 
@@ -1224,7 +1224,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p><picture><source srcset="form_1648_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_p$" src="form_1648.png"/></picture>-norm of the vector. The pth root of the sum of the pth powers of the absolute values of the elements. </p>
+<p><picture><source srcset="form_1651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_p$" src="form_1651.png"/></picture>-norm of the vector. The pth root of the sum of the pth powers of the absolute values of the elements. </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__vector__base_8cc_source.html#href_anchor">698</a> of file <a class="el" href="petsc__vector__base_8cc_source.html">petsc_vector_base.cc</a>.</p>
 
@@ -1244,7 +1244,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p><picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of the vector. Return the value of the vector element with the maximum absolute value. </p>
+<p><picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of the vector. Return the value of the vector element with the maximum absolute value. </p>
 
 <p class="definition">Definition at line <a class="el" href="petsc__vector__base_8cc_source.html#href_anchor">740</a> of file <a class="el" href="petsc__vector__base_8cc_source.html">petsc_vector_base.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPackagedOperation.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPackagedOperation.html	2024-03-17 21:57:34.903181552 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPackagedOperation.html	2024-03-17 21:57:34.903181552 +0000
@@ -189,7 +189,7 @@
 <div class="line"><span class="comment">// ..</span></div>
 <div class="line"><a class="code hl_class" href="classVector.html">Vector&lt;double&gt;</a> result = a + b - c + d;</div>
 <div class="ttc" id="aclassVector_html"><div class="ttname"><a href="classVector.html">Vector</a></div><div class="ttdef"><b>Definition</b> <a href="vector_8h_source.html#href_anchor">vector.h:109</a></div></div>
-</div><!-- fragment --><p> or the computation of a residual <picture><source srcset="form_96_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b-Ax$" src="form_96.png"/></picture>: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classSparseMatrix.html">SparseMatrix&lt;double&gt;</a> A;</div>
+</div><!-- fragment --><p> or the computation of a residual <picture><source srcset="form_202_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b-Ax$" src="form_202.png"/></picture>: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classSparseMatrix.html">SparseMatrix&lt;double&gt;</a> A;</div>
 <div class="line"><a class="code hl_class" href="classVector.html">Vector&lt;double&gt;</a> b, x;</div>
 <div class="line"><span class="comment">// ..</span></div>
 <div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> op_a = <a class="code hl_function" href="group__LAOperators.html#href_anchor">linear_operator</a>(A);</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classParticles_1_1ParticleHandler.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classParticles_1_1ParticleHandler.html	2024-03-17 21:57:34.983182047 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classParticles_1_1ParticleHandler.html	2024-03-17 21:57:34.987182070 +0000
@@ -1040,7 +1040,7 @@
           <td></td>
           <td class="paramtype">const typename <a class="el" href="classTriangulation.html">Triangulation</a>&lt; dim, spacedim &gt;::active_cell_iterator &amp;</td>          <td class="paramname"><span class="paramname"><em>cell</em></span>&#href_anchor"memdoc">
 <p>Insert a particle into the collection of particles. Return an iterator to the new position of the particle. This function involves a copy of the particle and its properties. Note that this function is of <picture><source srcset="form_2421_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(N \log
-N)$" src="form_2421.png"/></picture> complexity for <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> particles. </p>
+N)$" src="form_2421.png"/></picture> complexity for <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> particles. </p>
 
 <p class="definition">Definition at line <a class="el" href="particle__handler_8cc_source.html#href_anchor">579</a> of file <a class="el" href="particle__handler_8cc_source.html">particle_handler.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classParticles_1_1PropertyPool.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classParticles_1_1PropertyPool.html	2024-03-17 21:57:35.023182293 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classParticles_1_1PropertyPool.html	2024-03-17 21:57:35.027182318 +0000
@@ -632,7 +632,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>This function makes sure that all internally stored memory blocks are sorted in the same order as one would loop over the <code>handles_to_sort</code> container. This makes sure memory access is contiguous with actual memory location. Because the ordering is given in the input argument the complexity of this function is <picture><source srcset="form_2426_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(N)$" src="form_2426.png"/></picture> where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> is the number of elements in the input argument. </p>
+<p>This function makes sure that all internally stored memory blocks are sorted in the same order as one would loop over the <code>handles_to_sort</code> container. This makes sure memory access is contiguous with actual memory location. Because the ordering is given in the input argument the complexity of this function is <picture><source srcset="form_2422_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(N)$" src="form_2422.png"/></picture> where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> is the number of elements in the input argument. </p>
 
 <p class="definition">Definition at line <a class="el" href="property__pool_8cc_source.html#href_anchor">195</a> of file <a class="el" href="property__pool_8cc_source.html">property_pool.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPersistentTriangulation.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPersistentTriangulation.html	2024-03-17 21:57:35.179183256 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPersistentTriangulation.html	2024-03-17 21:57:35.187183306 +0000
@@ -1831,7 +1831,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Refine all cells <code>times</code> times. In other words, in each one of the <code>times</code> iterations, loop over all cells and refine each cell uniformly into <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1304.png"/></picture> children. In practice, this function repeats the following operations <code>times</code> times: call <a class="el" href="classTriangulation.html#href_anchor">set_all_refine_flags()</a> followed by <a class="el" href="#href_anchor">execute_coarsening_and_refinement()</a>. The end result is that the number of cells increases by a factor of <picture><source srcset="form_1476_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}$" src="form_1476.png"/></picture>.</p>
+<p>Refine all cells <code>times</code> times. In other words, in each one of the <code>times</code> iterations, loop over all cells and refine each cell uniformly into <picture><source srcset="form_1317_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1317.png"/></picture> children. In practice, this function repeats the following operations <code>times</code> times: call <a class="el" href="classTriangulation.html#href_anchor">set_all_refine_flags()</a> followed by <a class="el" href="#href_anchor">execute_coarsening_and_refinement()</a>. The end result is that the number of cells increases by a factor of <picture><source srcset="form_1477_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}$" src="form_1477.png"/></picture>.</p>
 <p>The <a class="el" href="#href_anchor">execute_coarsening_and_refinement()</a> function called in this loop may throw an exception if it creates cells that are distorted (see its documentation for an explanation). This exception will be propagated through this function if that happens, and you may not get the actual number of refinement steps in that case.</p>
 <dl class="section note"><dt>Note</dt><dd>This function triggers the pre- and post-refinement signals before and after doing each individual refinement cycle (i.e. more than once if <code>times &gt; 1</code>) . See the section on signals in the general documentation of this class. </dd></dl>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPhysics_1_1Elasticity_1_1StandardTensors.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPhysics_1_1Elasticity_1_1StandardTensors.html	2024-03-17 21:57:35.219183504 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPhysics_1_1Elasticity_1_1StandardTensors.html	2024-03-17 21:57:35.223183529 +0000
@@ -160,47 +160,47 @@
 </div><div class="memdoc">
 <p>Return the fourth-order referential deviatoric tensor, as constructed from the deformation gradient tensor <code>F</code>. Also known as the deviatoric operator, this tensor projects a second-order symmetric tensor onto a deviatoric space (for which the hydrostatic component is removed).</p>
 <p>This referential isochoric projection tensor is defined as  </p><p class="formulaDsp">
-<picture><source srcset="form_2438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2453_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \hat{\mathcal{P}}
     \dealcoloneq \frac{\partial \bar{\mathbf{C}}}{\partial \mathbf{C}}
-\]" src="form_2438.png"/></picture>
+\]" src="form_2453.png"/></picture>
 </p>
 <p> with  </p><p class="formulaDsp">
-<picture><source srcset="form_2439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2454_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \bar{\mathbf{C}} \dealcoloneq J^{-2/\textrm{dim}} \mathbf{C}
    \qquad \text{,} \qquad
  \mathbf{C} = \mathbf{F}^{T}\cdot\mathbf{F}
    \qquad \text{and} \qquad
  J = \textrm{det}\mathbf{F}
-\]" src="form_2439.png"/></picture>
+\]" src="form_2454.png"/></picture>
 </p>
 <p> such that, for any second-order (referential) symmetric tensor, the following holds:  </p><p class="formulaDsp">
-<picture><source srcset="form_2440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2455_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \{ \bullet \} : \hat{\mathcal{P}}
    \dealcoloneq J^{-2/\textrm{dim}} \left[ \{ \bullet \} -
 \frac{1}{\textrm{dim}}\left[\mathbf{C} : \{ \bullet \}\right]
 \mathbf{C}^{-1} \right] = \mathtt{Dev\_P} \left( \{ \bullet \} \right)
 \, .
-\]" src="form_2440.png"/></picture>
+\]" src="form_2455.png"/></picture>
 </p>
 <p> It can therefore be readily shown that  </p><p class="formulaDsp">
-<picture><source srcset="form_2441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2456_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathtt{Dev\_P} \left( \{ \bullet \} \right) : \mathbf{C} = 0 \, .
-\]" src="form_2441.png"/></picture>
+\]" src="form_2456.png"/></picture>
 </p>
 <dl class="section note"><dt>Note</dt><dd>It may be observed that we have defined the tensor as the transpose of that adopted by Wriggers (2008). We have done this so that it may be strictly applied through the chain rule to achieve the definition of the second Piola-Kirchhoff stress, i.e.  <p class="formulaDsp">
-<picture><source srcset="form_2442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2457_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf{S}
     = 2\frac{\partial \psi \left( \bar{\mathbf{C}} \right)}{\partial
 \mathbf{C}} = 2\frac{\partial \psi \left( \bar{\mathbf{C}}
 \right)}{\partial \bar{\mathbf{C}}} : \frac{\partial
 \bar{\mathbf{C}}}{\partial \mathbf{C}} = \bar{\mathbf{S}} :
 \hat{\mathcal{P}} \equiv \hat{\mathcal{P}}^{T} : \bar{\mathbf{S}} \, .
-\]" src="form_2442.png"/></picture>
+\]" src="form_2457.png"/></picture>
 </p>
 </dd>
 <dd>
-Comparing the definition of this tensor in Holzapfel (2001) to that adopted here, the inclusion of the extra factor <picture><source srcset="form_2443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-2/\textrm{dim}}$" src="form_2443.png"/></picture> does not, at the outset, seem to be a reasonable choice. However, in the author's view it makes direct implementation of the expressions for isochoric (referential) stress contributions and their linearization simpler in practise.</dd>
+Comparing the definition of this tensor in Holzapfel (2001) to that adopted here, the inclusion of the extra factor <picture><source srcset="form_2458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-2/\textrm{dim}}$" src="form_2458.png"/></picture> does not, at the outset, seem to be a reasonable choice. However, in the author's view it makes direct implementation of the expressions for isochoric (referential) stress contributions and their linearization simpler in practise.</dd>
 <dd>
 For a discussion of the background of this function, see P. Wriggers: "Nonlinear finite element methods" (2008), and in particular formula (3.125) on p. 46 (or thereabouts). </dd>
 <dd>
@@ -235,12 +235,12 @@
 </table>
 </div><div class="memdoc">
 <p>Return the transpose of the fourth-order referential deviatoric tensor, as constructed from the deformation gradient tensor <code>F</code>. The result performs the following operation:  </p><p class="formulaDsp">
-<picture><source srcset="form_2444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \hat{\mathcal{P}}^{T} : \{ \bullet \}
    = J^{-2/\textrm{dim}} \left[ \{ \bullet \} - \frac{1}{\textrm{dim}}
 \left[\mathbf{C}^{-1} : \{ \bullet \}\right] \mathbf{C} \right] =
 \mathtt{Dev\_P\_T} \{ \bullet \}
-\]" src="form_2444.png"/></picture>
+\]" src="form_2459.png"/></picture>
 </p>
  
 </div>
@@ -271,16 +271,16 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the derivative of the volumetric Jacobian <picture><source srcset="form_2445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J = \text{det} \mathbf{F}$" src="form_2445.png"/></picture> with respect to the right Cauchy-Green tensor, as constructed from the deformation gradient tensor <code>F</code>. The computed result is  </p><p class="formulaDsp">
-<picture><source srcset="form_2446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Return the derivative of the volumetric Jacobian <picture><source srcset="form_2460_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J = \text{det} \mathbf{F}$" src="form_2460.png"/></picture> with respect to the right Cauchy-Green tensor, as constructed from the deformation gradient tensor <code>F</code>. The computed result is  </p><p class="formulaDsp">
+<picture><source srcset="form_2461_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \frac{\partial J}{\partial \mathbf{C}}
   = \frac{1}{2} J \mathbf{C}^{-1}
-\]" src="form_2446.png"/></picture>
+\]" src="form_2461.png"/></picture>
 </p>
 <p> with  </p><p class="formulaDsp">
-<picture><source srcset="form_2447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2462_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{C} = \mathbf{F}^{T}\cdot\mathbf{F} \, .
-\]" src="form_2447.png"/></picture>
+\]" src="form_2462.png"/></picture>
 </p>
 <dl class="section note"><dt>Note</dt><dd>For a discussion of the background of this function, see P. Wriggers: "Nonlinear finite element methods" (2008), and in particular formula (3.124) on p. 46 (or thereabouts). </dd>
 <dd>
@@ -315,12 +315,12 @@
 </table>
 </div><div class="memdoc">
 <p>Return the derivative of the inverse of the right Cauchy-Green tensor with respect to the right Cauchy-Green tensor itself, as constructed from the deformation gradient tensor <code>F</code>. The result, accounting for symmetry, is defined in index notation as  </p><p class="formulaDsp">
-<picture><source srcset="form_2448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2463_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \left[ \frac{\partial \mathbf{C}^{-1}}{\partial \mathbf{C}}
 \right]_{IJKL}
    \dealcoloneq -\frac{1}{2}[ C^{-1}_{IK}C^{-1}_{JL}
     + C^{-1}_{IL}C^{-1}_{JK}  ]
-\]" src="form_2448.png"/></picture>
+\]" src="form_2463.png"/></picture>
 </p>
 <dl class="section note"><dt>Note</dt><dd>For a discussion of the background of this function, see P. Wriggers: "Nonlinear finite element methods" (2008), and in particular formula (3.255) on p. 76 (or thereabouts). </dd></dl>
 
@@ -350,12 +350,12 @@
 </div><div class="memdoc">
 <p>The second-order referential/spatial symmetric identity (metric) tensor <picture><source srcset="form_252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{I}$" src="form_252.png"/></picture>.</p>
 <p>This is defined such that, for any rank-2 tensor or symmetric tensor, the following holds:  </p><p class="formulaDsp">
-<picture><source srcset="form_2428_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{I} \cdot \{ \bullet \} = \{ \bullet \} \cdot \mathbf{I} =
 \{ \bullet \}
    \qquad \text{and} \qquad
 \mathbf{I} : \{ \bullet \} = \textrm{trace} \{ \bullet \} \, .
-\]" src="form_2428.png"/></picture>
+\]" src="form_2443.png"/></picture>
 </p>
 <p>This definition aligns with the rank-2 symmetric tensor returned by <a class="el" href="symmetric__tensor_8h.html#href_anchor">unit_symmetric_tensor()</a>. If one is to interpret the tensor as a matrix, then this simply corresponds to the identity matrix. </p>
 
@@ -385,20 +385,20 @@
 </table>
 </div><div class="memdoc">
 <p>The fourth-order referential/spatial unit symmetric tensor <picture><source srcset="form_263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{S}$" src="form_263.png"/></picture>.</p>
-<p>This is defined such that for a general rank-2 tensor <picture><source srcset="form_2429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{ \hat{\bullet}
-\}$" src="form_2429.png"/></picture> the following holds:  </p><p class="formulaDsp">
-<picture><source srcset="form_2430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>This is defined such that for a general rank-2 tensor <picture><source srcset="form_2444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{ \hat{\bullet}
+\}$" src="form_2444.png"/></picture> the following holds:  </p><p class="formulaDsp">
+<picture><source srcset="form_2445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathcal{S} : \{ \hat{\bullet} \}
   \dealcoloneq \dfrac{1}{2}
   \left[ \{ \hat{\bullet} \} + \{ \hat{\bullet} \}^T \right] \, .
-\]" src="form_2430.png"/></picture>
+\]" src="form_2445.png"/></picture>
 </p>
-<p>As a corollary to this, for any second-order symmetric tensor <picture><source srcset="form_2431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{
-\bullet \}$" src="form_2431.png"/></picture>  </p><p class="formulaDsp">
-<picture><source srcset="form_2432_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>As a corollary to this, for any second-order symmetric tensor <picture><source srcset="form_2446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{
+\bullet \}$" src="form_2446.png"/></picture>  </p><p class="formulaDsp">
+<picture><source srcset="form_2447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathcal{S} : \{ \bullet \}
    = \{ \bullet \} : \mathcal{S} = \{ \bullet \} \, .
-\]" src="form_2432.png"/></picture>
+\]" src="form_2447.png"/></picture>
 </p>
 <p>This definition aligns with the fourth-order symmetric tensor <picture><source srcset="form_263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{S}$" src="form_263.png"/></picture> introduced in the <a class="el" href="namespacePhysics_1_1Elasticity.html">Physics::Elasticity</a> namespace description and that which is returned by <a class="el" href="symmetric__tensor_8h.html#href_anchor">identity_tensor()</a>.</p>
 <dl class="section note"><dt>Note</dt><dd>If you apply this to a standard tensor then it doesn't behave like the fourth-order identity tensor, but rather as a symmetrization operator. </dd></dl>
@@ -431,13 +431,13 @@
 <b>Initial value:</b><div class="fragment"><div class="line">= <a class="code hl_function" href="symmetric__tensor_8h.html#href_anchor">outer_product</a>(unit_symmetric_tensor&lt;dim&gt;(),</div>
 <div class="line">                        unit_symmetric_tensor&lt;dim&gt;())</div>
 <div class="ttc" id="asymmetric__tensor_8h_html_a548c077df22f64aae4000c382c253dce"><div class="ttname"><a href="symmetric__tensor_8h.html#href_anchor">outer_product</a></div><div class="ttdeci">DEAL_II_HOST constexpr SymmetricTensor&lt; 4, dim, Number &gt; outer_product(const SymmetricTensor&lt; 2, dim, Number &gt; &amp;t1, const SymmetricTensor&lt; 2, dim, Number &gt; &amp;t2)</div><div class="ttdef"><b>Definition</b> <a href="symmetric__tensor_8h_source.html#href_anchor">symmetric_tensor.h:3509</a></div></div>
-</div><!-- fragment --><p>The fourth-order referential/spatial tensor <picture><source srcset="form_2433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{I} \otimes
-\mathbf{I}$" src="form_2433.png"/></picture>.</p>
+</div><!-- fragment --><p>The fourth-order referential/spatial tensor <picture><source srcset="form_2448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{I} \otimes
+\mathbf{I}$" src="form_2448.png"/></picture>.</p>
 <p>This is defined such that, for any rank-2 tensor, the following holds:  </p><p class="formulaDsp">
-<picture><source srcset="form_2434_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2449_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  [\mathbf{I} \otimes \mathbf{I}] : \{ \bullet \} =
  \textrm{trace}\{ \bullet \} \mathbf{I} \, .
-\]" src="form_2434.png"/></picture>
+\]" src="form_2449.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="standard__tensors_8h_source.html#href_anchor">119</a> of file <a class="el" href="standard__tensors_8h_source.html">standard_tensors.h</a>.</p>
@@ -467,28 +467,28 @@
 </div><div class="memdoc">
 <p>The fourth-order spatial deviatoric tensor. Also known as the deviatoric operator, this tensor projects a second-order symmetric tensor onto a deviatoric space (for which the hydrostatic component is removed).</p>
 <p>This is defined as  </p><p class="formulaDsp">
-<picture><source srcset="form_2435_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2450_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathcal{P}
     \dealcoloneq \mathcal{S} - \frac{1}{\textrm{dim}} \mathbf{I}
     \otimes \mathbf{I}
-\]" src="form_2435.png"/></picture>
+\]" src="form_2450.png"/></picture>
 </p>
 <p> where <picture><source srcset="form_263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{S}$" src="form_263.png"/></picture> is the fourth-order unit symmetric tensor and <picture><source srcset="form_252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{I}$" src="form_252.png"/></picture> is the second-order identity tensor.</p>
 <p>For any second-order (spatial) symmetric tensor the following holds:  </p><p class="formulaDsp">
-<picture><source srcset="form_2436_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2451_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathcal{P} : \{ \bullet \}
  \dealcoloneq \{ \bullet \} - \frac{1}{\textrm{dim}}
  \left[ \{ \bullet \} : \mathbf{I} \right]\mathbf{I}
  = \mathcal{P}^{T} : \{ \bullet \}
  = \mathtt{dev\_P} \left( \{ \bullet \} \right)
-\]" src="form_2436.png"/></picture>
+\]" src="form_2451.png"/></picture>
 </p>
 <p> and, therefore,  </p><p class="formulaDsp">
/usr/share/doc/packages/dealii/doxygen/deal.II/classPoint.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPoint.html	2024-03-17 21:57:35.295183973 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPoint.html	2024-03-17 21:57:35.299183998 +0000
@@ -798,7 +798,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the Euclidean distance of <code>this</code> point to the point <code>p</code>, i.e. the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture> norm of the difference between the vectors representing the two points.</p>
+<p>Return the Euclidean distance of <code>this</code> point to the point <code>p</code>, i.e. the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture> norm of the difference between the vectors representing the two points.</p>
 <dl class="section note"><dt>Note</dt><dd>This function can also be used in <a class="el" href="DEALGlossary.html#href_anchor">device</a> code. </dd></dl>
 
 </div>
@@ -1462,7 +1462,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return an unrolled index in the range <picture><source srcset="form_865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,\text{dim}^{\text{rank}}-1]$" src="form_865.png"/></picture> for the element of the tensor indexed by the argument to the function. </p>
+<p>Return an unrolled index in the range <picture><source srcset="form_862_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,\text{dim}^{\text{rank}}-1]$" src="form_862.png"/></picture> for the element of the tensor indexed by the argument to the function. </p>
 
 </div>
 </div>
@@ -1490,7 +1490,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Opposite of component_to_unrolled_index: For an index in the range <picture><source srcset="form_866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, \text{dim}^{\text{rank}}-1]$" src="form_866.png"/></picture>, return which set of indices it would correspond to. </p>
+<p>Opposite of component_to_unrolled_index: For an index in the range <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, \text{dim}^{\text{rank}}-1]$" src="form_863.png"/></picture>, return which set of indices it would correspond to. </p>
 
 </div>
 </div>
@@ -2205,11 +2205,11 @@
 </div><div class="memdoc">
 <p>Entrywise multiplication of two tensor objects of general rank.</p>
 <p>This multiplication is also called "Hadamard-product" (c.f. <a href="https://en.wikipedia.org/wiki/Hadamard_product_(matrices)">https://en.wikipedia.org/wiki/Hadamard_product_(matrices)</a>), and generates a new tensor of size &lt;rank, dim&gt;:  </p><p class="formulaDsp">
-<picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_857_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \text{result}_{i, j}
   = \text{left}_{i, j}\circ
     \text{right}_{i, j}
-\]" src="form_860.png"/></picture>
+\]" src="form_857.png"/></picture>
 </p>
 <dl class="tparams"><dt>Template Parameters</dt><dd>
   <table class="tparams">
@@ -2258,7 +2258,7 @@
 </p>
 <dl class="section note"><dt>Note</dt><dd>For the <a class="el" href="classTensor.html">Tensor</a> class, the multiplication operator only performs a contraction over a single pair of indices. This is in contrast to the multiplication operator for <a class="el" href="classSymmetricTensor.html">SymmetricTensor</a>, for which the corresponding <code><a class="el" href="#href_anchor">operator*()</a></code> performs a double contraction. The origin of the difference in how <code><a class="el" href="#href_anchor">operator*()</a></code> is implemented between <a class="el" href="classTensor.html">Tensor</a> and <a class="el" href="classSymmetricTensor.html">SymmetricTensor</a> is that for the former, the product between two <a class="el" href="classTensor.html">Tensor</a> objects of same rank and dimension results in another <a class="el" href="classTensor.html">Tensor</a> object &ndash; that it, <code><a class="el" href="#href_anchor">operator*()</a></code> corresponds to the multiplicative group action within the group of tensors. On the other hand, there is no corresponding multiplicative group action with the set of symmetric tensors because, in general, the product of two symmetric tensors is a <em>nonsymmetric</em> tensor. As a consequence, for a mathematician, it is clear that <code><a class="el" href="#href_anchor">operator*()</a></code> for symmetric tensors must have a different meaning: namely the <em>dot</em> or <em>scalar product</em> that maps two symmetric tensors of rank 2 to a scalar. This corresponds to the double-dot (colon) operator whose meaning is then extended to the product of any two even-ranked symmetric tensors.</dd>
 <dd>
-In case the contraction yields a tensor of rank 0, that is, if <code>rank_1==rank_2==1</code>, then a scalar number is returned as an unwrapped number type. Return the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture> norm of the given rank-2 tensor, where <picture><source srcset="form_862_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf T\|_1 = \max_j \sum_i |T_{ij}|$" src="form_862.png"/></picture> (maximum of the sums over columns). </dd></dl>
+In case the contraction yields a tensor of rank 0, that is, if <code>rank_1==rank_2==1</code>, then a scalar number is returned as an unwrapped number type. Return the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture> norm of the given rank-2 tensor, where <picture><source srcset="form_859_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf T\|_1 = \max_j \sum_i |T_{ij}|$" src="form_859.png"/></picture> (maximum of the sums over columns). </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="tensor_8h_source.html#href_anchor">3035</a> of file <a class="el" href="tensor_8h_source.html">tensor.h</a>.</p>
 
@@ -2288,7 +2288,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture> norm of the given rank-2 tensor, where <picture><source srcset="form_864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf T\|_\infty = \max_i \sum_j |T_{ij}|$" src="form_864.png"/></picture> (maximum of the sums over rows). </p>
+<p>Return the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture> norm of the given rank-2 tensor, where <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf T\|_\infty = \max_i \sum_j |T_{ij}|$" src="form_861.png"/></picture> (maximum of the sums over rows). </p>
 
 <p class="definition">Definition at line <a class="el" href="tensor_8h_source.html#href_anchor">3061</a> of file <a class="el" href="tensor_8h_source.html">tensor.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPolarManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPolarManifold.html	2024-03-17 21:57:35.351184319 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPolarManifold.html	2024-03-17 21:57:35.355184343 +0000
@@ -447,7 +447,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given a point in the spacedim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> that maps from the polar coordinate system to the Euclidean coordinate system. In other words, it is a matrix of size <picture><source srcset="form_1435_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{spacedim}$" src="form_1435.png"/></picture>.</p>
+<p>Given a point in the spacedim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> that maps from the polar coordinate system to the Euclidean coordinate system. In other words, it is a matrix of size <picture><source srcset="form_1462_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{spacedim}$" src="form_1462.png"/></picture>.</p>
 <p>This function is used in the computations required by the <a class="el" href="classChartManifold.html#href_anchor">get_tangent_vector()</a> function.</p>
 <p>Refer to the general documentation of this class for more information. </p>
 
@@ -687,7 +687,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
+<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
 <p>This function is used in the computations required by the <a class="el" href="classChartManifold.html#href_anchor">get_tangent_vector()</a> function. Since not all users of the <a class="el" href="classManifold.html">Manifold</a> class interface will require calling that function, the current function is implemented but will trigger an exception whenever called. This allows derived classes to avoid implementing the push_forward_gradient function if this functionality is not needed in the user program.</p>
 <p>Refer to the general documentation of this class for more information. </p>
 
@@ -721,24 +721,24 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a vector that, at <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1427.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
-<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1442.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
-<picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>Return a vector that, at <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1429.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
+<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1439.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
+<picture><source srcset="form_1440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \zeta(t) &amp;= \xi_1 +  t (\xi_2-\xi_1)
  \\          &amp;= F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                             -F^{-1}(\mathbf x_1)\right]
-\end{align*}" src="form_1443.png"/></picture>
+\end{align*}" src="form_1440.png"/></picture>
 </p>
 <p> In image space, i.e., in the space in which we operate, this leads to the curve  </p><p class="formulaDsp">
-<picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_1441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s(t) &amp;= F(\zeta(t))
  \\          &amp;= F(\xi_1 +  t (\xi_2-\xi_1))
  \\          &amp;= F\left(F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                     -F^{-1}(\mathbf x_1)\right]\right).
-\end{align*}" src="form_1444.png"/></picture>
+\end{align*}" src="form_1441.png"/></picture>
 </p>
-<p> What the current function is supposed to return is <picture><source srcset="form_1431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1431.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
-<picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> What the current function is supposed to return is <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1433.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
+<picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s'(0) &amp;=
     \frac{d}{dt}\left. F\left(F^{-1}(\mathbf x_1)
                        + t\left[F^{-1}(\mathbf x_2)
@@ -747,11 +747,11 @@
 \\ &amp;= \nabla_\xi F\left(F^{-1}(\mathbf x_1)\right)
                    \left[F^{-1}(\mathbf x_2)
                                 -F^{-1}(\mathbf x_1)\right].
-\end{align*}" src="form_1445.png"/></picture>
+\end{align*}" src="form_1442.png"/></picture>
 </p>
 <p> This formula may then have to be slightly modified by considering any periodicity that was assumed in the call to the constructor.</p>
-<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1446.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1447.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
-x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1448.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
+<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1443.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1444.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
+x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1445.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">x1</td><td>The first point that describes the geodesic, and the one at which the "direction" is to be evaluated. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomialsBernardiRaugel.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomialsBernardiRaugel.html	2024-03-17 21:57:35.387184541 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomialsBernardiRaugel.html	2024-03-17 21:57:35.387184541 +0000
@@ -143,7 +143,7 @@
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
 class PolynomialsBernardiRaugel&lt; dim &gt;</div><p>This class implements the Bernardi-Raugel polynomials similarly to the description in the <em>Mathematics of Computation</em> paper from 1985 by Christine Bernardi and Geneviève Raugel.</p>
 <p>The Bernardi-Raugel polynomials are originally defined as an enrichment of the <picture><source srcset="form_650_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(P_1)^d$" src="form_650.png"/></picture> elements on simplicial meshes for Stokes problems by the addition of bubble functions, yielding a locking-free finite element which is a subset of <picture><source srcset="form_651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(P_2)^d$" src="form_651.png"/></picture> elements. This implementation is an enrichment of <picture><source srcset="form_652_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(Q_1)^d$" src="form_652.png"/></picture> elements which is a subset of <picture><source srcset="form_653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(Q_2)^d$" src="form_653.png"/></picture> elements for quadrilateral and hexahedral meshes.</p>
-<p>The <picture><source srcset="form_654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$BR_1$" src="form_654.png"/></picture> bubble functions are defined to have magnitude 1 at the center of face <picture><source srcset="form_655_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_i$" src="form_655.png"/></picture> and direction <picture><source srcset="form_148_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}_i$" src="form_148.png"/></picture> normal to face <picture><source srcset="form_655_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_i$" src="form_655.png"/></picture>, and magnitude 0 on all other vertices and faces. Ordering is consistent with the face numbering in <a class="el" href="structGeometryInfo.html">GeometryInfo</a>. The vector <picture><source srcset="form_148_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}_i$" src="form_148.png"/></picture> points in the positive axis direction and not necessarily normal to the element for consistent orientation across edges. </p><dl>
+<p>The <picture><source srcset="form_654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$BR_1$" src="form_654.png"/></picture> bubble functions are defined to have magnitude 1 at the center of face <picture><source srcset="form_655_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_i$" src="form_655.png"/></picture> and direction <picture><source srcset="form_122_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}_i$" src="form_122.png"/></picture> normal to face <picture><source srcset="form_655_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_i$" src="form_655.png"/></picture>, and magnitude 0 on all other vertices and faces. Ordering is consistent with the face numbering in <a class="el" href="structGeometryInfo.html">GeometryInfo</a>. The vector <picture><source srcset="form_122_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}_i$" src="form_122.png"/></picture> points in the positive axis direction and not necessarily normal to the element for consistent orientation across edges. </p><dl>
 <dt>2d bubble functions (in order) </dt>
 <dd><picture><source srcset="form_599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=0$" src="form_599.png"/></picture> edge: <picture><source srcset="form_656_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{p}_1 = \mathbf{n}_1 (1-x)(y)(1-y)$" src="form_656.png"/></picture> <pre class="fragment"> @f$x=1@f$ edge: @f$\mathbf{p}_2 = \mathbf{n}_2 (x)(y)(1-y)@f$
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomialsBernstein.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomialsBernstein.html	2024-03-17 21:57:35.431184813 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomialsBernstein.html	2024-03-17 21:57:35.431184813 +0000
@@ -1232,7 +1232,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture>. </p>
+<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="polynomial_8h_source.html#href_anchor">314</a> of file <a class="el" href="polynomial_8h_source.html">polynomial.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1HermiteInterpolation.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1HermiteInterpolation.html	2024-03-17 21:57:35.471185060 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1HermiteInterpolation.html	2024-03-17 21:57:35.475185085 +0000
@@ -1184,7 +1184,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture>. </p>
+<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="polynomial_8h_source.html#href_anchor">314</a> of file <a class="el" href="polynomial_8h_source.html">polynomial.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1HermiteLikeInterpolation.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1HermiteLikeInterpolation.html	2024-03-17 21:57:35.519185357 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1HermiteLikeInterpolation.html	2024-03-17 21:57:35.523185382 +0000
@@ -1200,7 +1200,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture>. </p>
+<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="polynomial_8h_source.html#href_anchor">314</a> of file <a class="el" href="polynomial_8h_source.html">polynomial.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Hierarchical.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Hierarchical.html	2024-03-17 21:57:35.571185678 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Hierarchical.html	2024-03-17 21:57:35.575185702 +0000
@@ -1271,7 +1271,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture>. </p>
+<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="polynomial_8h_source.html#href_anchor">314</a> of file <a class="el" href="polynomial_8h_source.html">polynomial.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1LagrangeEquidistant.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1LagrangeEquidistant.html	2024-03-17 21:57:35.615185950 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1LagrangeEquidistant.html	2024-03-17 21:57:35.623185999 +0000
@@ -1213,7 +1213,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture>. </p>
+<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="polynomial_8h_source.html#href_anchor">314</a> of file <a class="el" href="polynomial_8h_source.html">polynomial.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Legendre.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Legendre.html	2024-03-17 21:57:35.659186221 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Legendre.html	2024-03-17 21:57:35.663186246 +0000
@@ -1174,7 +1174,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture>. </p>
+<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="polynomial_8h_source.html#href_anchor">314</a> of file <a class="el" href="polynomial_8h_source.html">polynomial.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Lobatto.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Lobatto.html	2024-03-17 21:57:35.711186542 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Lobatto.html	2024-03-17 21:57:35.715186567 +0000
@@ -219,7 +219,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p><a class="el" href="classPolynomials_1_1Lobatto.html">Lobatto</a> polynomials of arbitrary degree on <code>[0,1]</code>.</p>
-<p>These polynomials are the integrated <a class="el" href="classPolynomials_1_1Legendre.html">Legendre</a> polynomials on [0,1]. The first two polynomials are the standard linear shape functions given by <picture><source srcset="form_583_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_0(x) = 1-x$" src="form_583.png"/></picture> and <picture><source srcset="form_584_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1(x) = x$" src="form_584.png"/></picture>. For <picture><source srcset="form_585_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i\geq2$" src="form_585.png"/></picture> we use the definition <picture><source srcset="form_586_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_i(x) = \frac{1}{\Vert L_{i-1}\Vert_2}\int_0^x L_{i-1}(t)\,dt$" src="form_586.png"/></picture>, where <picture><source srcset="form_587_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_i$" src="form_587.png"/></picture> denotes the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>-th <a class="el" href="classPolynomials_1_1Legendre.html">Legendre</a> polynomial on <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture>. The <a class="el" href="classPolynomials_1_1Lobatto.html">Lobatto</a> polynomials <picture><source srcset="form_588_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_0,\ldots,l_k$" src="form_588.png"/></picture> form a complete basis of the polynomials space of degree <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>.</p>
+<p>These polynomials are the integrated <a class="el" href="classPolynomials_1_1Legendre.html">Legendre</a> polynomials on [0,1]. The first two polynomials are the standard linear shape functions given by <picture><source srcset="form_583_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_0(x) = 1-x$" src="form_583.png"/></picture> and <picture><source srcset="form_584_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1(x) = x$" src="form_584.png"/></picture>. For <picture><source srcset="form_585_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i\geq2$" src="form_585.png"/></picture> we use the definition <picture><source srcset="form_586_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_i(x) = \frac{1}{\Vert L_{i-1}\Vert_2}\int_0^x L_{i-1}(t)\,dt$" src="form_586.png"/></picture>, where <picture><source srcset="form_587_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_i$" src="form_587.png"/></picture> denotes the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>-th <a class="el" href="classPolynomials_1_1Legendre.html">Legendre</a> polynomial on <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture>. The <a class="el" href="classPolynomials_1_1Lobatto.html">Lobatto</a> polynomials <picture><source srcset="form_588_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_0,\ldots,l_k$" src="form_588.png"/></picture> form a complete basis of the polynomials space of degree <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>.</p>
 <p>Calling the constructor with a given index <code>k</code> will generate the polynomial with index <code>k</code>. But only for <picture><source srcset="form_589_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k\geq 1$" src="form_589.png"/></picture> the index equals the degree of the polynomial. For <code>k==0</code> also a polynomial of degree 1 is generated.</p>
 <p>These polynomials are used for the construction of the shape functions of N&eacute;d&eacute;lec elements of arbitrary order. </p>
 
@@ -1204,7 +1204,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture>. </p>
+<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="polynomial_8h_source.html#href_anchor">314</a> of file <a class="el" href="polynomial_8h_source.html">polynomial.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Monomial.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Monomial.html	2024-03-17 21:57:35.759186839 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Monomial.html	2024-03-17 21:57:35.763186864 +0000
@@ -1277,7 +1277,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture>. </p>
+<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="polynomial_8h_source.html#href_anchor">314</a> of file <a class="el" href="polynomial_8h_source.html">polynomial.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Polynomial.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Polynomial.html	2024-03-17 21:57:35.807187135 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1Polynomial.html	2024-03-17 21:57:35.811187160 +0000
@@ -1204,7 +1204,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture>. </p>
+<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="polynomial_8h_source.html#href_anchor">314</a> of file <a class="el" href="polynomial_8h_source.html">polynomial.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1PolynomialsHermite.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1PolynomialsHermite.html	2024-03-17 21:57:35.859187456 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classPolynomials_1_1PolynomialsHermite.html	2024-03-17 21:57:35.867187506 +0000
@@ -226,7 +226,7 @@
 <tr class="separator:a7e0d86893427a935e46d5bd6dcbc3f78"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>This class implements Hermite interpolation polynomials (see <b>[CiarletRiavart1972interpolation]</b>) enforcing the maximum possible level of regularity <picture><source srcset="form_414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_414.png"/></picture> in the FEM basis given a polynomial degree of <picture><source srcset="form_661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2r+1$" src="form_661.png"/></picture>. The polynomials all represent either a non-zero shape value or derivative at <picture><source srcset="form_599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=0$" src="form_599.png"/></picture> and <picture><source srcset="form_600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=1$" src="form_600.png"/></picture> on the reference interval <picture><source srcset="form_662_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x \in [0,1]$" src="form_662.png"/></picture>.</p>
+<div class="textblock"><p>This class implements Hermite interpolation polynomials (see <b>[CiarletRiavart1972interpolation]</b>) enforcing the maximum possible level of regularity <picture><source srcset="form_378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_378.png"/></picture> in the FEM basis given a polynomial degree of <picture><source srcset="form_661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2r+1$" src="form_661.png"/></picture>. The polynomials all represent either a non-zero shape value or derivative at <picture><source srcset="form_599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=0$" src="form_599.png"/></picture> and <picture><source srcset="form_600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=1$" src="form_600.png"/></picture> on the reference interval <picture><source srcset="form_662_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x \in [0,1]$" src="form_662.png"/></picture>.</p>
 <p>Indices <picture><source srcset="form_663_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j = 0, 1, \dots, r$" src="form_663.png"/></picture> refer to polynomials corresponding to a non-zero derivative (or shape value for <picture><source srcset="form_664_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=0$" src="form_664.png"/></picture>) of order <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> at <picture><source srcset="form_599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=0$" src="form_599.png"/></picture>, and indices <picture><source srcset="form_666_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j = r+1, r+2, \dots, 2r+1$" src="form_666.png"/></picture> refer to polynomials with a non-zero derivative of order <picture><source srcset="form_667_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j-(r+1)$" src="form_667.png"/></picture> (or value for <picture><source srcset="form_668_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=r+1$" src="form_668.png"/></picture>) at <picture><source srcset="form_600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=1$" src="form_600.png"/></picture>. In particular, the <picture><source srcset="form_669_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0^{th}$" src="form_669.png"/></picture> function has a value of <picture><source srcset="form_670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1$" src="form_670.png"/></picture> at <picture><source srcset="form_599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=0$" src="form_599.png"/></picture>, and the <picture><source srcset="form_671_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(r+1)^{th}$" src="form_671.png"/></picture> function has a value of <picture><source srcset="form_670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1$" src="form_670.png"/></picture> at <picture><source srcset="form_600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=1$" src="form_600.png"/></picture>.The basis is rescaled such that a function corresponding to a non-zero <picture><source srcset="form_672_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j^{th}$" src="form_672.png"/></picture> derivative has derivative value <picture><source srcset="form_673_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j! 4^{j}$" src="form_673.png"/></picture> at the corresponding node. This is done to prevent the <picture><source srcset="form_674_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^{2}$" src="form_674.png"/></picture>-norm of the basis functions from reducing exponentially with the chosen regularity. </p>
 
 <p class="definition">Definition at line <a class="el" href="polynomials__hermite_8h_source.html#href_anchor">61</a> of file <a class="el" href="polynomials__hermite_8h_source.html">polynomials_hermite.h</a>.</p>
@@ -1197,7 +1197,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>The order of the highest derivative in which the Hermite basis can be used to impose continuity across element boundaries. It's related to the degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> by <picture><source srcset="form_689_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p = 2 \times\mathtt{regularity} +1$" src="form_689.png"/></picture>. </p>
+<p>The order of the highest derivative in which the Hermite basis can be used to impose continuity across element boundaries. It's related to the degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> by <picture><source srcset="form_689_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p = 2 \times\mathtt{regularity} +1$" src="form_689.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="polynomials__hermite_8h_source.html#href_anchor">132</a> of file <a class="el" href="polynomials__hermite_8h_source.html">polynomials_hermite.h</a>.</p>
 
@@ -1323,7 +1323,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture>. </p>
+<p>If the polynomial is in Lagrange product form, i.e., constructed as a product <picture><source srcset="form_624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x-x_0) (x-x_1) \ldots (x-x_n)/c$" src="form_624.png"/></picture>, store the shifts <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="polynomial_8h_source.html#href_anchor">314</a> of file <a class="el" href="polynomial_8h_source.html">polynomial.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussChebyshev.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussChebyshev.html	2024-03-17 21:57:35.903187728 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussChebyshev.html	2024-03-17 21:57:35.903187728 +0000
@@ -197,7 +197,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class QGaussChebyshev&lt; dim &gt;</div><p>Gauss-Chebyshev quadrature rules integrate the weighted product <picture><source srcset="form_745_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{-1}^1 f(x) w(x) dx$" src="form_745.png"/></picture> with weight given by: <picture><source srcset="form_746_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w(x) = 1/\sqrt{1-x^2}$" src="form_746.png"/></picture>. The nodes and weights are known analytically, and are exact for monomials up to the order <picture><source srcset="form_747_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2n-1$" src="form_747.png"/></picture>, where <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> is the number of quadrature points. Here we rescale the quadrature formula so that it is defined on the interval <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture> instead of <picture><source srcset="form_582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]$" src="form_582.png"/></picture>. So the quadrature formulas integrate exactly the integral <picture><source srcset="form_748_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_0^1 f(x) w(x) dx$" src="form_748.png"/></picture> with the weight: <picture><source srcset="form_749_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w(x) =
+class QGaussChebyshev&lt; dim &gt;</div><p>Gauss-Chebyshev quadrature rules integrate the weighted product <picture><source srcset="form_745_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{-1}^1 f(x) w(x) dx$" src="form_745.png"/></picture> with weight given by: <picture><source srcset="form_746_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w(x) = 1/\sqrt{1-x^2}$" src="form_746.png"/></picture>. The nodes and weights are known analytically, and are exact for monomials up to the order <picture><source srcset="form_747_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2n-1$" src="form_747.png"/></picture>, where <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> is the number of quadrature points. Here we rescale the quadrature formula so that it is defined on the interval <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture> instead of <picture><source srcset="form_582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]$" src="form_582.png"/></picture>. So the quadrature formulas integrate exactly the integral <picture><source srcset="form_748_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_0^1 f(x) w(x) dx$" src="form_748.png"/></picture> with the weight: <picture><source srcset="form_749_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w(x) =
 1/\sqrt{x(1-x)}$" src="form_749.png"/></picture>. For details see: M. Abramowitz &amp; I.A. Stegun: Handbook of Mathematical <a class="el" href="namespaceFunctions.html">Functions</a>, par. 25.4.38 </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__lib_8h_source.html#href_anchor">493</a> of file <a class="el" href="quadrature__lib_8h_source.html">quadrature_lib.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLobatto.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLobatto.html	2024-03-17 21:57:35.943187976 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLobatto.html	2024-03-17 21:57:35.943187976 +0000
@@ -198,7 +198,7 @@
 class QGaussLobatto&lt; dim &gt;</div><p>The Gauss-Lobatto family of quadrature rules for numerical integration.</p>
 <p>This modification of the Gauss quadrature uses the two interval end points as well. Being exact for polynomials of degree <em>2n-3</em>, this formula is suboptimal by two degrees.</p>
 <p>The quadrature points are interval end points plus the roots of the derivative of the Legendre polynomial <em>P<sub>n-1</sub></em> of degree <em>n-1</em>. The quadrature weights are <em>2/(n(n-1)(P<sub>n-1</sub>(x<sub>i</sub>)<sup>2</sup>)</em>.</p>
-<dl class="section note"><dt>Note</dt><dd>This implementation has not been optimized concerning numerical stability and efficiency. It can be easily adapted to the general case of Gauss-Lobatto-Jacobi-Bouzitat quadrature with arbitrary parameters <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture>, <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture>, of which the Gauss-Lobatto-Legendre quadrature ( <picture><source srcset="form_722_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha
+<dl class="section note"><dt>Note</dt><dd>This implementation has not been optimized concerning numerical stability and efficiency. It can be easily adapted to the general case of Gauss-Lobatto-Jacobi-Bouzitat quadrature with arbitrary parameters <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture>, <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture>, of which the Gauss-Lobatto-Legendre quadrature ( <picture><source srcset="form_722_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha
 = \beta = 0$" src="form_722.png"/></picture>) is a special case.</dd></dl>
 <dl class="section see"><dt>See also</dt><dd><a href="http://en.wikipedia.org/wiki/Handbook_of_Mathematical_Functions">http://en.wikipedia.org/wiki/Handbook_of_Mathematical_Functions</a> </dd>
 <dd>
/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLobattoChebyshev.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLobattoChebyshev.html	2024-03-17 21:57:35.975188174 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLobattoChebyshev.html	2024-03-17 21:57:35.983188222 +0000
@@ -197,7 +197,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class QGaussLobattoChebyshev&lt; dim &gt;</div><p>Gauss-Lobatto-Chebyshev quadrature rules integrate the weighted product <picture><source srcset="form_745_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{-1}^1 f(x) w(x) dx$" src="form_745.png"/></picture> with weight given by: <picture><source srcset="form_746_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w(x) = 1/\sqrt{1-x^2}$" src="form_746.png"/></picture>, with the additional constraint that two of the quadrature points are located at the endpoints of the quadrature interval. The nodes and weights are known analytically, and are exact for monomials up to the order <picture><source srcset="form_752_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2n-3$" src="form_752.png"/></picture>, where <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> is the number of quadrature points. Here we rescale the quadrature formula so that it is defined on the interval <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture> instead of <picture><source srcset="form_582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]$" src="form_582.png"/></picture>. So the quadrature formulas integrate exactly the integral <picture><source srcset="form_748_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_0^1 f(x) w(x) dx$" src="form_748.png"/></picture> with the weight: <picture><source srcset="form_751_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w(x) = 1/\sqrt{x(1-x)}$" src="form_751.png"/></picture>. For details see: M. Abramowitz &amp; I.A. Stegun: Handbook of Mathematical <a class="el" href="namespaceFunctions.html">Functions</a>, par. 25.4.40 </p>
+class QGaussLobattoChebyshev&lt; dim &gt;</div><p>Gauss-Lobatto-Chebyshev quadrature rules integrate the weighted product <picture><source srcset="form_745_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{-1}^1 f(x) w(x) dx$" src="form_745.png"/></picture> with weight given by: <picture><source srcset="form_746_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w(x) = 1/\sqrt{1-x^2}$" src="form_746.png"/></picture>, with the additional constraint that two of the quadrature points are located at the endpoints of the quadrature interval. The nodes and weights are known analytically, and are exact for monomials up to the order <picture><source srcset="form_752_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2n-3$" src="form_752.png"/></picture>, where <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> is the number of quadrature points. Here we rescale the quadrature formula so that it is defined on the interval <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture> instead of <picture><source srcset="form_582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]$" src="form_582.png"/></picture>. So the quadrature formulas integrate exactly the integral <picture><source srcset="form_748_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_0^1 f(x) w(x) dx$" src="form_748.png"/></picture> with the weight: <picture><source srcset="form_751_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w(x) = 1/\sqrt{x(1-x)}$" src="form_751.png"/></picture>. For details see: M. Abramowitz &amp; I.A. Stegun: Handbook of Mathematical <a class="el" href="namespaceFunctions.html">Functions</a>, par. 25.4.40 </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__lib_8h_source.html#href_anchor">561</a> of file <a class="el" href="quadrature__lib_8h_source.html">quadrature_lib.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLog.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLog.html	2024-03-17 21:57:36.019188445 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLog.html	2024-03-17 21:57:36.023188470 +0000
@@ -203,8 +203,8 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class QGaussLog&lt; dim &gt;</div><p>A class for Gauss quadrature with logarithmic weighting function. This formula is used to integrate <picture><source srcset="form_723_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ln|x|\;f(x)$" src="form_723.png"/></picture> on the interval <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture>, where <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> is a smooth function without singularities. The collection of quadrature points and weights has been obtained using <code>Numerical Recipes</code>.</p>
-<p>Notice that only the function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture> should be provided, i.e., <picture><source srcset="form_724_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_0^1
+class QGaussLog&lt; dim &gt;</div><p>A class for Gauss quadrature with logarithmic weighting function. This formula is used to integrate <picture><source srcset="form_723_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ln|x|\;f(x)$" src="form_723.png"/></picture> on the interval <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture>, where <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> is a smooth function without singularities. The collection of quadrature points and weights has been obtained using <code>Numerical Recipes</code>.</p>
+<p>Notice that only the function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture> should be provided, i.e., <picture><source srcset="form_724_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_0^1
 f(x) \ln|x| dx = \sum_{i=0}^N w_i f(q_i)$" src="form_724.png"/></picture>. Setting the <code>revert</code> flag to true at construction time switches the weight from <picture><source srcset="form_725_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ln|x|$" src="form_725.png"/></picture> to <picture><source srcset="form_726_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ln|1-x|$" src="form_726.png"/></picture>.</p>
 <p>The weights and functions have been tabulated up to order 12. </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLogR.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLogR.html	2024-03-17 21:57:36.067188741 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussLogR.html	2024-03-17 21:57:36.067188741 +0000
@@ -198,15 +198,15 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class QGaussLogR&lt; dim &gt;</div><p>A class for Gauss quadrature with arbitrary logarithmic weighting function. This formula is used to integrate <picture><source srcset="form_727_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ln(|x-x_0|/\alpha)\;f(x)$" src="form_727.png"/></picture> on the interval <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture>, where <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> is a smooth function without singularities, and <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture> and <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> are given at construction time, and are the location of the singularity <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture> and an arbitrary scaling factor in the singularity.</p>
-<p>You have to make sure that the point <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture> is not one of the Gauss quadrature points of order <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture>, otherwise an exception is thrown, since the quadrature weights cannot be computed correctly.</p>
+class QGaussLogR&lt; dim &gt;</div><p>A class for Gauss quadrature with arbitrary logarithmic weighting function. This formula is used to integrate <picture><source srcset="form_727_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ln(|x-x_0|/\alpha)\;f(x)$" src="form_727.png"/></picture> on the interval <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture>, where <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> is a smooth function without singularities, and <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture> and <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> are given at construction time, and are the location of the singularity <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture> and an arbitrary scaling factor in the singularity.</p>
+<p>You have to make sure that the point <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture> is not one of the Gauss quadrature points of order <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture>, otherwise an exception is thrown, since the quadrature weights cannot be computed correctly.</p>
 <p>This quadrature formula is rather expensive, since it uses internally two Gauss quadrature formulas of order n to integrate the nonsingular part of the factor, and two GaussLog quadrature formulas to integrate on the separate segments <picture><source srcset="form_728_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,x_0]$" src="form_728.png"/></picture> and <picture><source srcset="form_729_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[x_0,1]$" src="form_729.png"/></picture>. If the singularity is one of the extremes and the factor alpha is 1, then this quadrature is the same as <a class="el" href="classQGaussLog.html">QGaussLog</a>.</p>
 <p>The last argument from the constructor allows you to use this quadrature rule in one of two possible ways: </p><p class="formulaDsp">
 <picture><source srcset="form_730_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_0^1 g(x) dx = \int_0^1 f(x)
 \ln\left(\frac{|x-x_0|}{\alpha}\right) dx = \sum_{i=0}^N w_i g(q_i) =
 \sum_{i=0}^N \bar{w}_i f(q_i) \]" src="form_730.png"/></picture>
 </p>
-<p>Which one of the two sets of weights is provided, can be selected by the <code>factor_out_singular_weight</code> parameter. If it is false (the default), then the <picture><source srcset="form_731_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{w}_i$" src="form_731.png"/></picture> weights are computed, and you should provide only the smooth function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, since the singularity is included inside the quadrature. If the parameter is set to true, then the singularity is factored out of the quadrature formula, and you should provide a function <picture><source srcset="form_47_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(x)$" src="form_47.png"/></picture>, which should at least be similar to <picture><source srcset="form_732_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ln(|x-x_0|/\alpha)$" src="form_732.png"/></picture>.</p>
+<p>Which one of the two sets of weights is provided, can be selected by the <code>factor_out_singular_weight</code> parameter. If it is false (the default), then the <picture><source srcset="form_731_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{w}_i$" src="form_731.png"/></picture> weights are computed, and you should provide only the smooth function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, since the singularity is included inside the quadrature. If the parameter is set to true, then the singularity is factored out of the quadrature formula, and you should provide a function <picture><source srcset="form_28_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(x)$" src="form_28.png"/></picture>, which should at least be similar to <picture><source srcset="form_732_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ln(|x-x_0|/\alpha)$" src="form_732.png"/></picture>.</p>
 <p>Notice that this quadrature rule is worthless if you try to use it for regular functions once you factored out the singularity.</p>
 <p>The weights and functions have been tabulated up to order 12. </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussOneOverR.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussOneOverR.html	2024-03-17 21:57:36.107188988 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussOneOverR.html	2024-03-17 21:57:36.111189013 +0000
@@ -203,9 +203,9 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class QGaussOneOverR&lt; dim &gt;</div><p>A class for Gauss quadrature with <picture><source srcset="form_733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/R$" src="form_733.png"/></picture> weighting function. This formula can be used to integrate <picture><source srcset="form_734_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/R \ f(x)$" src="form_734.png"/></picture> on the reference element <picture><source srcset="form_735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]^2$" src="form_735.png"/></picture>, where <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> is a smooth function without singularities, and <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> is the distance from the point <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> to the vertex <picture><source srcset="form_551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi$" src="form_551.png"/></picture>, given at construction time by specifying its index. Notice that this distance is evaluated in the reference element.</p>
-<p>This quadrature formula is obtained from two <a class="el" href="classQGauss.html">QGauss</a> quadrature formulas, upon transforming them into polar coordinate system centered at the singularity, and then again into another reference element. This allows for the singularity to be cancelled by part of the Jacobian of the transformation, which contains <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture>. In practice the reference element is transformed into a triangle by collapsing one of the sides adjacent to the singularity. The Jacobian of this transformation contains <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture>, which is removed before scaling the original quadrature, and this process is repeated for the next half element.</p>
-<p>Upon construction it is possible to specify whether we want the singularity removed, or not. In other words, this quadrature can be used to integrate <picture><source srcset="form_736_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(x) = 1/R\ f(x)$" src="form_736.png"/></picture>, or simply <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, with the <picture><source srcset="form_733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/R$" src="form_733.png"/></picture> factor already included in the quadrature weights. </p>
+class QGaussOneOverR&lt; dim &gt;</div><p>A class for Gauss quadrature with <picture><source srcset="form_733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/R$" src="form_733.png"/></picture> weighting function. This formula can be used to integrate <picture><source srcset="form_734_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/R \ f(x)$" src="form_734.png"/></picture> on the reference element <picture><source srcset="form_735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]^2$" src="form_735.png"/></picture>, where <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> is a smooth function without singularities, and <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> is the distance from the point <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> to the vertex <picture><source srcset="form_551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi$" src="form_551.png"/></picture>, given at construction time by specifying its index. Notice that this distance is evaluated in the reference element.</p>
+<p>This quadrature formula is obtained from two <a class="el" href="classQGauss.html">QGauss</a> quadrature formulas, upon transforming them into polar coordinate system centered at the singularity, and then again into another reference element. This allows for the singularity to be cancelled by part of the Jacobian of the transformation, which contains <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture>. In practice the reference element is transformed into a triangle by collapsing one of the sides adjacent to the singularity. The Jacobian of this transformation contains <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture>, which is removed before scaling the original quadrature, and this process is repeated for the next half element.</p>
+<p>Upon construction it is possible to specify whether we want the singularity removed, or not. In other words, this quadrature can be used to integrate <picture><source srcset="form_736_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(x) = 1/R\ f(x)$" src="form_736.png"/></picture>, or simply <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, with the <picture><source srcset="form_733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/R$" src="form_733.png"/></picture> factor already included in the quadrature weights. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__lib_8h_source.html#href_anchor">291</a> of file <a class="el" href="quadrature__lib_8h_source.html">quadrature_lib.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussRadauChebyshev.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussRadauChebyshev.html	2024-03-17 21:57:36.151189260 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classQGaussRadauChebyshev.html	2024-03-17 21:57:36.151189260 +0000
@@ -205,7 +205,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class QGaussRadauChebyshev&lt; dim &gt;</div><p>Gauss-Radau-Chebyshev quadrature rules integrate the weighted product <picture><source srcset="form_745_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{-1}^1 f(x) w(x) dx$" src="form_745.png"/></picture> with weight given by: <picture><source srcset="form_746_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w(x) = 1/\sqrt{1-x^2}$" src="form_746.png"/></picture> with the additional constraint that a quadrature point lies at one of the two extrema of the interval. The nodes and weights are known analytically, and are exact for monomials up to the order <picture><source srcset="form_750_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2n-2$" src="form_750.png"/></picture>, where <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> is the number of quadrature points. Here we rescale the quadrature formula so that it is defined on the interval <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture> instead of <picture><source srcset="form_582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]$" src="form_582.png"/></picture>. So the quadrature formulas integrate exactly the integral <picture><source srcset="form_748_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_0^1 f(x) w(x) dx$" src="form_748.png"/></picture> with the weight: <picture><source srcset="form_751_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w(x) = 1/\sqrt{x(1-x)}$" src="form_751.png"/></picture>. By default the quadrature is constructed with the left endpoint as quadrature node, but the quadrature node can be imposed at the right endpoint through the variable ep that can assume the values left or right. </p>
+class QGaussRadauChebyshev&lt; dim &gt;</div><p>Gauss-Radau-Chebyshev quadrature rules integrate the weighted product <picture><source srcset="form_745_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{-1}^1 f(x) w(x) dx$" src="form_745.png"/></picture> with weight given by: <picture><source srcset="form_746_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w(x) = 1/\sqrt{1-x^2}$" src="form_746.png"/></picture> with the additional constraint that a quadrature point lies at one of the two extrema of the interval. The nodes and weights are known analytically, and are exact for monomials up to the order <picture><source srcset="form_750_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2n-2$" src="form_750.png"/></picture>, where <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> is the number of quadrature points. Here we rescale the quadrature formula so that it is defined on the interval <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture> instead of <picture><source srcset="form_582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]$" src="form_582.png"/></picture>. So the quadrature formulas integrate exactly the integral <picture><source srcset="form_748_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_0^1 f(x) w(x) dx$" src="form_748.png"/></picture> with the weight: <picture><source srcset="form_751_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w(x) = 1/\sqrt{x(1-x)}$" src="form_751.png"/></picture>. By default the quadrature is constructed with the left endpoint as quadrature node, but the quadrature node can be imposed at the right endpoint through the variable ep that can assume the values left or right. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__lib_8h_source.html#href_anchor">516</a> of file <a class="el" href="quadrature__lib_8h_source.html">quadrature_lib.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/classQR.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classQR.html	2024-03-17 21:57:36.183189458 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classQR.html	2024-03-17 21:57:36.187189482 +0000
@@ -333,28 +333,28 @@
 </table>
 </div><div class="memdoc">
 <p>Remove first column and update <a class="el" href="classQR.html">QR</a> factorization.</p>
-<p>Starting from the given <a class="el" href="classQR.html">QR</a> decomposition <picture><source srcset="form_1770_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$QR= A = [a_1\,\dots a_n], \quad a_i \in {\mathbb R}^m$" src="form_1770.png"/></picture> we aim at computing factorization of  <picture><source srcset="form_1771_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde Q \tilde R= \tilde A = [a_2\,\dots a_n], \quad a_i \in {\mathbb
-R}^m$" src="form_1771.png"/></picture>.</p>
-<p>The standard approach is to partition <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> as  </p><p class="formulaDsp">
-<picture><source srcset="form_1772_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Starting from the given <a class="el" href="classQR.html">QR</a> decomposition <picture><source srcset="form_1769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$QR= A = [a_1\,\dots a_n], \quad a_i \in {\mathbb R}^m$" src="form_1769.png"/></picture> we aim at computing factorization of  <picture><source srcset="form_1770_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde Q \tilde R= \tilde A = [a_2\,\dots a_n], \quad a_i \in {\mathbb
+R}^m$" src="form_1770.png"/></picture>.</p>
+<p>The standard approach is to partition <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> as  </p><p class="formulaDsp">
+<picture><source srcset="form_1771_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 R =
 \begin{bmatrix}
 r_{11} &amp; w^T \\
 0      &amp; R_{33}
 \end{bmatrix}
-\]" src="form_1772.png"/></picture>
+\]" src="form_1771.png"/></picture>
 </p>
 <p> It then follows that  </p><p class="formulaDsp">
-<picture><source srcset="form_1773_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1772_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 Q^T \tilde A =
 \begin{bmatrix}
 0 &amp; w^T \\
 0 &amp; R_{33}
 \end{bmatrix}
-\]" src="form_1773.png"/></picture>
+\]" src="form_1772.png"/></picture>
 </p>
 <p> is upper Hessenberg where unwanted sub-diagonal elements can be zeroed by a sequence of Givens rotations.</p>
-<p>Note that <picture><source srcset="form_1774_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde R^T \tilde R = \tilde A^T \tilde A$" src="form_1774.png"/></picture>, where the RHS is included in <picture><source srcset="form_1775_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^T A = R^T R$" src="form_1775.png"/></picture>. Therefore <picture><source srcset="form_1776_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde R$" src="form_1776.png"/></picture> can be obtained by Cholesky decomposition. </p>
+<p>Note that <picture><source srcset="form_1773_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde R^T \tilde R = \tilde A^T \tilde A$" src="form_1773.png"/></picture>, where the RHS is included in <picture><source srcset="form_1774_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^T A = R^T R$" src="form_1774.png"/></picture>. Therefore <picture><source srcset="form_1775_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde R$" src="form_1775.png"/></picture> can be obtained by Cholesky decomposition. </p>
 
 <p>Implements <a class="el" href="classBaseQR.html#href_anchor">BaseQR&lt; VectorType &gt;</a>.</p>
 
@@ -388,7 +388,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set <picture><source srcset="form_1764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = Qx$" src="form_1764.png"/></picture>. The size of <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> should be consistent with the size of the R matrix. </p>
+<p>Set <picture><source srcset="form_1763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = Qx$" src="form_1763.png"/></picture>. The size of <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> should be consistent with the size of the R matrix. </p>
 
 <p>Implements <a class="el" href="classBaseQR.html#href_anchor">BaseQR&lt; VectorType &gt;</a>.</p>
 
@@ -422,7 +422,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set <picture><source srcset="form_1765_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = Q^Tx$" src="form_1765.png"/></picture>. The size of <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> should be consistent with the size of column vectors. </p>
+<p>Set <picture><source srcset="form_1764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = Q^Tx$" src="form_1764.png"/></picture>. The size of <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> should be consistent with the size of column vectors. </p>
 
 <p>Implements <a class="el" href="classBaseQR.html#href_anchor">BaseQR&lt; VectorType &gt;</a>.</p>
 
@@ -456,7 +456,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set <picture><source srcset="form_1766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = QRx$" src="form_1766.png"/></picture>. The size of <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> should be consistent with the size of the R matrix. </p>
+<p>Set <picture><source srcset="form_1765_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = QRx$" src="form_1765.png"/></picture>. The size of <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> should be consistent with the size of the R matrix. </p>
 
 <p>Implements <a class="el" href="classBaseQR.html#href_anchor">BaseQR&lt; VectorType &gt;</a>.</p>
 
@@ -490,7 +490,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Set <picture><source srcset="form_1767_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = R^T Q^Tx$" src="form_1767.png"/></picture>. The size of <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> should be consistent with the size of column vectors. </p>
+<p>Set <picture><source srcset="form_1766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = R^T Q^Tx$" src="form_1766.png"/></picture>. The size of <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> should be consistent with the size of column vectors. </p>
 
 <p>Implements <a class="el" href="classBaseQR.html#href_anchor">BaseQR&lt; VectorType &gt;</a>.</p>
 
@@ -610,7 +610,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Solve <picture><source srcset="form_1762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Rx=y$" src="form_1762.png"/></picture>. Vectors <code>x</code> and <code>y</code> should be consistent with the current size of the subspace. If <code>transpose</code> is <code>true</code>, <picture><source srcset="form_1763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^Tx=y$" src="form_1763.png"/></picture> is solved instead. </p>
+<p>Solve <picture><source srcset="form_1761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Rx=y$" src="form_1761.png"/></picture>. Vectors <code>x</code> and <code>y</code> should be consistent with the current size of the subspace. If <code>transpose</code> is <code>true</code>, <picture><source srcset="form_1762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^Tx=y$" src="form_1762.png"/></picture> is solved instead. </p>
 
 </div>
 </div>
@@ -671,7 +671,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute <picture><source srcset="form_1768_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=Hx$" src="form_1768.png"/></picture> where <picture><source srcset="form_1769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H$" src="form_1769.png"/></picture> is the matrix formed by the column vectors stored by this object. </p>
+<p>Compute <picture><source srcset="form_1767_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=Hx$" src="form_1767.png"/></picture> where <picture><source srcset="form_1768_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H$" src="form_1768.png"/></picture> is the matrix formed by the column vectors stored by this object. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classQTelles.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classQTelles.html	2024-03-17 21:57:36.227189729 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classQTelles.html	2024-03-17 21:57:36.235189779 +0000
@@ -223,7 +223,7 @@
 \end{align*}" src="form_741.png"/></picture>
 </p>
 <p> Since the library assumes <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture> as reference interval, we will map these values on the proper reference interval in the implementation.</p>
-<p>This variable change can be used to integrate singular integrals. One example is <picture><source srcset="form_742_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)/|x-x_0|$" src="form_742.png"/></picture> on the reference interval <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture>, where <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture> is given at construction time, and is the location of the singularity <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture>, and <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture> is a smooth non singular function.</p>
+<p>This variable change can be used to integrate singular integrals. One example is <picture><source srcset="form_742_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)/|x-x_0|$" src="form_742.png"/></picture> on the reference interval <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture>, where <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture> is given at construction time, and is the location of the singularity <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture>, and <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture> is a smooth non singular function.</p>
 <p>Singular quadrature formula are rather expensive, nevertheless Telles' quadrature formula are much easier to compute with respect to other singular integration techniques as Lachat-Watson.</p>
 <p>We have implemented the case for <picture><source srcset="form_743_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim = 1$" src="form_743.png"/></picture>. When we deal the case <picture><source srcset="form_744_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim &gt;1$" src="form_744.png"/></picture> we have computed the quadrature formula has a tensorial product of one dimensional Telles' quadrature formulas considering the different components of the singularity.</p>
 <p>The weights and functions for Gauss Legendre formula have been tabulated up to order 12. </p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classQWitherdenVincentSimplex.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classQWitherdenVincentSimplex.html	2024-03-17 21:57:36.275190027 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classQWitherdenVincentSimplex.html	2024-03-17 21:57:36.275190027 +0000
@@ -200,7 +200,7 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
 class QWitherdenVincentSimplex&lt; dim &gt;</div><p>Witherden-Vincent rules for simplex entities.</p>
-<p>Like <a class="el" href="classQGauss.html">QGauss</a>, users should specify a number <code>n_points_1d</code> as an indication of what polynomial degree to be integrated exactly (e.g., for <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> points, the rule can integrate polynomials of degree <picture><source srcset="form_760_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2 n - 1$" src="form_760.png"/></picture> exactly). Additionally, since these rules were derived for simplices, there are also even-ordered rules (i.e., they integrate polynomials of degree <picture><source srcset="form_761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2 n$" src="form_761.png"/></picture>) available which do not have analogous 1d rules.</p>
+<p>Like <a class="el" href="classQGauss.html">QGauss</a>, users should specify a number <code>n_points_1d</code> as an indication of what polynomial degree to be integrated exactly (e.g., for <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> points, the rule can integrate polynomials of degree <picture><source srcset="form_760_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2 n - 1$" src="form_760.png"/></picture> exactly). Additionally, since these rules were derived for simplices, there are also even-ordered rules (i.e., they integrate polynomials of degree <picture><source srcset="form_761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2 n$" src="form_761.png"/></picture>) available which do not have analogous 1d rules.</p>
 <p>The given value for n_points_1d = 1, 2, 3, 4, 5, 6, 7 (where the last two are only implemented in 2d) results in the following number of quadrature points in 2d and 3d:</p><ul>
 <li>2d: odd (default): 1, 6, 7, 15, 19, 28, 37</li>
 <li>2d: even: 3, 6, 12, 16, 25, 33, 42</li>
/usr/share/doc/packages/dealii/doxygen/deal.II/classQuadrature.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classQuadrature.html	2024-03-17 21:57:36.319190298 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classQuadrature.html	2024-03-17 21:57:36.327190347 +0000
@@ -221,9 +221,9 @@
 <p>At least for quadrilaterals and hexahedra (or, more precisely, since we work on reference cells: for the unit square and the unit cube), quadrature formulas are typically tensor products of one-dimensional formulas (see also the section on implementation detail below).</p>
 <p>In order to allow for dimension independent programming, a quadrature formula of dimension zero exists. Since an integral over zero dimensions is the evaluation at a single point, any constructor of such a formula initializes to a single quadrature point with weight one. Access to the weight is possible, while access to the quadrature point is not permitted, since a <a class="el" href="classPoint.html">Point</a> of dimension zero contains no information. The main purpose of these formulae is their use in <a class="el" href="classQProjector.html">QProjector</a>, which will create a useful formula of dimension one out of them.</p>
 <h3>Mathematical background</h3>
-<p>For each quadrature formula we denote by <code>m</code>, the maximal degree of polynomials integrated exactly on the reference cell the quadrature formula corresponds to. This number is given in the documentation of each formula. The <em>order</em> of the integration error is <code>m+1</code>, that is, the error is the size of the cell to the <code>m+1</code> by the Bramble-Hilbert Lemma. The number <code>m</code> is to be found in the documentation of each concrete formula. For the optimal formulae <a class="el" href="classQGauss.html">QGauss</a> we have <picture><source srcset="form_720_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m = 2N-1$" src="form_720.png"/></picture>, where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> is the constructor parameter to <a class="el" href="classQGauss.html">QGauss</a>. The tensor product formulae are exact on tensor product polynomials of degree <code>m</code> in each space direction, but they are still only of <code>(m+1)</code>st order.</p>
+<p>For each quadrature formula we denote by <code>m</code>, the maximal degree of polynomials integrated exactly on the reference cell the quadrature formula corresponds to. This number is given in the documentation of each formula. The <em>order</em> of the integration error is <code>m+1</code>, that is, the error is the size of the cell to the <code>m+1</code> by the Bramble-Hilbert Lemma. The number <code>m</code> is to be found in the documentation of each concrete formula. For the optimal formulae <a class="el" href="classQGauss.html">QGauss</a> we have <picture><source srcset="form_720_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m = 2N-1$" src="form_720.png"/></picture>, where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> is the constructor parameter to <a class="el" href="classQGauss.html">QGauss</a>. The tensor product formulae are exact on tensor product polynomials of degree <code>m</code> in each space direction, but they are still only of <code>(m+1)</code>st order.</p>
 <h3><a class="el" href="classTensor.html">Tensor</a> product quadrature</h3>
-<p>At least for hypercube reference cells (i.e., squares and cubes), most integration formulae in more than one space dimension are tensor products of quadrature formulae in one space dimension, or more generally the tensor product of a formula in <code>(dim-1)</code> dimensions and one in one dimension. There is a special constructor to generate a quadrature formula from two others. For example, the <a class="el" href="classQGauss.html">QGauss</a>&lt;dim&gt; formulae include <em>N<sup>dim</sup></em> quadrature points in <code>dim</code> dimensions, where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> is the constructor parameter of <a class="el" href="classQGauss.html">QGauss</a>.</p>
+<p>At least for hypercube reference cells (i.e., squares and cubes), most integration formulae in more than one space dimension are tensor products of quadrature formulae in one space dimension, or more generally the tensor product of a formula in <code>(dim-1)</code> dimensions and one in one dimension. There is a special constructor to generate a quadrature formula from two others. For example, the <a class="el" href="classQGauss.html">QGauss</a>&lt;dim&gt; formulae include <em>N<sup>dim</sup></em> quadrature points in <code>dim</code> dimensions, where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> is the constructor parameter of <a class="el" href="classQGauss.html">QGauss</a>.</p>
 <h3>Other uses of this class</h3>
 <p><a class="el" href="classQuadrature.html">Quadrature</a> objects are used in a number of places within deal.II where integration is performed, most notably via the <a class="el" href="classFEValues.html">FEValues</a> and related classes. Some of these classes are also used in contexts where no integrals are involved, but where functions need to be evaluated at specific points, for example to evaluate the solution at individual points or to create graphical output. Examples are the implementation of <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::point_value()</a> and the <a class="el" href="classDataOut.html">DataOut</a> and related classes (in particular in connection with the <a class="el" href="classDataPostprocessor.html">DataPostprocessor</a> class). In such contexts, one often creates specific "Quadrature" objects in which the "quadrature points" are simply the points (in the coordinate system of the reference cell) at which one wants to evaluate the solution. In these kinds of cases, the weights stored by the current class are not used and the name "quadrature object" is interpreted as "list of evaluation points". </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classReferenceCell.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classReferenceCell.html	2024-03-17 21:57:36.391190743 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classReferenceCell.html	2024-03-17 21:57:36.399190792 +0000
@@ -473,7 +473,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the value of the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>-th linear shape function at location <picture><source srcset="form_551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi$" src="form_551.png"/></picture> for the current reference-cell type. </p>
+<p>Compute the value of the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>-th linear shape function at location <picture><source srcset="form_551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi$" src="form_551.png"/></picture> for the current reference-cell type. </p>
 
 <p class="definition">Definition at line <a class="el" href="reference__cell_8h_source.html#href_anchor">2371</a> of file <a class="el" href="reference__cell_8h_source.html">reference_cell.h</a>.</p>
 
@@ -503,7 +503,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the gradient of the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>-th linear shape function at location <picture><source srcset="form_551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi$" src="form_551.png"/></picture> for the current reference-cell type. </p>
+<p>Compute the gradient of the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>-th linear shape function at location <picture><source srcset="form_551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi$" src="form_551.png"/></picture> for the current reference-cell type. </p>
 
 <p class="definition">Definition at line <a class="el" href="reference__cell_8h_source.html#href_anchor">2460</a> of file <a class="el" href="reference__cell_8h_source.html">reference_cell.h</a>.</p>
 
@@ -896,7 +896,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the reference-cell type of face <code>face_no</code> of the current object. For example, if the current object is <a class="el" href="namespaceReferenceCells.html#href_anchor">ReferenceCells::Tetrahedron</a>, then <code>face_no</code> must be between in the interval <picture><source srcset="form_1450_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,4)$" src="form_1450.png"/></picture> and the function will always return <a class="el" href="namespaceReferenceCells.html#href_anchor">ReferenceCells::Triangle</a>. If the current object is <a class="el" href="namespaceReferenceCells.html#href_anchor">ReferenceCells::Hexahedron</a>, then <code>face_no</code> must be between in the interval <picture><source srcset="form_1451_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,6)$" src="form_1451.png"/></picture> and the function will always return <a class="el" href="namespaceReferenceCells.html#href_anchor">ReferenceCells::Quadrilateral</a>. For wedges and pyramids, the returned object may be either <a class="el" href="namespaceReferenceCells.html#href_anchor">ReferenceCells::Triangle</a> or <a class="el" href="namespaceReferenceCells.html#href_anchor">ReferenceCells::Quadrilateral</a>, depending on the given index. </p>
+<p>Return the reference-cell type of face <code>face_no</code> of the current object. For example, if the current object is <a class="el" href="namespaceReferenceCells.html#href_anchor">ReferenceCells::Tetrahedron</a>, then <code>face_no</code> must be between in the interval <picture><source srcset="form_1467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,4)$" src="form_1467.png"/></picture> and the function will always return <a class="el" href="namespaceReferenceCells.html#href_anchor">ReferenceCells::Triangle</a>. If the current object is <a class="el" href="namespaceReferenceCells.html#href_anchor">ReferenceCells::Hexahedron</a>, then <code>face_no</code> must be between in the interval <picture><source srcset="form_1468_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,6)$" src="form_1468.png"/></picture> and the function will always return <a class="el" href="namespaceReferenceCells.html#href_anchor">ReferenceCells::Quadrilateral</a>. For wedges and pyramids, the returned object may be either <a class="el" href="namespaceReferenceCells.html#href_anchor">ReferenceCells::Triangle</a> or <a class="el" href="namespaceReferenceCells.html#href_anchor">ReferenceCells::Quadrilateral</a>, depending on the given index. </p>
 
 <p class="definition">Definition at line <a class="el" href="reference__cell_8h_source.html#href_anchor">1441</a> of file <a class="el" href="reference__cell_8h_source.html">reference_cell.h</a>.</p>
 
@@ -1319,7 +1319,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-dimensional volume of the reference cell that corresponds to the current object, where <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> is the dimension of the space it lives in. For example, since the quadrilateral reference cell is <picture><source srcset="form_735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]^2$" src="form_735.png"/></picture>, its volume is one, whereas the volume of the reference triangle is 0.5 because it occupies the area <picture><source srcset="form_1452_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{0 \le x,y \le 1, x+y\le 1\}$" src="form_1452.png"/></picture>.</p>
+<p>Return the <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-dimensional volume of the reference cell that corresponds to the current object, where <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> is the dimension of the space it lives in. For example, since the quadrilateral reference cell is <picture><source srcset="form_735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]^2$" src="form_735.png"/></picture>, its volume is one, whereas the volume of the reference triangle is 0.5 because it occupies the area <picture><source srcset="form_1469_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{0 \le x,y \le 1, x+y\le 1\}$" src="form_1469.png"/></picture>.</p>
 <p>For <a class="el" href="namespaceReferenceCells.html#href_anchor">ReferenceCells::Vertex</a>, the reference cell is a zero-dimensional point in a zero-dimensional space. As a consequence, one cannot meaningfully define a volume for it. The function returns one for this case, because this makes it possible to define useful quadrature rules based on the center of a reference cell and its volume. </p>
 
 <p class="definition">Definition at line <a class="el" href="reference__cell_8h_source.html#href_anchor">2494</a> of file <a class="el" href="reference__cell_8h_source.html">reference_cell.h</a>.</p>
@@ -1351,9 +1351,9 @@
 </table>
 </div><div class="memdoc">
 <p>Return the barycenter (i.e., the center of mass) of the reference cell that corresponds to the current object. The function is not called <code><a class="el" href="data__out__base_8cc.html#href_anchor">center()</a></code> because one can define the center of an object in a number of different ways whereas the barycenter of a reference cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is unambiguously defined as  </p><p class="formulaDsp">
-<picture><source srcset="form_1453_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1470_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf x_K = \frac{1}{V} \int_K \mathbf x \; dx
-\]" src="form_1453.png"/></picture>
+\]" src="form_1470.png"/></picture>
 </p>
 <p> where <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> is the volume of the reference cell (see also the <a class="el" href="#href_anchor">volume()</a> function). </p>
 
@@ -1385,7 +1385,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return true if the given point is inside the reference cell of the present space dimension up to some tolerance. This function accepts an additional parameter (which defaults to zero) which specifies by how much the point position may actually be outside the true reference cell. This is useful because in practice we may often not be able to compute the coordinates of a point in reference coordinates exactly, but only up to numerical roundoff. For example, strictly speaking one would expect that for points on the boundary of the reference cell, the function would return <code>true</code> if the tolerance was zero. But in practice, this may or may not actually be true; for example, the point <picture><source srcset="form_1454_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1/3, 2/3)$" src="form_1454.png"/></picture> is on the boundary of the reference triangle because <picture><source srcset="form_1455_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/3+2/3 \le 1$" src="form_1455.png"/></picture>, but since neither of its coordinates are exactly representable in floating point arithmetic, the floating point representations of <picture><source srcset="form_1456_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/3$" src="form_1456.png"/></picture> and <picture><source srcset="form_1457_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2/3$" src="form_1457.png"/></picture> may or may not add up to anything that is less than or equal to one.</p>
+<p>Return true if the given point is inside the reference cell of the present space dimension up to some tolerance. This function accepts an additional parameter (which defaults to zero) which specifies by how much the point position may actually be outside the true reference cell. This is useful because in practice we may often not be able to compute the coordinates of a point in reference coordinates exactly, but only up to numerical roundoff. For example, strictly speaking one would expect that for points on the boundary of the reference cell, the function would return <code>true</code> if the tolerance was zero. But in practice, this may or may not actually be true; for example, the point <picture><source srcset="form_1471_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1/3, 2/3)$" src="form_1471.png"/></picture> is on the boundary of the reference triangle because <picture><source srcset="form_1472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/3+2/3 \le 1$" src="form_1472.png"/></picture>, but since neither of its coordinates are exactly representable in floating point arithmetic, the floating point representations of <picture><source srcset="form_1473_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/3$" src="form_1473.png"/></picture> and <picture><source srcset="form_1474_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2/3$" src="form_1474.png"/></picture> may or may not add up to anything that is less than or equal to one.</p>
 <p>The tolerance parameter may be less than zero, indicating that the point should be safely inside the cell. </p>
 
 <p class="definition">Definition at line <a class="el" href="reference__cell_8h_source.html#href_anchor">2558</a> of file <a class="el" href="reference__cell_8h_source.html">reference_cell.h</a>.</p>
@@ -1438,8 +1438,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>-th unit tangential vector of a face of the reference cell. The vectors are arranged such that the cross product between the two vectors returns the unit normal vector.</p>
-<dl class="section pre"><dt>Precondition</dt><dd><picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> must be between zero and <code>dim-1</code>. </dd></dl>
+<p>Return <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>-th unit tangential vector of a face of the reference cell. The vectors are arranged such that the cross product between the two vectors returns the unit normal vector.</p>
+<dl class="section pre"><dt>Precondition</dt><dd><picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> must be between zero and <code>dim-1</code>. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="reference__cell_8h_source.html#href_anchor">2667</a> of file <a class="el" href="reference__cell_8h_source.html">reference_cell.h</a>.</p>
 
@@ -1791,7 +1791,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>legacy_format</em></span>&#href_anchor"memdoc">
-<p>Given a set of node indices of the form <picture><source srcset="form_1458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i)$" src="form_1458.png"/></picture> or <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> or <picture><source srcset="form_1309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1309.png"/></picture> (depending on whether the reference cell is in 1d, 2d, or 3d), return the index the VTK format uses for this node for cells that are subdivided as many times in each of the coordinate directions as described by the second argument. For a uniformly subdivided cell, the second argument is an array whose elements will all be equal.</p>
+<p>Given a set of node indices of the form <picture><source srcset="form_1475_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i)$" src="form_1475.png"/></picture> or <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> or <picture><source srcset="form_1253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j,k)$" src="form_1253.png"/></picture> (depending on whether the reference cell is in 1d, 2d, or 3d), return the index the VTK format uses for this node for cells that are subdivided as many times in each of the coordinate directions as described by the second argument. For a uniformly subdivided cell, the second argument is an array whose elements will all be equal.</p>
 <p>The last argument, <code>legacy_format</code>, indicates whether to use the old, VTK legacy format (when <code>true</code>) or the new, VTU format (when <code>false</code>). </p>
 
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1ARKode.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1ARKode.html	2024-03-17 21:57:36.455191137 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1ARKode.html	2024-03-17 21:57:36.455191137 +0000
@@ -198,85 +198,85 @@
 <p>The class <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> is a wrapper to <a class="el" href="namespaceSUNDIALS.html">SUNDIALS</a> variable-step, embedded, additive Runge-Kutta solver which is a general purpose solver for systems of ordinary differential equations characterized by the presence of both fast and slow dynamics.</p>
 <p>Fast dynamics are treated implicitly, and slow dynamics are treated explicitly, using nested families of implicit and explicit Runge-Kutta solvers.</p>
 <p>Citing directly from <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> documentation:</p>
-<p><a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> solves ODE initial value problems (IVPs) in <picture><source srcset="form_2619_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^N$" src="form_2619.png"/></picture>. These problems should be posed in explicit form as</p>
+<p><a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> solves ODE initial value problems (IVPs) in <picture><source srcset="form_2554_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^N$" src="form_2554.png"/></picture>. These problems should be posed in explicit form as</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2620_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2555_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     M\dot y = f_E(t, y) + f_I (t, y), \qquad y(t_0) = y_0.
-  \]" src="form_2620.png"/></picture>
+  \]" src="form_2555.png"/></picture>
 </p>
-<p>Here, <picture><source srcset="form_215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t$" src="form_215.png"/></picture> is the independent variable (e.g. time), and the dependent variables are given by <picture><source srcset="form_2621_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y \in R^N$" src="form_2621.png"/></picture>, and we use notation <picture><source srcset="form_2622_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dot y$" src="form_2622.png"/></picture> to denote <picture><source srcset="form_2623_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dy/dt$" src="form_2623.png"/></picture>. <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> is a user-supplied nonsingular operator from <picture><source srcset="form_2624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^N \to R^N$" src="form_2624.png"/></picture>. This operator may depend on <picture><source srcset="form_215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t$" src="form_215.png"/></picture> but not on <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>.</p>
-<p>For standard systems of ordinary differential equations and for problems arising from the spatial semi-discretization of partial differential equations using finite difference or finite volume methods, <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> is typically the identity matrix, <picture><source srcset="form_2098_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I$" src="form_2098.png"/></picture>. For PDEs using a finite-element spatial semi-discretization <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> is typically a well-conditioned mass matrix.</p>
+<p>Here, <picture><source srcset="form_189_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t$" src="form_189.png"/></picture> is the independent variable (e.g. time), and the dependent variables are given by <picture><source srcset="form_2556_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y \in R^N$" src="form_2556.png"/></picture>, and we use notation <picture><source srcset="form_2557_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dot y$" src="form_2557.png"/></picture> to denote <picture><source srcset="form_2558_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dy/dt$" src="form_2558.png"/></picture>. <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> is a user-supplied nonsingular operator from <picture><source srcset="form_2559_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^N \to R^N$" src="form_2559.png"/></picture>. This operator may depend on <picture><source srcset="form_189_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t$" src="form_189.png"/></picture> but not on <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>.</p>
+<p>For standard systems of ordinary differential equations and for problems arising from the spatial semi-discretization of partial differential equations using finite difference or finite volume methods, <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> is typically the identity matrix, <picture><source srcset="form_2089_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I$" src="form_2089.png"/></picture>. For PDEs using a finite-element spatial semi-discretization <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> is typically a well-conditioned mass matrix.</p>
 <p>The two right-hand side functions may be described as:</p>
 <ul>
-<li><picture><source srcset="form_2625_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_E(t, y)$" src="form_2625.png"/></picture>: contains the "slow" time scale components of the system. This will be integrated using explicit methods.</li>
-<li><picture><source srcset="form_2626_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I(t, y)$" src="form_2626.png"/></picture>: contains the "fast" time scale components of the system. This will be integrated using implicit methods.</li>
+<li><picture><source srcset="form_2560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_E(t, y)$" src="form_2560.png"/></picture>: contains the "slow" time scale components of the system. This will be integrated using explicit methods.</li>
+<li><picture><source srcset="form_2561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I(t, y)$" src="form_2561.png"/></picture>: contains the "fast" time scale components of the system. This will be integrated using implicit methods.</li>
 </ul>
-<p><a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> may be used to solve stiff, nonstiff and multi-rate problems. Roughly speaking, stiffness is characterized by the presence of at least one rapidly damped mode, whose time constant is small compared to the time scale of the solution itself. In the implicit/explicit (ImEx) splitting above, these stiff components should be included in the right-hand side function <picture><source srcset="form_2627_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I (t, y)$" src="form_2627.png"/></picture>.</p>
-<p>For multi-rate problems, a user should provide both of the functions <picture><source srcset="form_2628_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_E$" src="form_2628.png"/></picture> and <picture><source srcset="form_2629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I$" src="form_2629.png"/></picture> that define the IVP system.</p>
-<p>For nonstiff problems, only <picture><source srcset="form_2628_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_E$" src="form_2628.png"/></picture> should be provided, and <picture><source srcset="form_2629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I$" src="form_2629.png"/></picture> is assumed to be zero, i.e. the system reduces to the non-split IVP:</p>
+<p><a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> may be used to solve stiff, nonstiff and multi-rate problems. Roughly speaking, stiffness is characterized by the presence of at least one rapidly damped mode, whose time constant is small compared to the time scale of the solution itself. In the implicit/explicit (ImEx) splitting above, these stiff components should be included in the right-hand side function <picture><source srcset="form_2562_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I (t, y)$" src="form_2562.png"/></picture>.</p>
+<p>For multi-rate problems, a user should provide both of the functions <picture><source srcset="form_2563_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_E$" src="form_2563.png"/></picture> and <picture><source srcset="form_2564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I$" src="form_2564.png"/></picture> that define the IVP system.</p>
+<p>For nonstiff problems, only <picture><source srcset="form_2563_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_E$" src="form_2563.png"/></picture> should be provided, and <picture><source srcset="form_2564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I$" src="form_2564.png"/></picture> is assumed to be zero, i.e. the system reduces to the non-split IVP:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2565_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     M\dot y = f_E(t, y), \qquad y(t_0) = y_0.
-  \]" src="form_2630.png"/></picture>
+  \]" src="form_2565.png"/></picture>
 </p>
-<p>In this scenario, the ARK methods reduce to classical explicit Runge-Kutta methods (ERK). For these classes of methods, <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> allows orders of accuracy <picture><source srcset="form_2631_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q = \{2, 3, 4, 5, 6, 8\}$" src="form_2631.png"/></picture>, with embeddings of orders <picture><source srcset="form_2632_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p = \{1,
-  2, 3, 4, 5, 7\}$" src="form_2632.png"/></picture>. These default to the Heun-Euler-2-1-2, Bogacki-Shampine-4-2-3, Zonneveld-5-3-4, Cash-Karp-6-4-5, Verner-8-5-6 and Fehlberg-13-7-8 methods, respectively.</p>
-<p>Finally, for stiff (linear or nonlinear) problems the user may provide only <picture><source srcset="form_2629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I$" src="form_2629.png"/></picture>, implying that <picture><source srcset="form_2633_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_E = 0$" src="form_2633.png"/></picture>, so that the system reduces to the non-split IVP</p>
+<p>In this scenario, the ARK methods reduce to classical explicit Runge-Kutta methods (ERK). For these classes of methods, <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> allows orders of accuracy <picture><source srcset="form_2566_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q = \{2, 3, 4, 5, 6, 8\}$" src="form_2566.png"/></picture>, with embeddings of orders <picture><source srcset="form_2567_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p = \{1,
+  2, 3, 4, 5, 7\}$" src="form_2567.png"/></picture>. These default to the Heun-Euler-2-1-2, Bogacki-Shampine-4-2-3, Zonneveld-5-3-4, Cash-Karp-6-4-5, Verner-8-5-6 and Fehlberg-13-7-8 methods, respectively.</p>
+<p>Finally, for stiff (linear or nonlinear) problems the user may provide only <picture><source srcset="form_2564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I$" src="form_2564.png"/></picture>, implying that <picture><source srcset="form_2568_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_E = 0$" src="form_2568.png"/></picture>, so that the system reduces to the non-split IVP</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2634_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2569_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     M\dot y = f_I(t, y), \qquad y(t_0) = y_0.
-  \]" src="form_2634.png"/></picture>
+  \]" src="form_2569.png"/></picture>
 </p>
-<p>Similarly to ERK methods, in this scenario the ARK methods reduce to classical diagonally-implicit Runge-Kutta methods (DIRK). For these classes of methods, <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> allows orders of accuracy <picture><source srcset="form_2635_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q = \{2, 3, 4, 5\}$" src="form_2635.png"/></picture>, with embeddings of orders <picture><source srcset="form_2636_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p = \{1, 2, 3, 4\}$" src="form_2636.png"/></picture>. These default to the SDIRK-2-1-2, ARK-4-2-3 (implicit), SDIRK-5-3-4 and ARK-8-4-5 (implicit) methods, respectively.</p>
+<p>Similarly to ERK methods, in this scenario the ARK methods reduce to classical diagonally-implicit Runge-Kutta methods (DIRK). For these classes of methods, <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> allows orders of accuracy <picture><source srcset="form_2570_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q = \{2, 3, 4, 5\}$" src="form_2570.png"/></picture>, with embeddings of orders <picture><source srcset="form_2571_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p = \{1, 2, 3, 4\}$" src="form_2571.png"/></picture>. These default to the SDIRK-2-1-2, ARK-4-2-3 (implicit), SDIRK-5-3-4 and ARK-8-4-5 (implicit) methods, respectively.</p>
 <p>For both DIRK and ARK methods, an implicit system of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_2637_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2572_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    G(z_i) \dealcoloneq M z_i - h_n A^I_{i,i} f_I (t^I_{n,i}, z_i) - a_i = 0
-  \]" src="form_2637.png"/></picture>
+  \]" src="form_2572.png"/></picture>
 </p>
-<p> must be solved for each stage <picture><source srcset="form_2638_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_i , i = 1, \ldots, s$" src="form_2638.png"/></picture>, where we have the data  </p><p class="formulaDsp">
-<picture><source srcset="form_2639_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> must be solved for each stage <picture><source srcset="form_2573_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_i , i = 1, \ldots, s$" src="form_2573.png"/></picture>, where we have the data  </p><p class="formulaDsp">
+<picture><source srcset="form_2574_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    a_i \dealcoloneq
    M y_{n-1} + h_n \sum_{j=1}^{i-1} [ A^E_{i,j} f_E(t^E_{n,j}, z_j)
    + A^I_{i,j} f_I (t^I_{n,j}, z_j)]
-  \]" src="form_2639.png"/></picture>
+  \]" src="form_2574.png"/></picture>
 </p>
 <p> for the ARK methods, or  </p><p class="formulaDsp">
-<picture><source srcset="form_2640_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2575_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    a_i \dealcoloneq
    M y_{n-1} + h_n \sum_{j=1}^{i-1} A^I_{i,j} f_I (t^I_{n,j}, z_j)
-  \]" src="form_2640.png"/></picture>
+  \]" src="form_2575.png"/></picture>
 </p>
-<p> for the DIRK methods. Here <picture><source srcset="form_2641_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^I_{i,j}$" src="form_2641.png"/></picture> and <picture><source srcset="form_2642_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^E_{i,j}$" src="form_2642.png"/></picture> are the Butcher's tables for the chosen solver.</p>
-<p>If <picture><source srcset="form_2643_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I(t,y)$" src="form_2643.png"/></picture> depends nonlinearly on <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> then the systems above correspond to a nonlinear system of equations; if <picture><source srcset="form_2627_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I (t, y)$" src="form_2627.png"/></picture> depends linearly on <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> then this is a linear system of equations. By specifying the flag <code>implicit_function_is_linear</code>, <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> takes some shortcuts that allow a faster solution process.</p>
+<p> for the DIRK methods. Here <picture><source srcset="form_2576_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^I_{i,j}$" src="form_2576.png"/></picture> and <picture><source srcset="form_2577_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^E_{i,j}$" src="form_2577.png"/></picture> are the Butcher's tables for the chosen solver.</p>
+<p>If <picture><source srcset="form_2578_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I(t,y)$" src="form_2578.png"/></picture> depends nonlinearly on <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> then the systems above correspond to a nonlinear system of equations; if <picture><source srcset="form_2562_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I (t, y)$" src="form_2562.png"/></picture> depends linearly on <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> then this is a linear system of equations. By specifying the flag <code>implicit_function_is_linear</code>, <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> takes some shortcuts that allow a faster solution process.</p>
 <p>For systems of either type, <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> allows a choice of solution strategy. The default solver choice is a variant of Newton's method,  </p><p class="formulaDsp">
-<picture><source srcset="form_2644_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    z_i^{m+1} = z_i^m +\delta^{m+1},
-  \]" src="form_2644.png"/></picture>
+  \]" src="form_2579.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> is the Newton step index, and the Newton update <picture><source srcset="form_2645_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta^{m+1}$" src="form_2645.png"/></picture> requires the solution of the linear Newton system  </p><p class="formulaDsp">
-<picture><source srcset="form_2646_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> is the Newton step index, and the Newton update <picture><source srcset="form_2580_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta^{m+1}$" src="form_2580.png"/></picture> requires the solution of the linear Newton system  </p><p class="formulaDsp">
+<picture><source srcset="form_2581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    N(z_i^m) \delta^{m+1} = -G(z_i^m),
-  \]" src="form_2646.png"/></picture>
+  \]" src="form_2581.png"/></picture>
 </p>
 <p> where  </p><p class="formulaDsp">
-<picture><source srcset="form_2647_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   N \dealcoloneq M - \gamma J, \quad J
   \dealcoloneq \frac{\partial f_I}{\partial y},
   \qquad \gamma\dealcoloneq h_n A^I_{i,i}.
-  \]" src="form_2647.png"/></picture>
+  \]" src="form_2582.png"/></picture>
 </p>
-<p>As an alternate to Newton's method, <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> may solve for each stage <picture><source srcset="form_2648_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_i ,i
-  = 1, \ldots , s$" src="form_2648.png"/></picture> using an Anderson-accelerated fixed point iteration  </p><p class="formulaDsp">
-<picture><source srcset="form_2649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>As an alternate to Newton's method, <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> may solve for each stage <picture><source srcset="form_2583_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_i ,i
+  = 1, \ldots , s$" src="form_2583.png"/></picture> using an Anderson-accelerated fixed point iteration  </p><p class="formulaDsp">
+<picture><source srcset="form_2584_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   z_i^{m+1} = g(z_i^{m}), m=0,1,\ldots.
-  \]" src="form_2649.png"/></picture>
+  \]" src="form_2584.png"/></picture>
 </p>
 <p>Unlike with Newton's method, this option does not require the solution of a linear system at each iteration, instead opting for solution of a low-dimensional least-squares solution to construct the nonlinear update.</p>
-<p>Finally, if the user specifies <code>implicit_function_is_linear</code>, i.e., <picture><source srcset="form_2626_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I(t, y)$" src="form_2626.png"/></picture> depends linearly on <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>, and if the Newton-based nonlinear solver is chosen, then the system will be solved using only a single Newton iteration. Notice that in order for the Newton solver to be used, then <a class="el" href="#href_anchor">jacobian_times_vector()</a> should be supplied. If it is not supplied then only the fixed-point iteration will be supported, and the <code>implicit_function_is_linear</code> setting is ignored.</p>
-<p>The optimal solver (Newton vs fixed-point) is highly problem-dependent. Since fixed-point solvers do not require the solution of any linear systems, each iteration may be significantly less costly than their Newton counterparts. However, this can come at the cost of slower convergence (or even divergence) in comparison with Newton-like methods. These fixed-point solvers do allow for user specification of the Anderson-accelerated subspace size, <picture><source srcset="form_2650_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_k$" src="form_2650.png"/></picture>. While the required amount of solver memory grows proportionately to <picture><source srcset="form_2651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_k N$" src="form_2651.png"/></picture>, larger values of <picture><source srcset="form_2650_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_k$" src="form_2650.png"/></picture> may result in faster convergence.</p>
-<p>This improvement may be significant even for "small" values, e.g. <picture><source srcset="form_2652_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1 \leq
-  m_k \leq 5$" src="form_2652.png"/></picture>, and convergence may not improve (or even deteriorate) for larger values of <picture><source srcset="form_2650_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_k$" src="form_2650.png"/></picture>. While <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> uses a Newton-based iteration as its default solver due to its increased robustness on very stiff problems, it is highly recommended that users also consider the fixed-point solver for their cases when attempting a new problem.</p>
-<p>For either the Newton or fixed-point solvers, it is well-known that both the efficiency and robustness of the algorithm intimately depends on the choice of a good initial guess. In <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a>, the initial guess for either nonlinear solution method is a predicted value <picture><source srcset="form_2653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_i(0)$" src="form_2653.png"/></picture> that is computed explicitly from the previously-computed data (e.g. <picture><source srcset="form_2654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_{n-2}, y_{n-1}$" src="form_2654.png"/></picture>, and <picture><source srcset="form_2655_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_j$" src="form_2655.png"/></picture> where <picture><source srcset="form_2656_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j &lt; i$" src="form_2656.png"/></picture>). Additional information on the specific predictor algorithms implemented in <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> is provided in <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> documentation.</p>
+<p>Finally, if the user specifies <code>implicit_function_is_linear</code>, i.e., <picture><source srcset="form_2561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I(t, y)$" src="form_2561.png"/></picture> depends linearly on <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>, and if the Newton-based nonlinear solver is chosen, then the system will be solved using only a single Newton iteration. Notice that in order for the Newton solver to be used, then <a class="el" href="#href_anchor">jacobian_times_vector()</a> should be supplied. If it is not supplied then only the fixed-point iteration will be supported, and the <code>implicit_function_is_linear</code> setting is ignored.</p>
+<p>The optimal solver (Newton vs fixed-point) is highly problem-dependent. Since fixed-point solvers do not require the solution of any linear systems, each iteration may be significantly less costly than their Newton counterparts. However, this can come at the cost of slower convergence (or even divergence) in comparison with Newton-like methods. These fixed-point solvers do allow for user specification of the Anderson-accelerated subspace size, <picture><source srcset="form_2585_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_k$" src="form_2585.png"/></picture>. While the required amount of solver memory grows proportionately to <picture><source srcset="form_2586_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_k N$" src="form_2586.png"/></picture>, larger values of <picture><source srcset="form_2585_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_k$" src="form_2585.png"/></picture> may result in faster convergence.</p>
+<p>This improvement may be significant even for "small" values, e.g. <picture><source srcset="form_2587_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1 \leq
+  m_k \leq 5$" src="form_2587.png"/></picture>, and convergence may not improve (or even deteriorate) for larger values of <picture><source srcset="form_2585_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_k$" src="form_2585.png"/></picture>. While <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> uses a Newton-based iteration as its default solver due to its increased robustness on very stiff problems, it is highly recommended that users also consider the fixed-point solver for their cases when attempting a new problem.</p>
+<p>For either the Newton or fixed-point solvers, it is well-known that both the efficiency and robustness of the algorithm intimately depends on the choice of a good initial guess. In <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a>, the initial guess for either nonlinear solution method is a predicted value <picture><source srcset="form_2588_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_i(0)$" src="form_2588.png"/></picture> that is computed explicitly from the previously-computed data (e.g. <picture><source srcset="form_2589_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_{n-2}, y_{n-1}$" src="form_2589.png"/></picture>, and <picture><source srcset="form_2590_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_j$" src="form_2590.png"/></picture> where <picture><source srcset="form_2591_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j &lt; i$" src="form_2591.png"/></picture>). Additional information on the specific predictor algorithms implemented in <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> is provided in <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> documentation.</p>
 <p>The user has to provide the implementation of at least one (or both) of the following <code>std::function</code>s:</p><ul>
 <li><a class="el" href="#href_anchor">implicit_function()</a></li>
 <li><a class="el" href="#href_anchor">explicit_function()</a></li>
@@ -306,34 +306,34 @@
 <li><a class="el" href="#href_anchor">custom_setup()</a></li>
 </ul>
 <p>To provide a simple example, consider the harmonic oscillator problem:  </p><p class="formulaDsp">
-<picture><source srcset="form_2657_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2592_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \begin{split}
     u'' &amp; = -k^2 u \\
     u (0) &amp; = 0 \\
     u'(0) &amp; = k
   \end{split}
-  \]" src="form_2657.png"/></picture>
+  \]" src="form_2592.png"/></picture>
 </p>
 <p>We write it in terms of a first order ode:  </p><p class="formulaDsp">
-<picture><source srcset="form_2658_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2593_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \begin{matrix}
     y_0' &amp; =  y_1 \\
     y_1' &amp; = - k^2 y_0
   \end{matrix}
-  \]" src="form_2658.png"/></picture>
+  \]" src="form_2593.png"/></picture>
 </p>
-<p>That is <picture><source srcset="form_2659_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y' = A y$" src="form_2659.png"/></picture> where  </p><p class="formulaDsp">
-<picture><source srcset="form_2660_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>That is <picture><source srcset="form_2594_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y' = A y$" src="form_2594.png"/></picture> where  </p><p class="formulaDsp">
+<picture><source srcset="form_2595_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   A \dealcoloneq
   \begin{pmatrix}
   0 &amp; 1 \\
   -k^2 &amp;0
   \end{pmatrix}
-  \]" src="form_2660.png"/></picture>
+  \]" src="form_2595.png"/></picture>
 </p>
-<p> and <picture><source srcset="form_2661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y(0)=(0, k)^T$" src="form_2661.png"/></picture>.</p>
-<p>The exact solution is <picture><source srcset="form_2612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_0(t) = \sin(k t)$" src="form_2612.png"/></picture>, <picture><source srcset="form_2662_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_1(t) = y_0'(t) = k \cos(k
-*t)$" src="form_2662.png"/></picture>, <picture><source srcset="form_2614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_1'(t) = -k^2 \sin(k t)$" src="form_2614.png"/></picture>.</p>
+<p> and <picture><source srcset="form_2596_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y(0)=(0, k)^T$" src="form_2596.png"/></picture>.</p>
+<p>The exact solution is <picture><source srcset="form_2597_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_0(t) = \sin(k t)$" src="form_2597.png"/></picture>, <picture><source srcset="form_2598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_1(t) = y_0'(t) = k \cos(k
+*t)$" src="form_2598.png"/></picture>, <picture><source srcset="form_2599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_1'(t) = -k^2 \sin(k t)$" src="form_2599.png"/></picture>.</p>
 <p>A minimal implementation, using only explicit RK methods, is given by the following code snippet:</p>
 <div class="fragment"><div class="line"><span class="keyword">using </span>VectorType = <a class="code hl_class" href="classVector.html">Vector&lt;double&gt;</a>;</div>
 <div class="line"> </div>
@@ -720,8 +720,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>A function object that users may supply and that is intended to compute the explicit part of the IVP right hand side. Sets <picture><source srcset="form_2666_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$explicit_f = f_E(t,
-y)$" src="form_2666.png"/></picture>.</p>
+<p>A function object that users may supply and that is intended to compute the explicit part of the IVP right hand side. Sets <picture><source srcset="form_2600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$explicit_f = f_E(t,
+y)$" src="form_2600.png"/></picture>.</p>
 <p>At least one of <a class="el" href="#href_anchor">explicit_function()</a> or <a class="el" href="#href_anchor">implicit_function()</a> must be provided. According to which one is provided, explicit, implicit, or mixed RK methods are used.</p>
 <dl class="section note"><dt>Note</dt><dd>This variable represents a <a class="el" href="DEALGlossary.html#href_anchor">user provided callback</a>. See there for a description of how to deal with errors and other requirements and conventions. In particular, <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> can deal with "recoverable" errors in some circumstances, so callbacks can throw exceptions of type RecoverableUserCallbackError. </dd></dl>
 
@@ -742,8 +742,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>A function object that users may supply and that is intended to compute the implicit part of the IVP right hand side. Sets <picture><source srcset="form_2667_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$implicit_f = f_I(t,
-y)$" src="form_2667.png"/></picture>.</p>
+<p>A function object that users may supply and that is intended to compute the implicit part of the IVP right hand side. Sets <picture><source srcset="form_2601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$implicit_f = f_I(t,
+y)$" src="form_2601.png"/></picture>.</p>
 <p>At least one of <a class="el" href="#href_anchor">explicit_function()</a> or <a class="el" href="#href_anchor">implicit_function()</a> must be provided. According to which one is provided, explicit, implicit, or mixed RK methods are used.</p>
 <dl class="section note"><dt>Note</dt><dd>This variable represents a <a class="el" href="DEALGlossary.html#href_anchor">user provided callback</a>. See there for a description of how to deal with errors and other requirements and conventions. In particular, <a class="el" href="classSUNDIALS_1_1ARKode.html">ARKode</a> can deal with "recoverable" errors in some circumstances, so callbacks can throw exceptions of type RecoverableUserCallbackError. </dd></dl>
 
@@ -765,7 +765,7 @@
       </table>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1IDA.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1IDA.html	2024-03-17 21:57:36.495191385 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1IDA.html	2024-03-17 21:57:36.503191434 +0000
@@ -193,69 +193,69 @@
 <p>Citing from the <a class="el" href="namespaceSUNDIALS.html">SUNDIALS</a> documentation:</p>
 <p>Consider a system of Differential-Algebraic Equations written in the general form</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2590_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \begin{cases}
        F(t,y,\dot y) = 0\, , \\
        y(t_0) = y_0\, , \\
        \dot y (t_0) = \dot y_0\, .
    \end{cases}
- \]" src="form_2590.png"/></picture>
+ \]" src="form_2611.png"/></picture>
 </p>
-<p>where <picture><source srcset="form_2591_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y,\dot y$" src="form_2591.png"/></picture> are vectors in <picture><source srcset="form_2592_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^n$" src="form_2592.png"/></picture>, <picture><source srcset="form_215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t$" src="form_215.png"/></picture> is often the time (but can also be a parametric quantity), and <picture><source srcset="form_2593_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F:\mathbb{R}\times\mathbb{R}^n\times \mathbb{R}^n\rightarrow\mathbb{R}^n$" src="form_2593.png"/></picture>. Such problem is solved using Newton iteration augmented with a line search global strategy. The integration method used in <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> is the variable-order, variable-coefficient BDF (Backward <a class="el" href="namespaceDifferentiation.html">Differentiation</a> Formula), in fixed-leading-coefficient. The method order ranges from 1 to 5, with the BDF of order <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> given by the multistep formula</p>
+<p>where <picture><source srcset="form_2612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y,\dot y$" src="form_2612.png"/></picture> are vectors in <picture><source srcset="form_2613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^n$" src="form_2613.png"/></picture>, <picture><source srcset="form_189_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t$" src="form_189.png"/></picture> is often the time (but can also be a parametric quantity), and <picture><source srcset="form_2614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F:\mathbb{R}\times\mathbb{R}^n\times \mathbb{R}^n\rightarrow\mathbb{R}^n$" src="form_2614.png"/></picture>. Such problem is solved using Newton iteration augmented with a line search global strategy. The integration method used in <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> is the variable-order, variable-coefficient BDF (Backward <a class="el" href="namespaceDifferentiation.html">Differentiation</a> Formula), in fixed-leading-coefficient. The method order ranges from 1 to 5, with the BDF of order <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> given by the multistep formula</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2594_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \sum_{i=0}^q \alpha_{n,i}\,y_{n-i}=h_n\,\dot y_n\, ,
    \label{eq:bdf}
- \]" src="form_2594.png"/></picture>
+ \]" src="form_2615.png"/></picture>
 </p>
-<p>where <picture><source srcset="form_2595_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_n$" src="form_2595.png"/></picture> and <picture><source srcset="form_2596_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dot y_n$" src="form_2596.png"/></picture> are the computed approximations of <picture><source srcset="form_2597_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y(t_n)$" src="form_2597.png"/></picture> and <picture><source srcset="form_2598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dot y(t_n)$" src="form_2598.png"/></picture>, respectively, and the step size is <picture><source srcset="form_2599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_n=t_n-t_{n-1}$" src="form_2599.png"/></picture>. The coefficients <picture><source srcset="form_2600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha_{n,i}$" src="form_2600.png"/></picture> are uniquely determined by the order <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>, and the history of the step sizes. The application of the BDF method to the DAE system results in a nonlinear algebraic system to be solved at each time step:</p>
+<p>where <picture><source srcset="form_2616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_n$" src="form_2616.png"/></picture> and <picture><source srcset="form_2617_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dot y_n$" src="form_2617.png"/></picture> are the computed approximations of <picture><source srcset="form_2618_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y(t_n)$" src="form_2618.png"/></picture> and <picture><source srcset="form_2619_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dot y(t_n)$" src="form_2619.png"/></picture>, respectively, and the step size is <picture><source srcset="form_2620_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_n=t_n-t_{n-1}$" src="form_2620.png"/></picture>. The coefficients <picture><source srcset="form_2621_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha_{n,i}$" src="form_2621.png"/></picture> are uniquely determined by the order <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>, and the history of the step sizes. The application of the BDF method to the DAE system results in a nonlinear algebraic system to be solved at each time step:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2622_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    G(y_n)\equiv F\left(t_n,y_n,\dfrac{1}{h_n}\sum_{i=0}^q
   \alpha_{n,i}\,y_{n-i}\right)=0\, .
- \]" src="form_2601.png"/></picture>
+ \]" src="form_2622.png"/></picture>
 </p>
 <p> The Newton method leads to a linear system of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_2602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2623_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    J[y_{n(m+1)}-y_{n(m)}]=-G(y_{n(m)})\, ,
- \]" src="form_2602.png"/></picture>
+ \]" src="form_2623.png"/></picture>
 </p>
-<p>where <picture><source srcset="form_2603_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_{n(m)}$" src="form_2603.png"/></picture> is the <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture>-th approximation to <picture><source srcset="form_2595_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_n$" src="form_2595.png"/></picture>, and <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> is the approximation of the system Jacobian</p>
+<p>where <picture><source srcset="form_2624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_{n(m)}$" src="form_2624.png"/></picture> is the <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture>-th approximation to <picture><source srcset="form_2616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_n$" src="form_2616.png"/></picture>, and <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> is the approximation of the system Jacobian</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2604_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2625_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    J=\dfrac{\partial G}{\partial y} = \dfrac{\partial F}{\partial y} +
   \alpha \dfrac{\partial F}{\partial \dot y}\, ,
- \]" src="form_2604.png"/></picture>
+ \]" src="form_2625.png"/></picture>
 </p>
-<p>and <picture><source srcset="form_2605_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha = \alpha_{n,0}/h_n$" src="form_2605.png"/></picture>. It is worth mentioning that the scalar <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> changes whenever the step size or method order changes.</p>
+<p>and <picture><source srcset="form_2626_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha = \alpha_{n,0}/h_n$" src="form_2626.png"/></picture>. It is worth mentioning that the scalar <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> changes whenever the step size or method order changes.</p>
 <p>To provide a simple example, consider the following harmonic oscillator problem: </p><p class="formulaDsp">
-<picture><source srcset="form_2606_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \begin{split}
+<picture><source srcset="form_2627_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \begin{split}
    u'' &amp; = -k^2 u \\
    u (0) &amp; = 0 \\
    u'(0) &amp; = k
  \end{split}
- \]" src="form_2606.png"/></picture>
+ \]" src="form_2627.png"/></picture>
 </p>
 <p>We write it in terms of a first order ode:  </p><p class="formulaDsp">
-<picture><source srcset="form_2607_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2628_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \begin{matrix}
    y_0' &amp; -y_1      &amp; = 0 \\
    y_1' &amp; + k^2 y_0 &amp; = 0
  \end{matrix}
- \]" src="form_2607.png"/></picture>
+ \]" src="form_2628.png"/></picture>
 </p>
-<p>That is <picture><source srcset="form_2608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(y', y, t) = y' + A y = 0 $" src="form_2608.png"/></picture> where A =  </p><p class="formulaDsp">
-<picture><source srcset="form_2609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>That is <picture><source srcset="form_2629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(y', y, t) = y' + A y = 0 $" src="form_2629.png"/></picture> where A =  </p><p class="formulaDsp">
+<picture><source srcset="form_2630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \begin{pmatrix}
  0 &amp; -1 \\
  k^2 &amp;0
  \end{pmatrix}
- \]" src="form_2609.png"/></picture>
+ \]" src="form_2630.png"/></picture>
 </p>
-<p> and <picture><source srcset="form_2610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y(0)=(0, k)$" src="form_2610.png"/></picture>, <picture><source srcset="form_2611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y'(0) = (k, 0)$" src="form_2611.png"/></picture>.</p>
-<p>The exact solution is <picture><source srcset="form_2612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_0(t) = \sin(k t)$" src="form_2612.png"/></picture>, <picture><source srcset="form_2613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_1(t) = y_0'(t)
- = k \cos(k t)$" src="form_2613.png"/></picture>, <picture><source srcset="form_2614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_1'(t) = -k^2 \sin(k t)$" src="form_2614.png"/></picture>.</p>
-<p>The Jacobian to assemble is the following: <picture><source srcset="form_2615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J = \alpha I + A$" src="form_2615.png"/></picture>.</p>
+<p> and <picture><source srcset="form_2631_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y(0)=(0, k)$" src="form_2631.png"/></picture>, <picture><source srcset="form_2632_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y'(0) = (k, 0)$" src="form_2632.png"/></picture>.</p>
+<p>The exact solution is <picture><source srcset="form_2597_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_0(t) = \sin(k t)$" src="form_2597.png"/></picture>, <picture><source srcset="form_2633_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_1(t) = y_0'(t)
+ = k \cos(k t)$" src="form_2633.png"/></picture>, <picture><source srcset="form_2599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_1'(t) = -k^2 \sin(k t)$" src="form_2599.png"/></picture>.</p>
+<p>The Jacobian to assemble is the following: <picture><source srcset="form_2634_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J = \alpha I + A$" src="form_2634.png"/></picture>.</p>
 <p>This is achieved by the following snippet of code: </p><div class="fragment"><div class="line"><span class="keyword">using </span>VectorType = <a class="code hl_class" href="classVector.html">Vector&lt;double&gt;</a>;</div>
 <div class="line"> </div>
 <div class="line">VectorType y(2);</div>
@@ -342,8 +342,8 @@
 <li>use_y_diff: compute the algebraic components of y and differential components of y_dot, given the differential components of y. This option requires that the user specifies differential and algebraic components in the function get_differential_components.</li>
 <li>use_y_dot: compute all components of y, given y_dot.</li>
 </ul>
-<p>By default, this class assumes that all components are differential, and that you want to solve a standard ode. In this case, the initial component type is set to <code>use_y_diff</code>, so that the <code>y_dot</code> at time t=<code>initial_time</code> is computed by solving the nonlinear problem <picture><source srcset="form_2616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(y_dot,
-y(t0), t0) = 0$" src="form_2616.png"/></picture> in the variable <code>y_dot</code>.</p>
+<p>By default, this class assumes that all components are differential, and that you want to solve a standard ode. In this case, the initial component type is set to <code>use_y_diff</code>, so that the <code>y_dot</code> at time t=<code>initial_time</code> is computed by solving the nonlinear problem <picture><source srcset="form_2635_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(y_dot,
+y(t0), t0) = 0$" src="form_2635.png"/></picture> in the variable <code>y_dot</code>.</p>
 <p>Notice that a Newton solver is used for this computation. The Newton solver parameters can be tweaked by acting on <code>ic_alpha</code> and <code>ic_max_iter</code>.</p>
 <p>If you reset the solver at some point, you may want to select a different computation for the initial conditions after reset. Say, for example, that you have refined a grid, and after transferring the solution to the new grid, the initial conditions are no longer consistent. Then you can choose how these are made consistent, using the same three options that you used for the initial conditions in <code>reset_type</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
@@ -541,7 +541,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Compute residual. Return <picture><source srcset="form_1738_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(t, y, \dot y)$" src="form_1738.png"/></picture>.</p>
+<p>Compute residual. Return <picture><source srcset="form_1740_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(t, y, \dot y)$" src="form_1740.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>This variable represents a <a class="el" href="DEALGlossary.html#href_anchor">user provided callback</a>. See there for a description of how to deal with errors and other requirements and conventions. In particular, <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> can deal with "recoverable" errors in some circumstances, so callbacks can throw exceptions of type RecoverableUserCallbackError. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="ida_8h_source.html#href_anchor">662</a> of file <a class="el" href="ida_8h_source.html">ida.h</a>.</p>
@@ -563,13 +563,13 @@
 </div><div class="memdoc">
 <p>Compute Jacobian. This function is called by <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> any time a Jacobian update is required. The user should compute the Jacobian (or update all the variables that allow the application of the Jacobian). This function is called by <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> once, before any call to <a class="el" href="#href_anchor">solve_jacobian_system()</a> or <a class="el" href="#href_anchor">solve_with_jacobian()</a>.</p>
 <p>The Jacobian <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> should be a (possibly inexact) computation of  </p><p class="formulaDsp">
-<picture><source srcset="form_2617_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2636_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   J=\dfrac{\partial G}{\partial y} = \dfrac{\partial F}{\partial y} +
  \alpha \dfrac{\partial F}{\partial \dot y}.
-\]" src="form_2617.png"/></picture>
+\]" src="form_2636.png"/></picture>
 </p>
 <p>If the user uses a matrix based computation of the Jacobian, then this is the right place where an assembly routine should be called to assemble both a matrix and a preconditioner for the Jacobian system. Subsequent calls (possibly more than one) to <a class="el" href="#href_anchor">solve_jacobian_system()</a> or <a class="el" href="#href_anchor">solve_with_jacobian()</a> can assume that this function has been called at least once.</p>
-<p>Notice that no assumption is made by this interface on what the user should do in this function. <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> only assumes that after a call to <a class="el" href="#href_anchor">setup_jacobian()</a> it is possible to call <a class="el" href="#href_anchor">solve_jacobian_system()</a> or <a class="el" href="#href_anchor">solve_with_jacobian()</a> to obtain a solution <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> to the system <picture><source srcset="form_2618_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J x = b$" src="form_2618.png"/></picture>.</p>
+<p>Notice that no assumption is made by this interface on what the user should do in this function. <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> only assumes that after a call to <a class="el" href="#href_anchor">setup_jacobian()</a> it is possible to call <a class="el" href="#href_anchor">solve_jacobian_system()</a> or <a class="el" href="#href_anchor">solve_with_jacobian()</a> to obtain a solution <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> to the system <picture><source srcset="form_2637_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J x = b$" src="form_2637.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>This variable represents a <a class="el" href="DEALGlossary.html#href_anchor">user provided callback</a>. See there for a description of how to deal with errors and other requirements and conventions. In particular, <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> can deal with "recoverable" errors in some circumstances, so callbacks can throw exceptions of type RecoverableUserCallbackError. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="ida_8h_source.html#href_anchor">701</a> of file <a class="el" href="ida_8h_source.html">ida.h</a>.</p>
@@ -591,12 +591,12 @@
 </div><div class="memdoc">
 <p>Solve the Jacobian linear system. This function will be called by <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> (possibly several times) after <a class="el" href="#href_anchor">setup_jacobian()</a> has been called at least once. <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> tries to do its best to call <a class="el" href="#href_anchor">setup_jacobian()</a> the minimum amount of times. If convergence can be achieved without updating the Jacobian, then <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> does not call <a class="el" href="#href_anchor">setup_jacobian()</a> again. If, on the contrary, internal <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> convergence tests fail, then <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> calls again <a class="el" href="#href_anchor">setup_jacobian()</a> with updated vectors and coefficients so that successive calls to solve_jacobian_systems() lead to better convergence in the Newton process.</p>
 <p>The jacobian <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> should be (an approximation of) the system Jacobian  </p><p class="formulaDsp">
-<picture><source srcset="form_2617_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2636_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   J=\dfrac{\partial G}{\partial y} = \dfrac{\partial F}{\partial y} +
  \alpha \dfrac{\partial F}{\partial \dot y}.
-\]" src="form_2617.png"/></picture>
+\]" src="form_2636.png"/></picture>
 </p>
-<p>A call to this function should store in <code>dst</code> the result of <picture><source srcset="form_2582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-1}$" src="form_2582.png"/></picture> applied to <code>src</code>, i.e., <code>J*dst = src</code>. It is the users responsibility to set up proper solvers and preconditioners inside this function.</p>
+<p>A call to this function should store in <code>dst</code> the result of <picture><source srcset="form_2638_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-1}$" src="form_2638.png"/></picture> applied to <code>src</code>, i.e., <code>J*dst = src</code>. It is the users responsibility to set up proper solvers and preconditioners inside this function.</p>
 <dl class="section note"><dt>Note</dt><dd>This variable represents a <a class="el" href="DEALGlossary.html#href_anchor">user provided callback</a>. See there for a description of how to deal with errors and other requirements and conventions. In particular, <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> can deal with "recoverable" errors in some circumstances, so callbacks can throw exceptions of type RecoverableUserCallbackError.</dd></dl>
 <dl class="deprecated"><dt><b><a class="el" href="deprecated.html#href_anchor">Deprecated</a></b></dt><dd>Use <a class="el" href="#href_anchor">solve_with_jacobian()</a> instead which also uses a numerical tolerance. </dd></dl>
 
@@ -619,21 +619,21 @@
 </div><div class="memdoc">
 <p>Solve the Jacobian linear system up to a specified tolerance. This function will be called by <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> (possibly several times) after <a class="el" href="#href_anchor">setup_jacobian()</a> has been called at least once. <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> tries to do its best to call <a class="el" href="#href_anchor">setup_jacobian()</a> the minimum number of times. If convergence can be achieved without updating the Jacobian, then <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> does not call <a class="el" href="#href_anchor">setup_jacobian()</a> again. If, on the contrary, internal <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> convergence tests fail, then <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> calls again <a class="el" href="#href_anchor">setup_jacobian()</a> with updated vectors and coefficients so that successive calls to <a class="el" href="#href_anchor">solve_with_jacobian()</a> lead to better convergence in the Newton process.</p>
 <p>The Jacobian <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> should be (an approximation of) the system Jacobian  </p><p class="formulaDsp">
-<picture><source srcset="form_2617_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2636_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   J=\dfrac{\partial G}{\partial y} = \dfrac{\partial F}{\partial y} +
  \alpha \dfrac{\partial F}{\partial \dot y}.
-\]" src="form_2617.png"/></picture>
+\]" src="form_2636.png"/></picture>
 </p>
 <p>Arguments to the function are:</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">rhs</td><td>The system right hand side to solve for. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">dst</td><td>The solution of <picture><source srcset="form_2585_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-1} * src$" src="form_2585.png"/></picture>. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">dst</td><td>The solution of <picture><source srcset="form_2639_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-1} * src$" src="form_2639.png"/></picture>. </td></tr>
     <tr><td class="paramdir">[in]</td><td class="paramname">tolerance</td><td>The tolerance with which to solve the linear system of equations.</td></tr>
   </table>
   </dd>
 </dl>
-<p>A call to this function should store in <code>dst</code> the result of <picture><source srcset="form_2582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-1}$" src="form_2582.png"/></picture> applied to <code>src</code>, i.e., the solution of the linear system <code>J*dst = src</code>. It is the user's responsibility to set up proper solvers and preconditioners either inside this function, or already within the <code><a class="el" href="#href_anchor">setup_jacobian()</a></code> function. (The latter is, for example, what the <a class="el" href="step_77.html">step-77</a> program does: All expensive operations happen in <code><a class="el" href="#href_anchor">setup_jacobian()</a></code>, given that that function is called far less often than the current one.)</p>
+<p>A call to this function should store in <code>dst</code> the result of <picture><source srcset="form_2638_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-1}$" src="form_2638.png"/></picture> applied to <code>src</code>, i.e., the solution of the linear system <code>J*dst = src</code>. It is the user's responsibility to set up proper solvers and preconditioners either inside this function, or already within the <code><a class="el" href="#href_anchor">setup_jacobian()</a></code> function. (The latter is, for example, what the <a class="el" href="step_77.html">step-77</a> program does: All expensive operations happen in <code><a class="el" href="#href_anchor">setup_jacobian()</a></code>, given that that function is called far less often than the current one.)</p>
 <dl class="section note"><dt>Note</dt><dd>This variable represents a <a class="el" href="DEALGlossary.html#href_anchor">user provided callback</a>. See there for a description of how to deal with errors and other requirements and conventions. In particular, <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> can deal with "recoverable" errors in some circumstances, so callbacks can throw exceptions of type RecoverableUserCallbackError. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="ida_8h_source.html#href_anchor">781</a> of file <a class="el" href="ida_8h_source.html">ida.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1IDA_1_1AdditionalData.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1IDA_1_1AdditionalData.html	2024-03-17 21:57:36.535191632 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1IDA_1_1AdditionalData.html	2024-03-17 21:57:36.535191632 +0000
@@ -551,8 +551,8 @@
       </table>
 </div><div class="memdoc">
 <p>Type of correction for initial conditions.</p>
-<p>If you do not provide consistent initial conditions, (i.e., conditions for which <picture><source srcset="form_2663_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(y_dot(0), y(0), 0) = 0$" src="form_2663.png"/></picture>), you can ask <a class="el" href="namespaceSUNDIALS.html">SUNDIALS</a> to compute initial conditions for you by using the <code>ic_type</code> parameter at construction time.</p>
-<p>Notice that you could in principle use this capabilities to solve for steady state problems by setting y_dot to zero, and asking to compute <picture><source srcset="form_2664_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y(0)$" src="form_2664.png"/></picture> that satisfies <picture><source srcset="form_2665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(0, y(0), 0) = 0$" src="form_2665.png"/></picture>, however the nonlinear solver used inside <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> may not be robust enough for complex problems with several millions unknowns. </p>
+<p>If you do not provide consistent initial conditions, (i.e., conditions for which <picture><source srcset="form_2640_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(y_dot(0), y(0), 0) = 0$" src="form_2640.png"/></picture>), you can ask <a class="el" href="namespaceSUNDIALS.html">SUNDIALS</a> to compute initial conditions for you by using the <code>ic_type</code> parameter at construction time.</p>
+<p>Notice that you could in principle use this capabilities to solve for steady state problems by setting y_dot to zero, and asking to compute <picture><source srcset="form_2641_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y(0)$" src="form_2641.png"/></picture> that satisfies <picture><source srcset="form_2642_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(0, y(0), 0) = 0$" src="form_2642.png"/></picture>, however the nonlinear solver used inside <a class="el" href="classSUNDIALS_1_1IDA.html">IDA</a> may not be robust enough for complex problems with several millions unknowns. </p>
 
 <p class="definition">Definition at line <a class="el" href="ida_8h_source.html#href_anchor">523</a> of file <a class="el" href="ida_8h_source.html">ida.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1KINSOL.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1KINSOL.html	2024-03-17 21:57:36.571191855 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSUNDIALS_1_1KINSOL.html	2024-03-17 21:57:36.571191855 +0000
@@ -175,48 +175,48 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;typename VectorType = Vector&lt;double&gt;&gt;<br />
 class SUNDIALS::KINSOL&lt; VectorType &gt;</div><p>Interface to <a class="el" href="namespaceSUNDIALS.html">SUNDIALS</a>' nonlinear solver (<a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a>).</p>
-<p><a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> is a solver for nonlinear algebraic systems in residual form <picture><source srcset="form_2554_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u)
-= 0$" src="form_2554.png"/></picture> or fixed point form <picture><source srcset="form_2555_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G(u) = u$" src="form_2555.png"/></picture>, where <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> is a vector which we will assume to be in <picture><source srcset="form_2556_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^n$" src="form_2556.png"/></picture> or <picture><source srcset="form_2557_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb C}^n$" src="form_2557.png"/></picture>, but that may also have a block structure and may be distributed in parallel computations; the functions <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> and <picture><source srcset="form_1737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1737.png"/></picture> satisfy <picture><source srcset="form_2558_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F,G:{\mathbb R}^N \to{\mathbb R}^N$" src="form_2558.png"/></picture> or <picture><source srcset="form_2559_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F,G:{\mathbb C}^N \to{\mathbb C}^N$" src="form_2559.png"/></picture>. It includes a Newton-Krylov solver as well as Picard and fixed point solvers, both of which can be accelerated with Anderson acceleration. <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> is based on the previous Fortran package NKSOL of Brown and Saad. An example of using <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> can be found in the <a class="el" href="step_77.html">step-77</a> tutorial program.</p>
+<p><a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> is a solver for nonlinear algebraic systems in residual form <picture><source srcset="form_2643_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u)
+= 0$" src="form_2643.png"/></picture> or fixed point form <picture><source srcset="form_2644_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G(u) = u$" src="form_2644.png"/></picture>, where <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> is a vector which we will assume to be in <picture><source srcset="form_2645_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^n$" src="form_2645.png"/></picture> or <picture><source srcset="form_2646_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb C}^n$" src="form_2646.png"/></picture>, but that may also have a block structure and may be distributed in parallel computations; the functions <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> and <picture><source srcset="form_1739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1739.png"/></picture> satisfy <picture><source srcset="form_2647_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F,G:{\mathbb R}^N \to{\mathbb R}^N$" src="form_2647.png"/></picture> or <picture><source srcset="form_2648_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F,G:{\mathbb C}^N \to{\mathbb C}^N$" src="form_2648.png"/></picture>. It includes a Newton-Krylov solver as well as Picard and fixed point solvers, both of which can be accelerated with Anderson acceleration. <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> is based on the previous Fortran package NKSOL of Brown and Saad. An example of using <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> can be found in the <a class="el" href="step_77.html">step-77</a> tutorial program.</p>
 <p><a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a>'s Newton solver employs the inexact Newton method. As this solver is intended mainly for large systems, the user is required to provide their own solver function.</p>
 <p>At the highest level, <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> implements the following iteration scheme:</p><ul>
-<li>set <picture><source srcset="form_2560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0$" src="form_2560.png"/></picture> = an initial guess</li>
-<li>For <picture><source srcset="form_2561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n = 0, 1, 2, \ldots$" src="form_2561.png"/></picture> until convergence do:<ul>
-<li>Solve <picture><source srcset="form_2562_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u_n)\delta_n = -F(u_n)$" src="form_2562.png"/></picture></li>
-<li>Set <picture><source srcset="form_2563_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_{n+1} = u_n + \lambda \delta_n, 0 &lt; \lambda \leq 1$" src="form_2563.png"/></picture></li>
+<li>set <picture><source srcset="form_2649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0$" src="form_2649.png"/></picture> = an initial guess</li>
+<li>For <picture><source srcset="form_2650_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n = 0, 1, 2, \ldots$" src="form_2650.png"/></picture> until convergence do:<ul>
+<li>Solve <picture><source srcset="form_2651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u_n)\delta_n = -F(u_n)$" src="form_2651.png"/></picture></li>
+<li>Set <picture><source srcset="form_2652_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_{n+1} = u_n + \lambda \delta_n, 0 &lt; \lambda \leq 1$" src="form_2652.png"/></picture></li>
 <li>Test for convergence</li>
 </ul>
 </li>
 </ul>
-<p>Here, <picture><source srcset="form_2564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_n$" src="form_2564.png"/></picture> is the <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>-th iterate to <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture>, and <picture><source srcset="form_2565_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u) = \nabla_u F(u)$" src="form_2565.png"/></picture> is the system Jacobian. At each stage in the iteration process, a scalar multiple of the step <picture><source srcset="form_2566_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_n$" src="form_2566.png"/></picture>, is added to <picture><source srcset="form_2564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_n$" src="form_2564.png"/></picture> to produce a new iterate, <picture><source srcset="form_2567_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_{n+1}$" src="form_2567.png"/></picture>. A test for convergence is made before the iteration continues.</p>
+<p>Here, <picture><source srcset="form_2653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_n$" src="form_2653.png"/></picture> is the <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>-th iterate to <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture>, and <picture><source srcset="form_2654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u) = \nabla_u F(u)$" src="form_2654.png"/></picture> is the system Jacobian. At each stage in the iteration process, a scalar multiple of the step <picture><source srcset="form_2655_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_n$" src="form_2655.png"/></picture>, is added to <picture><source srcset="form_2653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_n$" src="form_2653.png"/></picture> to produce a new iterate, <picture><source srcset="form_2656_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_{n+1}$" src="form_2656.png"/></picture>. A test for convergence is made before the iteration continues.</p>
 <p>Unless specified otherwise by the user, <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> strives to update Jacobian information as infrequently as possible to balance the high costs of matrix operations against other costs. Specifically, these updates occur when:</p><ul>
 <li>the problem is initialized,</li>
-<li><picture><source srcset="form_2568_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\lambda \delta_{n-1} \|_{D_u,\infty} \geq 1.5$" src="form_2568.png"/></picture> (inexact Newton only, see below for a definition of <picture><source srcset="form_2569_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\| \cdot \|_{D_u,\infty}$" src="form_2569.png"/></picture>)</li>
+<li><picture><source srcset="form_2657_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\lambda \delta_{n-1} \|_{D_u,\infty} \geq 1.5$" src="form_2657.png"/></picture> (inexact Newton only, see below for a definition of <picture><source srcset="form_2658_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\| \cdot \|_{D_u,\infty}$" src="form_2658.png"/></picture>)</li>
 <li>a specified number of nonlinear iterations have passed since the last update,</li>
 <li>the linear solver failed recoverably with outdated Jacobian information,</li>
 <li>the global strategy failed with outdated Jacobian information, or</li>
-<li><picture><source srcset="form_2570_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\lambda \delta_{n} \|_{D_u,\infty} \leq $" src="form_2570.png"/></picture> <em>tolerance</em> with outdated Jacobian information.</li>
+<li><picture><source srcset="form_2659_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\lambda \delta_{n} \|_{D_u,\infty} \leq $" src="form_2659.png"/></picture> <em>tolerance</em> with outdated Jacobian information.</li>
 </ul>
 <p><a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> allows changes to the above strategy through optional solver inputs. The user can disable the initial Jacobian information evaluation or change the default value of the number of nonlinear iterations after which a Jacobian information update is enforced.</p>
-<p>To address the case of ill-conditioned nonlinear systems, <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> allows prescribing scaling factors both for the solution vector and for the residual vector. For scaling to be used, the user may supply the function <a class="el" href="#href_anchor">get_solution_scaling()</a>, that returns values <picture><source srcset="form_2571_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_u$" src="form_2571.png"/></picture>, which are diagonal elements of the scaling matrix such that <picture><source srcset="form_2572_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_u u_n$" src="form_2572.png"/></picture> has all components roughly the same magnitude when <picture><source srcset="form_2564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_n$" src="form_2564.png"/></picture> is close to a solution, and <a class="el" href="#href_anchor">get_function_scaling()</a>, that supply values <picture><source srcset="form_2573_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_F$" src="form_2573.png"/></picture>, which are diagonal scaling matrix elements such that <picture><source srcset="form_2574_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_F F$" src="form_2574.png"/></picture> has all components roughly the same magnitude when <picture><source srcset="form_2564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_n$" src="form_2564.png"/></picture> is <em>not</em> too close to a solution.</p>
+<p>To address the case of ill-conditioned nonlinear systems, <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> allows prescribing scaling factors both for the solution vector and for the residual vector. For scaling to be used, the user may supply the function <a class="el" href="#href_anchor">get_solution_scaling()</a>, that returns values <picture><source srcset="form_2660_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_u$" src="form_2660.png"/></picture>, which are diagonal elements of the scaling matrix such that <picture><source srcset="form_2661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_u u_n$" src="form_2661.png"/></picture> has all components roughly the same magnitude when <picture><source srcset="form_2653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_n$" src="form_2653.png"/></picture> is close to a solution, and <a class="el" href="#href_anchor">get_function_scaling()</a>, that supply values <picture><source srcset="form_2662_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_F$" src="form_2662.png"/></picture>, which are diagonal scaling matrix elements such that <picture><source srcset="form_2663_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_F F$" src="form_2663.png"/></picture> has all components roughly the same magnitude when <picture><source srcset="form_2653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_n$" src="form_2653.png"/></picture> is <em>not</em> too close to a solution.</p>
 <p>When scaling values are provided for the solution vector, these values are automatically incorporated into the calculation of the perturbations used for the default difference quotient approximations for Jacobian information if the user does not supply a Jacobian solver through the <a class="el" href="#href_anchor">solve_with_jacobian()</a> function.</p>
-<p>Two methods of applying a computed step <picture><source srcset="form_2566_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_n$" src="form_2566.png"/></picture> to the previously computed solution vector are implemented. The first and simplest is the standard Newton strategy which applies the update with a constant <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> always set to 1. The other method is a global strategy, which attempts to use the direction implied by <picture><source srcset="form_2566_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_n$" src="form_2566.png"/></picture> in the most efficient way for furthering convergence of the nonlinear problem. This technique is implemented in the second strategy, called Linesearch. This option employs both the <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> and <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> conditions of the Goldstein-Armijo linesearch algorithm given in <b>[DennisSchnabel96]</b> , where <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> is chosen to guarantee a sufficient decrease in <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> relative to the step length as well as a minimum step length relative to the initial rate of decrease of <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture>. One property of the algorithm is that the full Newton step tends to be taken close to the solution.</p>
+<p>Two methods of applying a computed step <picture><source srcset="form_2655_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_n$" src="form_2655.png"/></picture> to the previously computed solution vector are implemented. The first and simplest is the standard Newton strategy which applies the update with a constant <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> always set to 1. The other method is a global strategy, which attempts to use the direction implied by <picture><source srcset="form_2655_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_n$" src="form_2655.png"/></picture> in the most efficient way for furthering convergence of the nonlinear problem. This technique is implemented in the second strategy, called Linesearch. This option employs both the <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> and <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> conditions of the Goldstein-Armijo linesearch algorithm given in <b>[DennisSchnabel96]</b> , where <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> is chosen to guarantee a sufficient decrease in <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> relative to the step length as well as a minimum step length relative to the initial rate of decrease of <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture>. One property of the algorithm is that the full Newton step tends to be taken close to the solution.</p>
 <p>The basic fixed-point iteration scheme implemented in <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> is given by:</p><ul>
-<li>Set <picture><source srcset="form_2575_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0 =$" src="form_2575.png"/></picture> an initial guess</li>
-<li>For <picture><source srcset="form_2576_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n = 0, 1, 2, \dots$" src="form_2576.png"/></picture> until convergence do:<ul>
-<li>Set <picture><source srcset="form_2577_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_{n+1} = G(u_n)$" src="form_2577.png"/></picture></li>
+<li>Set <picture><source srcset="form_2664_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0 =$" src="form_2664.png"/></picture> an initial guess</li>
+<li>For <picture><source srcset="form_2665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n = 0, 1, 2, \dots$" src="form_2665.png"/></picture> until convergence do:<ul>
+<li>Set <picture><source srcset="form_2666_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_{n+1} = G(u_n)$" src="form_2666.png"/></picture></li>
 <li>Test for convergence</li>
 </ul>
 </li>
 </ul>
-<p>At each stage in the iteration process, function <picture><source srcset="form_1737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1737.png"/></picture> is applied to the current iterate to produce a new iterate, <picture><source srcset="form_2567_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_{n+1}$" src="form_2567.png"/></picture>. A test for convergence is made before the iteration continues.</p>
-<p>For Picard iteration, as implemented in <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a>, we consider a special form of the nonlinear function <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture>, such that <picture><source srcset="form_2578_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u) = Lu - N(u)$" src="form_2578.png"/></picture>, where <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture> is a constant nonsingular matrix and <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> is (in general) nonlinear.</p>
-<p>Then the fixed-point function <picture><source srcset="form_1737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1737.png"/></picture> is defined as <picture><source srcset="form_2579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G(u) = u - L^{-1}F(u)$" src="form_2579.png"/></picture>. Within each iteration, the Picard step is computed then added to <picture><source srcset="form_2564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_n$" src="form_2564.png"/></picture> to produce the new iterate. Next, the nonlinear residual function is evaluated at the new iterate, and convergence is checked. The Picard and fixed point methods can be significantly accelerated using Anderson's acceleration method.</p>
+<p>At each stage in the iteration process, function <picture><source srcset="form_1739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1739.png"/></picture> is applied to the current iterate to produce a new iterate, <picture><source srcset="form_2656_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_{n+1}$" src="form_2656.png"/></picture>. A test for convergence is made before the iteration continues.</p>
+<p>For Picard iteration, as implemented in <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a>, we consider a special form of the nonlinear function <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture>, such that <picture><source srcset="form_2667_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u) = Lu - N(u)$" src="form_2667.png"/></picture>, where <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture> is a constant nonsingular matrix and <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> is (in general) nonlinear.</p>
+<p>Then the fixed-point function <picture><source srcset="form_1739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1739.png"/></picture> is defined as <picture><source srcset="form_2668_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G(u) = u - L^{-1}F(u)$" src="form_2668.png"/></picture>. Within each iteration, the Picard step is computed then added to <picture><source srcset="form_2653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_n$" src="form_2653.png"/></picture> to produce the new iterate. Next, the nonlinear residual function is evaluated at the new iterate, and convergence is checked. The Picard and fixed point methods can be significantly accelerated using Anderson's acceleration method.</p>
 <p>The user has to provide the implementation of the following <code>std::function</code>s:</p><ul>
 <li>reinit_vector; and only one of</li>
 <li>residual; or</li>
 <li>iteration_function;</li>
 </ul>
-<p>Specifying <a class="el" href="#href_anchor">residual()</a> allows the user to use Newton and Picard strategies (i.e., <picture><source srcset="form_2580_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u)=0$" src="form_2580.png"/></picture> will be solved), while specifying <a class="el" href="#href_anchor">iteration_function()</a>, a fixed point iteration will be used (i.e., <picture><source srcset="form_2581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G(u)=u$" src="form_2581.png"/></picture> will be solved). An error will be thrown if <a class="el" href="#href_anchor">iteration_function()</a> is set for Picard or Newton.</p>
+<p>Specifying <a class="el" href="#href_anchor">residual()</a> allows the user to use Newton and Picard strategies (i.e., <picture><source srcset="form_2669_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u)=0$" src="form_2669.png"/></picture> will be solved), while specifying <a class="el" href="#href_anchor">iteration_function()</a>, a fixed point iteration will be used (i.e., <picture><source srcset="form_2670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G(u)=u$" src="form_2670.png"/></picture> will be solved). An error will be thrown if <a class="el" href="#href_anchor">iteration_function()</a> is set for Picard or Newton.</p>
 <p>If the use of a Newton or Picard method is desired, then the user should also supply</p><ul>
 <li>solve_jacobian_system or solve_with_jacobian; and optionally</li>
 <li>setup_jacobian;</li>
@@ -440,12 +440,12 @@
 <p>A function object that users may supply and that is intended to prepare the linear solver for subsequent calls to <a class="el" href="#href_anchor">solve_with_jacobian()</a>.</p>
 <p>The job of <a class="el" href="#href_anchor">setup_jacobian()</a> is to prepare the linear solver for subsequent calls to <a class="el" href="#href_anchor">solve_with_jacobian()</a>, in the solution of linear systems <picture><source srcset="form_1910_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax = b$" src="form_1910.png"/></picture>. The exact nature of this system depends on the SolutionStrategy that has been selected.</p>
 <p>In the cases strategy = SolutionStrategy::newton or SolutionStrategy::linesearch, <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is the Jacobian <picture><source srcset="form_2213_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J = \partial
-F/\partial u$" src="form_2213.png"/></picture>. If strategy = SolutionStrategy::picard, <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is the approximate Jacobian matrix <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>. If strategy = SolutionStrategy::fixed_point, then linear systems do not arise, and this function is never called.</p>
+F/\partial u$" src="form_2213.png"/></picture>. If strategy = SolutionStrategy::picard, <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is the approximate Jacobian matrix <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>. If strategy = SolutionStrategy::fixed_point, then linear systems do not arise, and this function is never called.</p>
 <p>The <a class="el" href="#href_anchor">setup_jacobian()</a> function may call a user-supplied function, or a function within the linear solver module, to compute Jacobian-related data that is required by the linear solver. It may also preprocess that data as needed for <a class="el" href="#href_anchor">solve_with_jacobian()</a>, which may involve calling a generic function (such as for LU factorization) or, more generally, build preconditioners from the assembled Jacobian. In any case, the data so generated may then be used whenever a linear system is solved.</p>
 <p>The point of this function is that <a class="el" href="#href_anchor">setup_jacobian()</a> function is not called at every Newton iteration, but only as frequently as the solver determines that it is appropriate to perform the setup task. In this way, Jacobian-related data generated by <a class="el" href="#href_anchor">setup_jacobian()</a> is expected to be used over a number of Newton iterations. <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> determines itself when it is beneficial to regenerate the Jacobian and associated information (such as preconditioners computed for the Jacobian), thereby saving the effort to regenerate the Jacobian matrix and a preconditioner for it whenever possible.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramname">current_u</td><td>Current value of <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> </td></tr>
+    <tr><td class="paramname">current_u</td><td>Current value of <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> </td></tr>
     <tr><td class="paramname">current_f</td><td>Current value of <picture><source srcset="form_2215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u)$" src="form_2215.png"/></picture> or <picture><source srcset="form_2216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G(u)$" src="form_2216.png"/></picture></td></tr>
   </table>
   </dd>
@@ -472,14 +472,14 @@
 <dl class="deprecated"><dt><b><a class="el" href="deprecated.html#href_anchor">Deprecated</a></b></dt><dd>Versions of <a class="el" href="namespaceSUNDIALS.html">SUNDIALS</a> after 4.0 no longer provide all of the information necessary for this callback (see below). Use the <code>solve_with_jacobian</code> callback described below.</dd></dl>
 <p>A function object that users may supply and that is intended to solve a linear system with the Jacobian matrix. This function will be called by <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> (possibly several times) after <a class="el" href="#href_anchor">setup_jacobian()</a> has been called at least once. <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> tries to do its best to call <a class="el" href="#href_anchor">setup_jacobian()</a> the minimum number of times. If convergence can be achieved without updating the Jacobian, then <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> does not call <a class="el" href="#href_anchor">setup_jacobian()</a> again. If, on the contrary, internal <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> convergence tests fail, then <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> calls <a class="el" href="#href_anchor">setup_jacobian()</a> again with updated vectors and coefficients so that successive calls to <a class="el" href="#href_anchor">solve_jacobian_system()</a> lead to better convergence in the Newton process.</p>
 <p>If you do not specify a <code>solve_jacobian_system</code> or <code>solve_with_jacobian</code> function, then only a fixed point iteration strategy can be used. Notice that this may not converge, or may converge very slowly.</p>
-<p>A call to this function should store in <code>dst</code> the result of <picture><source srcset="form_2582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-1}$" src="form_2582.png"/></picture> applied to <code>rhs</code>, i.e., <picture><source srcset="form_2583_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J \cdot dst = rhs$" src="form_2583.png"/></picture>. It is the user's responsibility to set up proper solvers and preconditioners inside this function (or in the <code>setup_jacobian</code> callback above).</p>
+<p>A call to this function should store in <code>dst</code> the result of <picture><source srcset="form_2638_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-1}$" src="form_2638.png"/></picture> applied to <code>rhs</code>, i.e., <picture><source srcset="form_2671_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J \cdot dst = rhs$" src="form_2671.png"/></picture>. It is the user's responsibility to set up proper solvers and preconditioners inside this function (or in the <code>setup_jacobian</code> callback above).</p>
 <p>Arguments to the function are:</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">ycur</td><td>The current <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> vector for the current <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> internal step. In the documentation above, this <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> vector is generally denoted by <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">fcur</td><td>The current value of the implicit right-hand side at <code>ycur</code>, <picture><source srcset="form_2584_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I (t_n, ypred)$" src="form_2584.png"/></picture>. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">ycur</td><td>The current <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> vector for the current <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> internal step. In the documentation above, this <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> vector is generally denoted by <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture>. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">fcur</td><td>The current value of the implicit right-hand side at <code>ycur</code>, <picture><source srcset="form_2672_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_I (t_n, ypred)$" src="form_2672.png"/></picture>. </td></tr>
     <tr><td class="paramdir">[in]</td><td class="paramname">rhs</td><td>The system right hand side to solve for </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">dst</td><td>The solution of <picture><source srcset="form_2585_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-1} * src$" src="form_2585.png"/></picture></td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">dst</td><td>The solution of <picture><source srcset="form_2639_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-1} * src$" src="form_2639.png"/></picture></td></tr>
   </table>
   </dd>
 </dl>
@@ -510,12 +510,12 @@
 </div><div class="memdoc">
 <p>A function object that users may supply and that is intended to solve a linear system with the Jacobian matrix. This function will be called by <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> (possibly several times) after <a class="el" href="#href_anchor">setup_jacobian()</a> has been called at least once. <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> tries to do its best to call <a class="el" href="#href_anchor">setup_jacobian()</a> the minimum number of times. If convergence can be achieved without updating the Jacobian, then <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> does not call <a class="el" href="#href_anchor">setup_jacobian()</a> again. If, on the contrary, internal <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> convergence tests fail, then <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> calls <a class="el" href="#href_anchor">setup_jacobian()</a> again with updated vectors and coefficients so that successive calls to <a class="el" href="#href_anchor">solve_with_jacobian()</a> lead to better convergence in the Newton process.</p>
 <p>If you do not specify a <code>solve_with_jacobian</code> function, then only a fixed point iteration strategy can be used. Notice that this may not converge, or may converge very slowly.</p>
-<p>A call to this function should store in <code>dst</code> the result of <picture><source srcset="form_2582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-1}$" src="form_2582.png"/></picture> applied to <code>rhs</code>, i.e., <picture><source srcset="form_2583_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J \cdot dst = rhs$" src="form_2583.png"/></picture>. It is the user's responsibility to set up proper solvers and preconditioners inside this function (or in the <code>setup_jacobian</code> callback above). The function attached to this callback is also provided with a tolerance to the linear solver, indicating that it is not necessary to solve the linear system with the Jacobian matrix exactly, but only to a tolerance that <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> will adapt over time.</p>
+<p>A call to this function should store in <code>dst</code> the result of <picture><source srcset="form_2638_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-1}$" src="form_2638.png"/></picture> applied to <code>rhs</code>, i.e., <picture><source srcset="form_2671_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J \cdot dst = rhs$" src="form_2671.png"/></picture>. It is the user's responsibility to set up proper solvers and preconditioners inside this function (or in the <code>setup_jacobian</code> callback above). The function attached to this callback is also provided with a tolerance to the linear solver, indicating that it is not necessary to solve the linear system with the Jacobian matrix exactly, but only to a tolerance that <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> will adapt over time.</p>
 <p>Arguments to the function are:</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">rhs</td><td>The system right hand side to solve for. </td></tr>
-    <tr><td class="paramdir">[out]</td><td class="paramname">dst</td><td>The solution of <picture><source srcset="form_2585_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-1} * src$" src="form_2585.png"/></picture>. </td></tr>
+    <tr><td class="paramdir">[out]</td><td class="paramname">dst</td><td>The solution of <picture><source srcset="form_2639_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^{-1} * src$" src="form_2639.png"/></picture>. </td></tr>
     <tr><td class="paramdir">[in]</td><td class="paramname">tolerance</td><td>The tolerance with which to solve the linear system of equations.</td></tr>
   </table>
   </dd>
@@ -540,7 +540,7 @@
       </table>
 </div><div class="memdoc">
 <p>A function object that users may supply and that is intended to return a vector whose components are the weights used by <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> to compute the vector norm of the solution. The implementation of this function is optional, and it is used only if implemented.</p>
-<p>The intent for this scaling factor is for problems in which the different components of a solution have vastly different numerical magnitudes &ndash; typically because they have different physical units and represent different things. For example, if one were to solve a nonlinear Stokes problem, the solution vector has components that correspond to velocities and other components that correspond to pressures. These have different physical units and depending on which units one chooses, they may have roughly comparable numerical sizes or maybe they don't. To give just one example, in simulations of flow in the Earth's interior, one has velocities on the order of maybe ten centimeters per year, and pressures up to around 100 GPa. If one expresses this in SI units, this corresponds to velocities of around <picture><source srcset="form_2586_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0.000,000,003=3 \times 10^{-9}$" src="form_2586.png"/></picture> m/s, and pressures around <picture><source srcset="form_2587_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^9 \text{kg}/\text{m}/\text{s}^2$" src="form_2587.png"/></picture>, i.e., vastly different. In such cases, computing the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture> norm of a solution-type vector (e.g., the difference between the previous and the current solution) makes no sense because the norm will either be dominated by the velocity components or the pressure components. The scaling vector this function returns is intended to provide each component of the solution with a scaling factor that is generally chosen as the inverse of a "typical velocity" or "typical pressure" so that upon multiplication of a vector component by the corresponding scaling vector component, one obtains a number that is of order of magnitude of one (i.e., a reasonably small multiple of one times the typical velocity/pressure). The <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> manual states this as follows: "The user should supply values \_form#href_anchor".</p>
+<p>The intent for this scaling factor is for problems in which the different components of a solution have vastly different numerical magnitudes &ndash; typically because they have different physical units and represent different things. For example, if one were to solve a nonlinear Stokes problem, the solution vector has components that correspond to velocities and other components that correspond to pressures. These have different physical units and depending on which units one chooses, they may have roughly comparable numerical sizes or maybe they don't. To give just one example, in simulations of flow in the Earth's interior, one has velocities on the order of maybe ten centimeters per year, and pressures up to around 100 GPa. If one expresses this in SI units, this corresponds to velocities of around <picture><source srcset="form_2673_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0.000,000,003=3 \times 10^{-9}$" src="form_2673.png"/></picture> m/s, and pressures around <picture><source srcset="form_2674_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^9 \text{kg}/\text{m}/\text{s}^2$" src="form_2674.png"/></picture>, i.e., vastly different. In such cases, computing the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture> norm of a solution-type vector (e.g., the difference between the previous and the current solution) makes no sense because the norm will either be dominated by the velocity components or the pressure components. The scaling vector this function returns is intended to provide each component of the solution with a scaling factor that is generally chosen as the inverse of a "typical velocity" or "typical pressure" so that upon multiplication of a vector component by the corresponding scaling vector component, one obtains a number that is of order of magnitude of one (i.e., a reasonably small multiple of one times the typical velocity/pressure). The <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> manual states this as follows: "The user should supply values \_form#href_anchor".</p>
 <p>If no function is provided to a <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> object, then this is interpreted as implicitly saying that all of these scaling factors should be considered as one.</p>
 <dl class="section note"><dt>Note</dt><dd>This variable represents a <a class="el" href="DEALGlossary.html#href_anchor">user provided callback</a>. See there for a description of how to deal with errors and other requirements and conventions. In particular, <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> can deal with "recoverable" errors in some circumstances, so callbacks can throw exceptions of type RecoverableUserCallbackError. </dd></dl>
 
@@ -562,7 +562,7 @@
       </table>
 </div><div class="memdoc">
 <p>A function object that users may supply and that is intended to return a vector whose components are the weights used by <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> to compute the vector norm of the function evaluation away from the solution. The implementation of this function is optional, and it is used only if implemented.</p>
-<p>The point of this function and the scaling vector it returns is similar to the one discussed above for <code>get_solution_scaling</code>, except that it is for a vector that scales the components of the function <picture><source srcset="form_2589_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)$" src="form_2589.png"/></picture>, rather than the components of <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture>, when computing norms. As above, if no function is provided, then this is equivalent to using a scaling vector whose components are all equal to one.</p>
+<p>The point of this function and the scaling vector it returns is similar to the one discussed above for <code>get_solution_scaling</code>, except that it is for a vector that scales the components of the function <picture><source srcset="form_2676_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)$" src="form_2676.png"/></picture>, rather than the components of <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture>, when computing norms. As above, if no function is provided, then this is equivalent to using a scaling vector whose components are all equal to one.</p>
 <dl class="section note"><dt>Note</dt><dd>This variable represents a <a class="el" href="DEALGlossary.html#href_anchor">user provided callback</a>. See there for a description of how to deal with errors and other requirements and conventions. In particular, <a class="el" href="classSUNDIALS_1_1KINSOL.html">KINSOL</a> can deal with "recoverable" errors in some circumstances, so callbacks can throw exceptions of type RecoverableUserCallbackError. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="kinsol_8h_source.html#href_anchor">691</a> of file <a class="el" href="kinsol_8h_source.html">kinsol.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classScaLAPACKMatrix.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classScaLAPACKMatrix.html	2024-03-17 21:57:36.655192373 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classScaLAPACKMatrix.html	2024-03-17 21:57:36.663192423 +0000
@@ -362,15 +362,15 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;typename NumberType&gt;<br />
 class ScaLAPACKMatrix&lt; NumberType &gt;</div><p>A wrapper class around ScaLAPACK parallel dense linear algebra.</p>
-<p>ScaLAPACK assumes that matrices are distributed according to the block-cyclic decomposition scheme. An <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> by <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> matrix is first decomposed into <picture><source srcset="form_1811_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lceil M / MB \rceil$" src="form_1811.png"/></picture> by <picture><source srcset="form_1812_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lceil N / NB \rceil$" src="form_1812.png"/></picture> blocks which are then uniformly distributed across the 2d process grid with <picture><source srcset="form_1813_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p q \le Np$" src="form_1813.png"/></picture> processes, where <picture><source srcset="form_1814_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p,q$" src="form_1814.png"/></picture> are grid dimensions and <picture><source srcset="form_714_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Np$" src="form_714.png"/></picture> is the total number of processes. The parameters MB and NB are referred to as row and column block size and determine the granularity of the block-cyclic distribution.</p>
-<p>In the following the block-cyclic distribution of a <picture><source srcset="form_1815_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10 \times 9$" src="form_1815.png"/></picture> matrix onto a <picture><source srcset="form_235_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$3\times 3$" src="form_235.png"/></picture> Cartesian process grid with block sizes <picture><source srcset="form_1816_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{MB}=\text{NB}=2$" src="form_1816.png"/></picture> is displayed.</p>
+<p>ScaLAPACK assumes that matrices are distributed according to the block-cyclic decomposition scheme. An <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> by <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> matrix is first decomposed into <picture><source srcset="form_1781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lceil M / MB \rceil$" src="form_1781.png"/></picture> by <picture><source srcset="form_1782_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lceil N / NB \rceil$" src="form_1782.png"/></picture> blocks which are then uniformly distributed across the 2d process grid with <picture><source srcset="form_1783_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p q \le Np$" src="form_1783.png"/></picture> processes, where <picture><source srcset="form_1784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p,q$" src="form_1784.png"/></picture> are grid dimensions and <picture><source srcset="form_714_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Np$" src="form_714.png"/></picture> is the total number of processes. The parameters MB and NB are referred to as row and column block size and determine the granularity of the block-cyclic distribution.</p>
+<p>In the following the block-cyclic distribution of a <picture><source srcset="form_1785_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10 \times 9$" src="form_1785.png"/></picture> matrix onto a <picture><source srcset="form_235_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$3\times 3$" src="form_235.png"/></picture> Cartesian process grid with block sizes <picture><source srcset="form_1786_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{MB}=\text{NB}=2$" src="form_1786.png"/></picture> is displayed.</p>
 <p> <style>div.image
 img[src="scalapack_block_cycling.png"]{width:35%;}</style>
  </p><div class="image">
 <img src="scalapack_block_cycling.png" alt=""/>
 <div class="caption">
 Block-Cyclic Distribution</div></div>
-<p>Note that the odd number of columns of the local matrices owned by the processes P2, P5 and P8 accounts for <picture><source srcset="form_1817_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N=9$" src="form_1817.png"/></picture> not being an integral multiple of <picture><source srcset="form_1818_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{NB}=2$" src="form_1818.png"/></picture>.</p>
+<p>Note that the odd number of columns of the local matrices owned by the processes P2, P5 and P8 accounts for <picture><source srcset="form_1787_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N=9$" src="form_1787.png"/></picture> not being an integral multiple of <picture><source srcset="form_1788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{NB}=2$" src="form_1788.png"/></picture>.</p>
 <p>The choice of the block sizes is a compromise between a sufficiently large size for efficient local/serial BLAS, but one that is also small enough to achieve good parallel load balance.</p>
 <p>Below we show a strong scaling example of <a class="el" href="#href_anchor">ScaLAPACKMatrix::invert()</a> on up to 5 nodes each composed of two Intel Xeon 2660v2 IvyBridge sockets 2.20GHz, 10 cores/socket. Calculations are performed on square processor grids 1x1, 2x2, 3x3, 4x4, 5x5, 6x6, 7x7, 8x8, 9x9, 10x10.</p>
 <div class="image">
@@ -615,7 +615,7 @@
       </table>
 </div><div class="memdoc">
 <p>Constructor for a rectangular matrix with <code>n_rows</code> and <code>n_cols</code> and distributed using the grid <code>process_grid</code>.</p>
-<p>The parameters <code>row_block_size</code> and <code>column_block_size</code> are the block sizes used for the block-cyclic distribution of the matrix. In general, it is recommended to use powers of <picture><source srcset="form_1326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1326.png"/></picture>, e.g. <picture><source srcset="form_1819_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$16,32,64, \dots$" src="form_1819.png"/></picture>. </p>
+<p>The parameters <code>row_block_size</code> and <code>column_block_size</code> are the block sizes used for the block-cyclic distribution of the matrix. In general, it is recommended to use powers of <picture><source srcset="form_1327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1327.png"/></picture>, e.g. <picture><source srcset="form_1789_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$16,32,64, \dots$" src="form_1789.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="scalapack_8cc_source.html#href_anchor">81</a> of file <a class="el" href="scalapack_8cc_source.html">scalapack.cc</a>.</p>
 
@@ -652,7 +652,7 @@
       </table>
 </div><div class="memdoc">
 <p>Constructor for a square matrix of size <code>size</code>, and distributed using the process grid in <code>process_grid</code>.</p>
-<p>The parameter <code>block_size</code> is used for the block-cyclic distribution of the matrix. An identical block size is used for the rows and columns of the matrix. In general, it is recommended to use powers of <picture><source srcset="form_1326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1326.png"/></picture>, e.g. <picture><source srcset="form_1819_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$16,32,64, \dots$" src="form_1819.png"/></picture>. </p>
+<p>The parameter <code>block_size</code> is used for the block-cyclic distribution of the matrix. An identical block size is used for the rows and columns of the matrix. In general, it is recommended to use powers of <picture><source srcset="form_1327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1327.png"/></picture>, e.g. <picture><source srcset="form_1789_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$16,32,64, \dots$" src="form_1789.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="scalapack_8cc_source.html#href_anchor">106</a> of file <a class="el" href="scalapack_8cc_source.html">scalapack.cc</a>.</p>
 
@@ -690,7 +690,7 @@
 </div><div class="memdoc">
 <p>Constructor for a general rectangular matrix that is read from the file <code>filename</code> and distributed using the grid <code>process_grid</code>.</p>
 <p>Loads the matrix from file <code>filename</code> using <a class="el" href="namespaceHDF5.html">HDF5</a>. In case that deal.II was built without <a class="el" href="namespaceHDF5.html">HDF5</a> a call to this function will cause an exception to be thrown.</p>
-<p>The parameters <code>row_block_size</code> and <code>column_block_size</code> are the block sizes used for the block-cyclic distribution of the matrix. In general, it is recommended to use powers of <picture><source srcset="form_1326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1326.png"/></picture>, e.g. <picture><source srcset="form_1819_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$16,32,64, \dots$" src="form_1819.png"/></picture>. </p>
+<p>The parameters <code>row_block_size</code> and <code>column_block_size</code> are the block sizes used for the block-cyclic distribution of the matrix. In general, it is recommended to use powers of <picture><source srcset="form_1327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1327.png"/></picture>, e.g. <picture><source srcset="form_1789_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$16,32,64, \dots$" src="form_1789.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="scalapack_8cc_source.html#href_anchor">122</a> of file <a class="el" href="scalapack_8cc_source.html">scalapack.cc</a>.</p>
 
@@ -766,7 +766,7 @@
       </table>
 </div><div class="memdoc">
 <p>Initialize the rectangular matrix with <code>n_rows</code> and <code>n_cols</code> and distributed using the grid <code>process_grid</code>.</p>
-<p>The parameters <code>row_block_size</code> and <code>column_block_size</code> are the block sizes used for the block-cyclic distribution of the matrix. In general, it is recommended to use powers of <picture><source srcset="form_1326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1326.png"/></picture>, e.g. <picture><source srcset="form_1819_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$16,32,64, \dots$" src="form_1819.png"/></picture>. </p>
+<p>The parameters <code>row_block_size</code> and <code>column_block_size</code> are the block sizes used for the block-cyclic distribution of the matrix. In general, it is recommended to use powers of <picture><source srcset="form_1327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1327.png"/></picture>, e.g. <picture><source srcset="form_1789_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$16,32,64, \dots$" src="form_1789.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="scalapack_8cc_source.html#href_anchor">217</a> of file <a class="el" href="scalapack_8cc_source.html">scalapack.cc</a>.</p>
 
@@ -803,7 +803,7 @@
       </table>
 </div><div class="memdoc">
 <p>Initialize the square matrix of size <code>size</code> and distributed using the grid <code>process_grid</code>.</p>
-<p>The parameter <code>block_size</code> is used for the block-cyclic distribution of the matrix. An identical block size is used for the rows and columns of the matrix. In general, it is recommended to use powers of <picture><source srcset="form_1326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1326.png"/></picture>, e.g. <picture><source srcset="form_1819_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$16,32,64, \dots$" src="form_1819.png"/></picture>. </p>
+<p>The parameter <code>block_size</code> is used for the block-cyclic distribution of the matrix. An identical block size is used for the rows and columns of the matrix. In general, it is recommended to use powers of <picture><source srcset="form_1327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1327.png"/></picture>, e.g. <picture><source srcset="form_1789_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$16,32,64, \dots$" src="form_1789.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="scalapack_8cc_source.html#href_anchor">291</a> of file <a class="el" href="scalapack_8cc_source.html">scalapack.cc</a>.</p>
 
@@ -1047,9 +1047,9 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Transposing assignment: <picture><source srcset="form_1820_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} = \mathbf{B}^T$" src="form_1820.png"/></picture></p>
-<p>The matrices <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture> and <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_836.png"/></picture> must have the same process grid.</p>
-<p>The following alignment conditions have to be fulfilled: <picture><source srcset="form_1821_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=NB_B$" src="form_1821.png"/></picture> and <picture><source srcset="form_1822_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=MB_B$" src="form_1822.png"/></picture>. </p>
+<p>Transposing assignment: <picture><source srcset="form_1790_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} = \mathbf{B}^T$" src="form_1790.png"/></picture></p>
+<p>The matrices <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture> and <picture><source srcset="form_830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_830.png"/></picture> must have the same process grid.</p>
+<p>The following alignment conditions have to be fulfilled: <picture><source srcset="form_1791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=NB_B$" src="form_1791.png"/></picture> and <picture><source srcset="form_1792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=MB_B$" src="form_1792.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="scalapack_8cc_source.html#href_anchor">981</a> of file <a class="el" href="scalapack_8cc_source.html">scalapack.cc</a>.</p>
 
@@ -1087,13 +1087,13 @@
 <tr class="markdownTableHead">
 <th class="markdownTableHeadCenter">transpose_B   </th><th class="markdownTableHeadCenter">Block Sizes   </th><th class="markdownTableHeadCenter">Operation    </th></tr>
 <tr class="markdownTableRowOdd">
-<td class="markdownTableBodyCenter">false   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1823_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=MB_B$" src="form_1823.png"/></picture> <br  />
- <picture><source srcset="form_1824_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=NB_B$" src="form_1824.png"/></picture>   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1825_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} = a \mathbf{A} + b \mathbf{B}$" src="form_1825.png"/></picture>    </td></tr>
+<td class="markdownTableBodyCenter">false   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=MB_B$" src="form_1793.png"/></picture> <br  />
+ <picture><source srcset="form_1794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=NB_B$" src="form_1794.png"/></picture>   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} = a \mathbf{A} + b \mathbf{B}$" src="form_1795.png"/></picture>    </td></tr>
 <tr class="markdownTableRowEven">
-<td class="markdownTableBodyCenter">true   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1821_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=NB_B$" src="form_1821.png"/></picture> <br  />
- <picture><source srcset="form_1822_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=MB_B$" src="form_1822.png"/></picture>   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1826_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} = a \mathbf{A} + b \mathbf{B}^T$" src="form_1826.png"/></picture>   </td></tr>
+<td class="markdownTableBodyCenter">true   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=NB_B$" src="form_1791.png"/></picture> <br  />
+ <picture><source srcset="form_1792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=MB_B$" src="form_1792.png"/></picture>   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1796_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} = a \mathbf{A} + b \mathbf{B}^T$" src="form_1796.png"/></picture>   </td></tr>
 </table>
-<p>The matrices <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture> and <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_836.png"/></picture> must have the same process grid. </p>
+<p>The matrices <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture> and <picture><source srcset="form_830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_830.png"/></picture> must have the same process grid. </p>
 
 <p class="definition">Definition at line <a class="el" href="scalapack_8cc_source.html#href_anchor">991</a> of file <a class="el" href="scalapack_8cc_source.html">scalapack.cc</a>.</p>
 
@@ -1116,9 +1116,9 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classScaLAPACKMatrix.html">ScaLAPACKMatrix</a>&lt; NumberType &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>B</em></span>&#href_anchor"memdoc">
-<p>Matrix-addition: <picture><source srcset="form_1827_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} = \mathbf{A} + b\, \mathbf{B}$" src="form_1827.png"/></picture></p>
-<p>The matrices <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture> and <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_836.png"/></picture> must have the same process grid.</p>
-<p>The following alignment conditions have to be fulfilled: <picture><source srcset="form_1823_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=MB_B$" src="form_1823.png"/></picture> and <picture><source srcset="form_1824_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=NB_B$" src="form_1824.png"/></picture>. </p>
+<p>Matrix-addition: <picture><source srcset="form_1797_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} = \mathbf{A} + b\, \mathbf{B}$" src="form_1797.png"/></picture></p>
+<p>The matrices <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture> and <picture><source srcset="form_830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_830.png"/></picture> must have the same process grid.</p>
+<p>The following alignment conditions have to be fulfilled: <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=MB_B$" src="form_1793.png"/></picture> and <picture><source srcset="form_1794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=NB_B$" src="form_1794.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="scalapack_8cc_source.html#href_anchor">1047</a> of file <a class="el" href="scalapack_8cc_source.html">scalapack.cc</a>.</p>
 
@@ -1141,9 +1141,9 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classScaLAPACKMatrix.html">ScaLAPACKMatrix</a>&lt; NumberType &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>B</em></span>&#href_anchor"memdoc">
-<p>Matrix-addition: <picture><source srcset="form_1828_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} = \mathbf{A} + b\, \mathbf{B}^T$" src="form_1828.png"/></picture></p>
-<p>The matrices <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture> and <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_836.png"/></picture> must have the same process grid.</p>
-<p>The following alignment conditions have to be fulfilled: <picture><source srcset="form_1821_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=NB_B$" src="form_1821.png"/></picture> and <picture><source srcset="form_1822_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=MB_B$" src="form_1822.png"/></picture>. </p>
+<p>Matrix-addition: <picture><source srcset="form_1798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A} = \mathbf{A} + b\, \mathbf{B}^T$" src="form_1798.png"/></picture></p>
+<p>The matrices <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture> and <picture><source srcset="form_830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_830.png"/></picture> must have the same process grid.</p>
+<p>The following alignment conditions have to be fulfilled: <picture><source srcset="form_1791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=NB_B$" src="form_1791.png"/></picture> and <picture><source srcset="form_1792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=MB_B$" src="form_1792.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="scalapack_8cc_source.html#href_anchor">1057</a> of file <a class="el" href="scalapack_8cc_source.html">scalapack.cc</a>.</p>
 
@@ -1192,24 +1192,24 @@
 <tr class="markdownTableHead">
 <th class="markdownTableHeadCenter">transpose_A   </th><th class="markdownTableHeadCenter">transpose_B   </th><th class="markdownTableHeadCenter">Block Sizes   </th><th class="markdownTableHeadCenter">Operation    </th></tr>
 <tr class="markdownTableRowOdd">
-<td class="markdownTableBodyCenter">false   </td><td class="markdownTableBodyCenter">false   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1829_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=MB_C$" src="form_1829.png"/></picture> <br  />
- <picture><source srcset="form_1822_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=MB_B$" src="form_1822.png"/></picture> <br  />
- <picture><source srcset="form_1830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_B=NB_C$" src="form_1830.png"/></picture>   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1831_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = b \mathbf{A} \cdot \mathbf{B} + c \mathbf{C}$" src="form_1831.png"/></picture>    </td></tr>
+<td class="markdownTableBodyCenter">false   </td><td class="markdownTableBodyCenter">false   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=MB_C$" src="form_1799.png"/></picture> <br  />
+ <picture><source srcset="form_1792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=MB_B$" src="form_1792.png"/></picture> <br  />
+ <picture><source srcset="form_1800_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_B=NB_C$" src="form_1800.png"/></picture>   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1801_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = b \mathbf{A} \cdot \mathbf{B} + c \mathbf{C}$" src="form_1801.png"/></picture>    </td></tr>
 <tr class="markdownTableRowEven">
-<td class="markdownTableBodyCenter">false   </td><td class="markdownTableBodyCenter">true   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1829_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=MB_C$" src="form_1829.png"/></picture> <br  />
- <picture><source srcset="form_1824_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=NB_B$" src="form_1824.png"/></picture> <br  />
- <picture><source srcset="form_1832_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_B=NB_C$" src="form_1832.png"/></picture>   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1833_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = b \mathbf{A} \cdot \mathbf{B}^T + c \mathbf{C}$" src="form_1833.png"/></picture>    </td></tr>
+<td class="markdownTableBodyCenter">false   </td><td class="markdownTableBodyCenter">true   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=MB_C$" src="form_1799.png"/></picture> <br  />
+ <picture><source srcset="form_1794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=NB_B$" src="form_1794.png"/></picture> <br  />
+ <picture><source srcset="form_1802_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_B=NB_C$" src="form_1802.png"/></picture>   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1803_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = b \mathbf{A} \cdot \mathbf{B}^T + c \mathbf{C}$" src="form_1803.png"/></picture>    </td></tr>
 <tr class="markdownTableRowOdd">
-<td class="markdownTableBodyCenter">true   </td><td class="markdownTableBodyCenter">false   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1823_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=MB_B$" src="form_1823.png"/></picture> <br  />
- <picture><source srcset="form_1834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=MB_C$" src="form_1834.png"/></picture> <br  />
- <picture><source srcset="form_1830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_B=NB_C$" src="form_1830.png"/></picture>   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1835_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = b \mathbf{A}^T \cdot \mathbf{B} + c \mathbf{C}$" src="form_1835.png"/></picture>    </td></tr>
+<td class="markdownTableBodyCenter">true   </td><td class="markdownTableBodyCenter">false   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=MB_B$" src="form_1793.png"/></picture> <br  />
+ <picture><source srcset="form_1804_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=MB_C$" src="form_1804.png"/></picture> <br  />
+ <picture><source srcset="form_1800_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_B=NB_C$" src="form_1800.png"/></picture>   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1805_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = b \mathbf{A}^T \cdot \mathbf{B} + c \mathbf{C}$" src="form_1805.png"/></picture>    </td></tr>
 <tr class="markdownTableRowEven">
-<td class="markdownTableBodyCenter">true   </td><td class="markdownTableBodyCenter">true   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1821_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=NB_B$" src="form_1821.png"/></picture> <br  />
- <picture><source srcset="form_1834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=MB_C$" src="form_1834.png"/></picture> <br  />
- <picture><source srcset="form_1832_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_B=NB_C$" src="form_1832.png"/></picture>   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = b \mathbf{A}^T \cdot \mathbf{B}^T + c \mathbf{C}$" src="form_1836.png"/></picture>   </td></tr>
+<td class="markdownTableBodyCenter">true   </td><td class="markdownTableBodyCenter">true   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=NB_B$" src="form_1791.png"/></picture> <br  />
+ <picture><source srcset="form_1804_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=MB_C$" src="form_1804.png"/></picture> <br  />
+ <picture><source srcset="form_1802_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_B=NB_C$" src="form_1802.png"/></picture>   </td><td class="markdownTableBodyCenter"><picture><source srcset="form_1806_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = b \mathbf{A}^T \cdot \mathbf{B}^T + c \mathbf{C}$" src="form_1806.png"/></picture>   </td></tr>
 </table>
-<p>It is assumed that <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture> and <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_836.png"/></picture> have compatible sizes and that <picture><source srcset="form_1837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1837.png"/></picture> already has the right size.</p>
-<p>The matrices <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture>, <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_836.png"/></picture> and <picture><source srcset="form_1837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1837.png"/></picture> must have the same process grid. </p>
+<p>It is assumed that <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture> and <picture><source srcset="form_830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_830.png"/></picture> have compatible sizes and that <picture><source srcset="form_1807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1807.png"/></picture> already has the right size.</p>
+<p>The matrices <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture>, <picture><source srcset="form_830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_830.png"/></picture> and <picture><source srcset="form_1807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1807.png"/></picture> must have the same process grid. </p>
 
 <p class="definition">Definition at line <a class="el" href="scalapack_8cc_source.html#href_anchor">1067</a> of file <a class="el" href="scalapack_8cc_source.html">scalapack.cc</a>.</p>
 
@@ -1238,11 +1238,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>adding</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
 <p>Matrix-matrix-multiplication.</p>
-<p>The optional parameter <code>adding</code> determines whether the result is stored in <picture><source srcset="form_1837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1837.png"/></picture> or added to <picture><source srcset="form_1837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1837.png"/></picture>.</p>
-<p>if (<code>adding</code>) <picture><source srcset="form_1838_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = \mathbf{C} + \mathbf{A} \cdot \mathbf{B}$" src="form_1838.png"/></picture></p>
-<p>else <picture><source srcset="form_1839_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = \mathbf{A} \cdot \mathbf{B}$" src="form_1839.png"/></picture></p>
-<p>It is assumed that <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture> and <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_836.png"/></picture> have compatible sizes and that <picture><source srcset="form_1837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1837.png"/></picture> already has the right size.</p>
-<p>The following alignment conditions have to be fulfilled: <picture><source srcset="form_1829_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=MB_C$" src="form_1829.png"/></picture>, <picture><source srcset="form_1822_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=MB_B$" src="form_1822.png"/></picture> and <picture><source srcset="form_1830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_B=NB_C$" src="form_1830.png"/></picture>. </p>
+<p>The optional parameter <code>adding</code> determines whether the result is stored in <picture><source srcset="form_1807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1807.png"/></picture> or added to <picture><source srcset="form_1807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1807.png"/></picture>.</p>
+<p>if (<code>adding</code>) <picture><source srcset="form_1808_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = \mathbf{C} + \mathbf{A} \cdot \mathbf{B}$" src="form_1808.png"/></picture></p>
+<p>else <picture><source srcset="form_1809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = \mathbf{A} \cdot \mathbf{B}$" src="form_1809.png"/></picture></p>
+<p>It is assumed that <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture> and <picture><source srcset="form_830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_830.png"/></picture> have compatible sizes and that <picture><source srcset="form_1807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1807.png"/></picture> already has the right size.</p>
+<p>The following alignment conditions have to be fulfilled: <picture><source srcset="form_1799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=MB_C$" src="form_1799.png"/></picture>, <picture><source srcset="form_1792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=MB_B$" src="form_1792.png"/></picture> and <picture><source srcset="form_1800_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_B=NB_C$" src="form_1800.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="scalapack_8cc_source.html#href_anchor">1184</a> of file <a class="el" href="scalapack_8cc_source.html">scalapack.cc</a>.</p>
 
@@ -1271,11 +1271,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>adding</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
 <p>Matrix-matrix-multiplication using transpose of <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture>.</p>
-<p>The optional parameter <code>adding</code> determines whether the result is stored in <picture><source srcset="form_1837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1837.png"/></picture> or added to <picture><source srcset="form_1837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1837.png"/></picture>.</p>
-<p>if (<code>adding</code>) <picture><source srcset="form_1840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = \mathbf{C} + \mathbf{A}^T \cdot \mathbf{B}$" src="form_1840.png"/></picture></p>
-<p>else <picture><source srcset="form_1841_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = \mathbf{A}^T \cdot \mathbf{B}$" src="form_1841.png"/></picture></p>
-<p>It is assumed that <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture> and <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_836.png"/></picture> have compatible sizes and that <picture><source srcset="form_1837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1837.png"/></picture> already has the right size.</p>
-<p>The following alignment conditions have to be fulfilled: <picture><source srcset="form_1823_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=MB_B$" src="form_1823.png"/></picture>, <picture><source srcset="form_1834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=MB_C$" src="form_1834.png"/></picture> and <picture><source srcset="form_1830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_B=NB_C$" src="form_1830.png"/></picture>. </p>
+<p>The optional parameter <code>adding</code> determines whether the result is stored in <picture><source srcset="form_1807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1807.png"/></picture> or added to <picture><source srcset="form_1807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1807.png"/></picture>.</p>
+<p>if (<code>adding</code>) <picture><source srcset="form_1810_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = \mathbf{C} + \mathbf{A}^T \cdot \mathbf{B}$" src="form_1810.png"/></picture></p>
+<p>else <picture><source srcset="form_1811_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = \mathbf{A}^T \cdot \mathbf{B}$" src="form_1811.png"/></picture></p>
+<p>It is assumed that <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture> and <picture><source srcset="form_830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_830.png"/></picture> have compatible sizes and that <picture><source srcset="form_1807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1807.png"/></picture> already has the right size.</p>
+<p>The following alignment conditions have to be fulfilled: <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB_A=MB_B$" src="form_1793.png"/></picture>, <picture><source srcset="form_1804_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_A=MB_C$" src="form_1804.png"/></picture> and <picture><source srcset="form_1800_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$NB_B=NB_C$" src="form_1800.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="scalapack_8cc_source.html#href_anchor">1198</a> of file <a class="el" href="scalapack_8cc_source.html">scalapack.cc</a>.</p>
 
@@ -1303,12 +1303,12 @@
           <td class="paramkey"></td>
           <td></td>
/usr/share/doc/packages/dealii/doxygen/deal.II/classScalarFunctionFromFunctionObject.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classScalarFunctionFromFunctionObject.html	2024-03-17 21:57:36.711192719 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classScalarFunctionFromFunctionObject.html	2024-03-17 21:57:36.719192769 +0000
@@ -259,7 +259,7 @@
 <div class="line"><a class="code hl_class" href="classVector.html">Vector&lt;double&gt;</a> solution_1d;</div>
 <div class="ttc" id="aclassDoFHandler_html"><div class="ttname"><a href="classDoFHandler.html">DoFHandler</a></div><div class="ttdef"><b>Definition</b> <a href="dof__handler_8h_source.html#href_anchor">dof_handler.h:318</a></div></div>
 <div class="ttc" id="aclassVector_html"><div class="ttname"><a href="classVector.html">Vector</a></div><div class="ttdef"><b>Definition</b> <a href="vector_8h_source.html#href_anchor">vector.h:109</a></div></div>
-</div><!-- fragment --><p> We will denote this solution function described by this <a class="el" href="classDoFHandler.html">DoFHandler</a> and vector object by <picture><source srcset="form_459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(x)$" src="form_459.png"/></picture> where <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> is a vector with just one component, and consequently is not shown in boldface. Then assume that we want this <picture><source srcset="form_459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(x)$" src="form_459.png"/></picture> to be used as a boundary condition for a 2d problem at the line <picture><source srcset="form_460_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=0$" src="form_460.png"/></picture>. Let's say that this line corresponds to <a class="el" href="DEALGlossary.html#href_anchor">boundary indicator</a> 123. If we say that the 2d problem is associated with </p><div class="fragment"><div class="line"><a class="code hl_class" href="classDoFHandler.html">DoFHandler&lt;2&gt;</a> dof_handler_2d;</div>
+</div><!-- fragment --><p> We will denote this solution function described by this <a class="el" href="classDoFHandler.html">DoFHandler</a> and vector object by <picture><source srcset="form_459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(x)$" src="form_459.png"/></picture> where <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> is a vector with just one component, and consequently is not shown in boldface. Then assume that we want this <picture><source srcset="form_459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(x)$" src="form_459.png"/></picture> to be used as a boundary condition for a 2d problem at the line <picture><source srcset="form_460_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=0$" src="form_460.png"/></picture>. Let's say that this line corresponds to <a class="el" href="DEALGlossary.html#href_anchor">boundary indicator</a> 123. If we say that the 2d problem is associated with </p><div class="fragment"><div class="line"><a class="code hl_class" href="classDoFHandler.html">DoFHandler&lt;2&gt;</a> dof_handler_2d;</div>
 </div><!-- fragment --><p> then in order to evaluate the boundary conditions for this 2d problem, we would want to call <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::interpolate_boundary_values()</a> via </p><div class="fragment"><div class="line"><a class="code hl_class" href="classAffineConstraints.html">AffineConstraints&lt;double&gt;</a> boundary_values_2d;</div>
 <div class="line"><a class="code hl_function" href="namespaceVectorTools.html#href_anchor">VectorTools::interpolate_boundary_values</a> (dof_handler_2d,</div>
 <div class="line">                                          123,</div>
@@ -267,7 +267,7 @@
 <div class="line">                                          boundary_values_2d);</div>
 <div class="ttc" id="aclassAffineConstraints_html"><div class="ttname"><a href="classAffineConstraints.html">AffineConstraints</a></div><div class="ttdef"><b>Definition</b> <a href="affine__constraints_8h_source.html#href_anchor">affine_constraints.h:515</a></div></div>
 <div class="ttc" id="anamespaceVectorTools_html_ab2562d41bb26f362043f9719a8cd9b87"><div class="ttname"><a href="namespaceVectorTools.html#href_anchor">VectorTools::interpolate_boundary_values</a></div><div class="ttdeci">void interpolate_boundary_values(const Mapping&lt; dim, spacedim &gt; &amp;mapping, const DoFHandler&lt; dim, spacedim &gt; &amp;dof, const std::map&lt; types::boundary_id, const Function&lt; spacedim, number &gt; * &gt; &amp;function_map, std::map&lt; types::global_dof_index, number &gt; &amp;boundary_values, const ComponentMask &amp;component_mask=ComponentMask())</div></div>
-</div><!-- fragment --><p> The question here is what to use as the <a class="el" href="classFunction.html">Function</a> object that can be passed as third argument. It needs to be a <a class="el" href="classFunction.html">Function&lt;2&gt;</a> object, i.e., it receives a 2d input point and is supposed to return the value at that point. What we <em>want</em> it to do is to just take the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> component of the input point and evaluate the 1d solution at that point, knowing that at the boundary with indicator 123, the <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> component of the input point must be zero. This all can be achieved via the following function object: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFunctions_1_1FEFieldFunction.html">Functions::FEFieldFunction&lt;1&gt;</a></div>
+</div><!-- fragment --><p> The question here is what to use as the <a class="el" href="classFunction.html">Function</a> object that can be passed as third argument. It needs to be a <a class="el" href="classFunction.html">Function&lt;2&gt;</a> object, i.e., it receives a 2d input point and is supposed to return the value at that point. What we <em>want</em> it to do is to just take the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> component of the input point and evaluate the 1d solution at that point, knowing that at the boundary with indicator 123, the <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> component of the input point must be zero. This all can be achieved via the following function object: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFunctions_1_1FEFieldFunction.html">Functions::FEFieldFunction&lt;1&gt;</a></div>
 <div class="line">  solution_1d_as_function_object (dof_handler_1d, solution_1d);</div>
 <div class="line"><span class="keyword">auto</span> boundary_evaluator</div>
 <div class="line">  = [&amp;] (<span class="keyword">const</span> <a class="code hl_class" href="classPoint.html">Point&lt;2&gt;</a> &amp;p)</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSolverBFGS.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSolverBFGS.html	2024-03-17 21:57:36.755192990 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSolverBFGS.html	2024-03-17 21:57:36.759193015 +0000
@@ -212,7 +212,7 @@
 \rho^{(k)} &amp;\dealcoloneq \frac{1}{y^{(k)} \cdot s^{(k)}}
 \end{align*}" src="form_2417.png"/></picture>
 </p>
-<p> for a symmetric positive definite <picture><source srcset="form_1769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H$" src="form_1769.png"/></picture>. Limited memory variant is implemented via the two-loop recursion. </p>
+<p> for a symmetric positive definite <picture><source srcset="form_1768_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H$" src="form_1768.png"/></picture>. Limited memory variant is implemented via the two-loop recursion. </p>
 
 <p class="definition">Definition at line <a class="el" href="solver__bfgs_8h_source.html#href_anchor">58</a> of file <a class="el" href="solver__bfgs_8h_source.html">solver_bfgs.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
@@ -366,8 +366,8 @@
 \]" src="form_2418.png"/></picture>
 </p>
 <p> starting from initial state <code>x</code>.</p>
-<p>The function <code>compute</code> takes two arguments indicating the values of <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> and of the gradient <picture><source srcset="form_2419_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g=\nabla f(\mathbf x)=\frac{\partial f}{\partial
-\mathbf x}$" src="form_2419.png"/></picture>. When called, it needs to update the gradient <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> at the given location <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> and return the value of the function being minimized, i.e., <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture>. </p>
+<p>The function <code>compute</code> takes two arguments indicating the values of <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> and of the gradient <picture><source srcset="form_2419_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g=\nabla f(\mathbf x)=\frac{\partial f}{\partial
+\mathbf x}$" src="form_2419.png"/></picture>. When called, it needs to update the gradient <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> at the given location <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> and return the value of the function being minimized, i.e., <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture>. </p>
 
 </div>
 </div>
@@ -388,7 +388,7 @@
       </table>
 </div><div class="memdoc">
 <p>Connect a slot to perform a custom line-search.</p>
-<p>Given the value of function <code>f</code>, the current value of unknown <code>x</code>, the gradient <code>g</code> and the search direction <code>p</code>, return the size <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> of the step <picture><source srcset="form_2420_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x \leftarrow x + \alpha p$" src="form_2420.png"/></picture>, and update <code>x</code>, <code>g</code> and <code>f</code> accordingly. </p>
+<p>Given the value of function <code>f</code>, the current value of unknown <code>x</code>, the gradient <code>g</code> and the search direction <code>p</code>, return the size <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> of the step <picture><source srcset="form_2420_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x \leftarrow x + \alpha p$" src="form_2420.png"/></picture>, and update <code>x</code>, <code>g</code> and <code>f</code> accordingly. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSolverCG.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSolverCG.html	2024-03-17 21:57:36.799193263 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSolverCG.html	2024-03-17 21:57:36.807193312 +0000
@@ -1034,7 +1034,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Flag to indicate whether the classical Fletcher&ndash;Reeves update formula for the parameter <picture><source srcset="form_1904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta_k$" src="form_1904.png"/></picture> (standard CG algorithm, minimal storage needs) or the flexible conjugate gradient method with Polak-Ribiere formula for <picture><source srcset="form_1904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta_k$" src="form_1904.png"/></picture> should be used. This base class implementation of <a class="el" href="classSolverCG.html">SolverCG</a> will always use the former method, whereas the derived class <a class="el" href="classSolverFlexibleCG.html">SolverFlexibleCG</a> will use the latter. </p>
+<p>Flag to indicate whether the classical Fletcher&ndash;Reeves update formula for the parameter <picture><source srcset="form_1887_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta_k$" src="form_1887.png"/></picture> (standard CG algorithm, minimal storage needs) or the flexible conjugate gradient method with Polak-Ribiere formula for <picture><source srcset="form_1887_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta_k$" src="form_1887.png"/></picture> should be used. This base class implementation of <a class="el" href="classSolverCG.html">SolverCG</a> will always use the former method, whereas the derived class <a class="el" href="classSolverFlexibleCG.html">SolverFlexibleCG</a> will use the latter. </p>
 
 <p class="definition">Definition at line <a class="el" href="solver__cg_8h_source.html#href_anchor">323</a> of file <a class="el" href="solver__cg_8h_source.html">solver_cg.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classSolverFIRE.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSolverFIRE.html	2024-03-17 21:57:36.851193584 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSolverFIRE.html	2024-03-17 21:57:36.851193584 +0000
@@ -196,27 +196,27 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;typename VectorType = Vector&lt;double&gt;&gt;<br />
-class SolverFIRE&lt; VectorType &gt;</div><p>FIRE (Fast Inertial Relaxation Engine) for minimization of (potentially non-linear) objective function <picture><source srcset="form_1887_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E(\mathbf x)$" src="form_1887.png"/></picture>, <picture><source srcset="form_216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_216.png"/></picture> is a vector of <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> variables ( <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> is the number of variables of the objective function). Like all other solver classes, it can work on any kind of vector and matrix as long as they satisfy certain requirements (for the requirements on matrices and vectors in order to work with this class, see the documentation of the Solver base class). The type of the solution vector must be passed as template argument, and defaults to <a class="el" href="classLinearAlgebra_1_1distributed_1_1Vector.html">Vector&lt;double&gt;</a>.</p>
+class SolverFIRE&lt; VectorType &gt;</div><p>FIRE (Fast Inertial Relaxation Engine) for minimization of (potentially non-linear) objective function <picture><source srcset="form_1893_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E(\mathbf x)$" src="form_1893.png"/></picture>, <picture><source srcset="form_190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_190.png"/></picture> is a vector of <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> variables ( <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> is the number of variables of the objective function). Like all other solver classes, it can work on any kind of vector and matrix as long as they satisfy certain requirements (for the requirements on matrices and vectors in order to work with this class, see the documentation of the Solver base class). The type of the solution vector must be passed as template argument, and defaults to <a class="el" href="classLinearAlgebra_1_1distributed_1_1Vector.html">Vector&lt;double&gt;</a>.</p>
 <p>FIRE is a damped dynamics method described in <a href="https://doi.org/10.1103/PhysRevLett.97.170201">Structural Relaxation Made Simple</a> by Bitzek et al. 2006, typically used to find stable equilibrium configurations of atomistic systems in computational material science. Starting from a given initial configuration of the atomistic system, the algorithm relies on inertia to obtain (nearest) configuration with least potential energy.</p>
 <p>Notation:</p><ul>
-<li>The global vector of unknown variables: <picture><source srcset="form_216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_216.png"/></picture>.</li>
-<li>Objective function: <picture><source srcset="form_1887_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E(\mathbf x)$" src="form_1887.png"/></picture>.</li>
+<li>The global vector of unknown variables: <picture><source srcset="form_190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_190.png"/></picture>.</li>
+<li>Objective function: <picture><source srcset="form_1893_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E(\mathbf x)$" src="form_1893.png"/></picture>.</li>
 <li>Rate of change of unknowns: <picture><source srcset="form_321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v$" src="form_321.png"/></picture>.</li>
-<li>Gradient of the objective function w.r.t unknowns: <picture><source srcset="form_1888_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf g = \nabla E(\mathbf x)$" src="form_1888.png"/></picture>.</li>
-<li>Mass matrix: <picture><source srcset="form_1889_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf M$" src="form_1889.png"/></picture>.</li>
-<li>Initial guess of unknowns: <picture><source srcset="form_1890_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_0$" src="form_1890.png"/></picture>.</li>
-<li>Time step: <picture><source srcset="form_1891_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t$" src="form_1891.png"/></picture>.</li>
+<li>Gradient of the objective function w.r.t unknowns: <picture><source srcset="form_1894_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf g = \nabla E(\mathbf x)$" src="form_1894.png"/></picture>.</li>
+<li>Mass matrix: <picture><source srcset="form_1895_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf M$" src="form_1895.png"/></picture>.</li>
+<li>Initial guess of unknowns: <picture><source srcset="form_1896_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_0$" src="form_1896.png"/></picture>.</li>
+<li>Time step: <picture><source srcset="form_1897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t$" src="form_1897.png"/></picture>.</li>
 </ul>
-<p>Given initial values for <picture><source srcset="form_1891_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t$" src="form_1891.png"/></picture>, <picture><source srcset="form_1892_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha = \alpha_0$" src="form_1892.png"/></picture>, <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1433.png"/></picture>, <picture><source srcset="form_1893_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x = \mathbf x_0$" src="form_1893.png"/></picture> and <picture><source srcset="form_1894_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v= \mathbf 0$" src="form_1894.png"/></picture> along with a given mass matrix <picture><source srcset="form_1889_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf M$" src="form_1889.png"/></picture>, FIRE algorithm is as follows,</p><ol type="1">
-<li>Calculate <picture><source srcset="form_1888_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf g = \nabla E(\mathbf x)$" src="form_1888.png"/></picture> and check for convergence ( <picture><source srcset="form_1895_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf g \cdot \mathbf g &lt; \epsilon^2 $" src="form_1895.png"/></picture>).</li>
-<li>Update <picture><source srcset="form_216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_216.png"/></picture> and <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> using simple (forward) Euler integration step, <br  />
- <picture><source srcset="form_1896_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x = \mathbf x + \Delta t \mathbf v$" src="form_1896.png"/></picture>, <br  />
- <picture><source srcset="form_1897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v = \mathbf v + \Delta t \mathbf M^{-1} \cdot \mathbf g$" src="form_1897.png"/></picture>.</li>
-<li>Calculate <picture><source srcset="form_1898_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p = \mathbf g \cdot \mathbf v$" src="form_1898.png"/></picture>.</li>
-<li>Set <picture><source srcset="form_1899_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v = (1-\alpha) \mathbf v
-                  + \alpha \frac{|\mathbf v|}{|\mathbf g|} \mathbf g$" src="form_1899.png"/></picture>.</li>
-<li>If <picture><source srcset="form_1900_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p&lt;0$" src="form_1900.png"/></picture> and number of steps since <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> was last negative is larger than certain value, then increase time step <picture><source srcset="form_1891_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t$" src="form_1891.png"/></picture> and decrease <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture>.</li>
-<li>If <picture><source srcset="form_1901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p&gt;0$" src="form_1901.png"/></picture>, then decrease the time step, freeze the system i.e., <picture><source srcset="form_1902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v = \mathbf 0$" src="form_1902.png"/></picture> and reset <picture><source srcset="form_1892_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha = \alpha_0$" src="form_1892.png"/></picture>.</li>
+<p>Given initial values for <picture><source srcset="form_1897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t$" src="form_1897.png"/></picture>, <picture><source srcset="form_1898_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha = \alpha_0$" src="form_1898.png"/></picture>, <picture><source srcset="form_1435_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1435.png"/></picture>, <picture><source srcset="form_1899_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x = \mathbf x_0$" src="form_1899.png"/></picture> and <picture><source srcset="form_1900_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v= \mathbf 0$" src="form_1900.png"/></picture> along with a given mass matrix <picture><source srcset="form_1895_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf M$" src="form_1895.png"/></picture>, FIRE algorithm is as follows,</p><ol type="1">
+<li>Calculate <picture><source srcset="form_1894_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf g = \nabla E(\mathbf x)$" src="form_1894.png"/></picture> and check for convergence ( <picture><source srcset="form_1901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf g \cdot \mathbf g &lt; \epsilon^2 $" src="form_1901.png"/></picture>).</li>
+<li>Update <picture><source srcset="form_190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_190.png"/></picture> and <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> using simple (forward) Euler integration step, <br  />
+ <picture><source srcset="form_1902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x = \mathbf x + \Delta t \mathbf v$" src="form_1902.png"/></picture>, <br  />
+ <picture><source srcset="form_1903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v = \mathbf v + \Delta t \mathbf M^{-1} \cdot \mathbf g$" src="form_1903.png"/></picture>.</li>
+<li>Calculate <picture><source srcset="form_1904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p = \mathbf g \cdot \mathbf v$" src="form_1904.png"/></picture>.</li>
+<li>Set <picture><source srcset="form_1905_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v = (1-\alpha) \mathbf v
+                  + \alpha \frac{|\mathbf v|}{|\mathbf g|} \mathbf g$" src="form_1905.png"/></picture>.</li>
+<li>If <picture><source srcset="form_1906_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p&lt;0$" src="form_1906.png"/></picture> and number of steps since <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> was last negative is larger than certain value, then increase time step <picture><source srcset="form_1897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t$" src="form_1897.png"/></picture> and decrease <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture>.</li>
+<li>If <picture><source srcset="form_1907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p&gt;0$" src="form_1907.png"/></picture>, then decrease the time step, freeze the system i.e., <picture><source srcset="form_1908_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v = \mathbf 0$" src="form_1908.png"/></picture> and reset <picture><source srcset="form_1898_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha = \alpha_0$" src="form_1898.png"/></picture>.</li>
 <li>Return to 1.</li>
 </ol>
 <p>Also see <a href="http://onlinelibrary.wiley.com/doi/10.1002/pamm.201110246/full">Energy-Minimization in Atomic-to-Continuum Scale-Bridging Methods </a> by Eidel et al. 2011. </p>
@@ -406,8 +406,8 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const PreconditionerType &amp;</td>          <td class="paramname"><span class="paramname"><em>preconditioner</em></span>&#href_anchor"memdoc">
-<p>Solve for x that minimizes <picture><source srcset="form_1887_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E(\mathbf x)$" src="form_1887.png"/></picture> for the <em>special case</em> when <picture><source srcset="form_1903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E(\mathbf x)
-= \frac{1}{2} \mathbf x^{T} \mathbf A \mathbf x - \mathbf x^{T} \mathbf b$" src="form_1903.png"/></picture>. </p>
+<p>Solve for x that minimizes <picture><source srcset="form_1893_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E(\mathbf x)$" src="form_1893.png"/></picture> for the <em>special case</em> when <picture><source srcset="form_1909_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E(\mathbf x)
+= \frac{1}{2} \mathbf x^{T} \mathbf A \mathbf x - \mathbf x^{T} \mathbf b$" src="form_1909.png"/></picture>. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSolverFlexibleCG.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSolverFlexibleCG.html	2024-03-17 21:57:36.891193831 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSolverFlexibleCG.html	2024-03-17 21:57:36.891193831 +0000
@@ -217,11 +217,11 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;typename VectorType = Vector&lt;double&gt;&gt;<br />
-class SolverFlexibleCG&lt; VectorType &gt;</div><p>This class implements a flexible variant of the conjugate gradient method, which is based on a different formula to compute <picture><source srcset="form_1904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta_k$" src="form_1904.png"/></picture> in the process of constructing a new search direction that is A-orthogonal against the previous one. Rather than using the Fletcher&ndash;Reeves update formula with  <picture><source srcset="form_1905_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta_k = \frac{\mathbf{r}^T_{k+1} \mathbf{z}_{k+1}}{\mathbf{r}^T_{k}
-\mathbf{z}_{k}}$" src="form_1905.png"/></picture> for computing the new search direction (here <picture><source srcset="form_1906_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{r}_{k+1}$" src="form_1906.png"/></picture> is the residual in step <picture><source srcset="form_644_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k+1$" src="form_644.png"/></picture> and <picture><source srcset="form_1907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{z}_{k+1} =
-P^{-1} \mathbf{r}_{k+1}$" src="form_1907.png"/></picture>) as in the classical conjugate gradient algorithm, this class selects the Polak-Ribiere formula <picture><source srcset="form_1908_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta_k =
+class SolverFlexibleCG&lt; VectorType &gt;</div><p>This class implements a flexible variant of the conjugate gradient method, which is based on a different formula to compute <picture><source srcset="form_1887_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta_k$" src="form_1887.png"/></picture> in the process of constructing a new search direction that is A-orthogonal against the previous one. Rather than using the Fletcher&ndash;Reeves update formula with  <picture><source srcset="form_1888_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta_k = \frac{\mathbf{r}^T_{k+1} \mathbf{z}_{k+1}}{\mathbf{r}^T_{k}
+\mathbf{z}_{k}}$" src="form_1888.png"/></picture> for computing the new search direction (here <picture><source srcset="form_1889_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{r}_{k+1}$" src="form_1889.png"/></picture> is the residual in step <picture><source srcset="form_644_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k+1$" src="form_644.png"/></picture> and <picture><source srcset="form_1890_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{z}_{k+1} =
+P^{-1} \mathbf{r}_{k+1}$" src="form_1890.png"/></picture>) as in the classical conjugate gradient algorithm, this class selects the Polak-Ribiere formula <picture><source srcset="form_1891_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta_k =
 \frac{\mathbf{r}^T_{k+1} \left(\mathbf{z}_{k+1} -
-\mathbf{z}_{k}\right)}{\mathbf{r}^T_{k} \mathbf{z}_{k}}$" src="form_1908.png"/></picture>. The additional term <picture><source srcset="form_1909_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{r}^T_{k+1} \mathbf{z}_{k}$" src="form_1909.png"/></picture> is zero for linear symmetric-positive definite preconditioners due to the construction of the search directions, so the behavior of <a class="el" href="classSolverFlexibleCG.html">SolverFlexibleCG</a> is equivalent for those kinds of situations and merely increases costs by requiring an additional stored vector and associated vector operations. While there are no theoretical guarantees for convergence as in the classical CG algorithm, the current class has been documented to be much more robust for variable preconditioners (e.g., involving some iterative inverse that is not fully converged) or a preconditioner with some slight non-symmetry (like weighted Schwarz methods), which results from the local optimality of the search direction with at least as good progress as the locally optimal steepest descent method. </p>
+\mathbf{z}_{k}\right)}{\mathbf{r}^T_{k} \mathbf{z}_{k}}$" src="form_1891.png"/></picture>. The additional term <picture><source srcset="form_1892_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{r}^T_{k+1} \mathbf{z}_{k}$" src="form_1892.png"/></picture> is zero for linear symmetric-positive definite preconditioners due to the construction of the search directions, so the behavior of <a class="el" href="classSolverFlexibleCG.html">SolverFlexibleCG</a> is equivalent for those kinds of situations and merely increases costs by requiring an additional stored vector and associated vector operations. While there are no theoretical guarantees for convergence as in the classical CG algorithm, the current class has been documented to be much more robust for variable preconditioners (e.g., involving some iterative inverse that is not fully converged) or a preconditioner with some slight non-symmetry (like weighted Schwarz methods), which results from the local optimality of the search direction with at least as good progress as the locally optimal steepest descent method. </p>
 
 <p class="definition">Definition at line <a class="el" href="solver__cg_8h_source.html#href_anchor">354</a> of file <a class="el" href="solver__cg_8h_source.html">solver_cg.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
@@ -995,7 +995,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Flag to indicate whether the classical Fletcher&ndash;Reeves update formula for the parameter <picture><source srcset="form_1904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta_k$" src="form_1904.png"/></picture> (standard CG algorithm, minimal storage needs) or the flexible conjugate gradient method with Polak-Ribiere formula for <picture><source srcset="form_1904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta_k$" src="form_1904.png"/></picture> should be used. This base class implementation of <a class="el" href="classSolverCG.html">SolverCG</a> will always use the former method, whereas the derived class <a class="el" href="classSolverFlexibleCG.html">SolverFlexibleCG</a> will use the latter. </p>
+<p>Flag to indicate whether the classical Fletcher&ndash;Reeves update formula for the parameter <picture><source srcset="form_1887_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta_k$" src="form_1887.png"/></picture> (standard CG algorithm, minimal storage needs) or the flexible conjugate gradient method with Polak-Ribiere formula for <picture><source srcset="form_1887_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta_k$" src="form_1887.png"/></picture> should be used. This base class implementation of <a class="el" href="classSolverCG.html">SolverCG</a> will always use the former method, whereas the derived class <a class="el" href="classSolverFlexibleCG.html">SolverFlexibleCG</a> will use the latter. </p>
 
 <p class="definition">Definition at line <a class="el" href="solver__cg_8h_source.html#href_anchor">323</a> of file <a class="el" href="solver__cg_8h_source.html">solver_cg.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classSolverRichardson.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSolverRichardson.html	2024-03-17 21:57:36.931194079 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSolverRichardson.html	2024-03-17 21:57:36.935194102 +0000
@@ -427,7 +427,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const PreconditionerType &amp;</td>          <td class="paramname"><span class="paramname"><em>preconditioner</em></span>&#href_anchor"memdoc">
-<p>Solve <picture><source srcset="form_1912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^Tx=b$" src="form_1912.png"/></picture> for <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>. </p>
+<p>Solve <picture><source srcset="form_1912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^Tx=b$" src="form_1912.png"/></picture> for <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseDirectUMFPACK.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSparseDirectUMFPACK.html	2024-03-17 21:57:36.975194350 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSparseDirectUMFPACK.html	2024-03-17 21:57:36.983194399 +0000
@@ -576,7 +576,7 @@
 <p>The solution will be returned in place of the right hand side vector.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramdir">[in,out]</td><td class="paramname">rhs_and_solution</td><td>A vector that contains the right hand side <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> of a linear system <picture><source srcset="form_57_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=b$" src="form_57.png"/></picture> upon calling this function, and that contains the solution <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> of the linear system after calling this function. </td></tr>
+    <tr><td class="paramdir">[in,out]</td><td class="paramname">rhs_and_solution</td><td>A vector that contains the right hand side <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> of a linear system <picture><source srcset="form_57_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=b$" src="form_57.png"/></picture> upon calling this function, and that contains the solution <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> of the linear system after calling this function. </td></tr>
     <tr><td class="paramdir">[in]</td><td class="paramname">transpose</td><td>If set to true, this function solves the linear <picture><source srcset="form_1916_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^T x = b$" src="form_1916.png"/></picture> instead of <picture><source srcset="form_57_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=b$" src="form_57.png"/></picture>.</td></tr>
   </table>
   </dd>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseILU.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSparseILU.html	2024-03-17 21:57:37.059194868 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSparseILU.html	2024-03-17 21:57:37.063194893 +0000
@@ -1901,7 +1901,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Symmetrize the matrix by forming the mean value between the existing matrix and its transpose, <picture><source srcset="form_1610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A = \frac 12(A+A^T)$" src="form_1610.png"/></picture>.</p>
+<p>Symmetrize the matrix by forming the mean value between the existing matrix and its transpose, <picture><source srcset="form_1607_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A = \frac 12(A+A^T)$" src="form_1607.png"/></picture>.</p>
 <p>This operation assumes that the underlying sparsity pattern represents a symmetric object. If this is not the case, then the result of this operation will not be a symmetric matrix, since it only explicitly symmetrizes by looping over the lower left triangular part for efficiency reasons; if there are entries in the upper right triangle, then these elements are missed in the symmetrization. Symmetrization of the sparsity pattern can be obtain by <a class="el" href="classSparsityPattern.html#href_anchor">SparsityPattern::symmetrize()</a>. </p>
 
 </div>
@@ -2153,7 +2153,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the square of the norm of the vector <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1611.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
+<p>Return the square of the norm of the vector <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1608.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
 <p>Obviously, the matrix needs to be quadratic for this operation, and for the result to actually be a norm it also needs to be either real symmetric or complex hermitian.</p>
 <p>The underlying template types of both this matrix and the given vector should either both be real or complex-valued, but not mixed, for this function to make sense.</p>
 <dl class="section note"><dt>Note</dt><dd>If deal.II is configured with threads, this operation will run multi-threaded by splitting the work into smaller chunks (assuming there is enough work to make this worthwhile). </dd></dl>
@@ -2186,7 +2186,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1601.png"/></picture>.</p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1600.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>If deal.II is configured with threads, this operation will run multi-threaded by splitting the work into smaller chunks (assuming there is enough work to make this worthwhile). </dd></dl>
 
 </div>
@@ -2263,7 +2263,7 @@
 </div><div class="memdoc">
 <p>Perform the matrix-matrix multiplication <code>C = A * B</code>, or, if an optional vector argument is given, <code>C = A * diag(V) * B</code>, where <code>diag(V)</code> defines a diagonal matrix with the vector entries.</p>
 <p>This function assumes that the calling matrix <code>A</code> and the argument <code>B</code> have compatible sizes. By default, the output matrix <code>C</code> will be resized appropriately.</p>
-<p>By default, i.e., if the optional argument <code>rebuild_sparsity_pattern</code> is <code>true</code>, the sparsity pattern of the matrix C will be changed to ensure that all entries that result from the product <picture><source srcset="form_1927_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$AB$" src="form_1927.png"/></picture> can be stored in <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>. This is an expensive operation, and if there is a way to predict the sparsity pattern up front, you should probably build it yourself before calling this function with <code>false</code> as last argument. In this case, the rebuilding of the sparsity pattern is bypassed.</p>
+<p>By default, i.e., if the optional argument <code>rebuild_sparsity_pattern</code> is <code>true</code>, the sparsity pattern of the matrix C will be changed to ensure that all entries that result from the product <picture><source srcset="form_1920_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$AB$" src="form_1920.png"/></picture> can be stored in <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>. This is an expensive operation, and if there is a way to predict the sparsity pattern up front, you should probably build it yourself before calling this function with <code>false</code> as last argument. In this case, the rebuilding of the sparsity pattern is bypassed.</p>
 <p>When setting <code>rebuild_sparsity_pattern</code> to <code>true</code> (i.e., leaving it at the default value), it is important to realize that the matrix <code>C</code> passed as first argument still has to be initialized with a sparsity pattern (either at the time of creation of the <a class="el" href="classSparseMatrix.html">SparseMatrix</a> object, or via the <a class="el" href="classSparseMatrix.html#href_anchor">SparseMatrix::reinit()</a> function). This is because we could create a sparsity pattern inside the current function, and then associate <code>C</code> with it, but there would be no way to transfer ownership of this sparsity pattern to anyone once the current function finishes. Consequently, the function requires that <code>C</code> be already associated with a sparsity pattern object, and this object is then reset to fit the product of <code>A</code> and <code>B</code>.</p>
 <p>As a consequence of this, however, it is also important to realize that the sparsity pattern of <code>C</code> is modified and that this would render invalid <em>all other <a class="el" href="classSparseMatrix.html">SparseMatrix</a> objects</em> that happen to <em>also</em> use that sparsity pattern object. </p>
 
@@ -2334,8 +2334,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm of the matrix, that is <picture><source srcset="form_1931_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=\max_{\mathrm{all\
-columns\ }j}\sum_{\mathrm{all\ rows\ } i} |M_{ij}|$" src="form_1931.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm for vectors, i.e. <picture><source srcset="form_1614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1614.png"/></picture>. (cf. Haemmerlin- Hoffmann: Numerische Mathematik) </p>
+<p>Return the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm of the matrix, that is <picture><source srcset="form_1921_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=\max_{\mathrm{all\
+columns\ }j}\sum_{\mathrm{all\ rows\ } i} |M_{ij}|$" src="form_1921.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm for vectors, i.e. <picture><source srcset="form_1610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1610.png"/></picture>. (cf. Haemmerlin- Hoffmann: Numerische Mathematik) </p>
 
 </div>
 </div>
@@ -2363,8 +2363,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of the matrix, that is  <picture><source srcset="form_1629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_\infty=\max_{\mathrm{all\ rows\ }i}\sum_{\mathrm{all\ columns\ }j}
-|M_{ij}|$" src="form_1629.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of vectors, i.e. <picture><source srcset="form_1630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_\infty \leq
+<p>Return the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of the matrix, that is  <picture><source srcset="form_1629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_\infty=\max_{\mathrm{all\ rows\ }i}\sum_{\mathrm{all\ columns\ }j}
+|M_{ij}|$" src="form_1629.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of vectors, i.e. <picture><source srcset="form_1630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_\infty \leq
 |M|_\infty |v|_\infty$" src="form_1630.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
 
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseLUDecomposition.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSparseLUDecomposition.html	2024-03-17 21:57:37.143195387 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSparseLUDecomposition.html	2024-03-17 21:57:37.147195412 +0000
@@ -1704,7 +1704,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Symmetrize the matrix by forming the mean value between the existing matrix and its transpose, <picture><source srcset="form_1610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A = \frac 12(A+A^T)$" src="form_1610.png"/></picture>.</p>
+<p>Symmetrize the matrix by forming the mean value between the existing matrix and its transpose, <picture><source srcset="form_1607_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A = \frac 12(A+A^T)$" src="form_1607.png"/></picture>.</p>
 <p>This operation assumes that the underlying sparsity pattern represents a symmetric object. If this is not the case, then the result of this operation will not be a symmetric matrix, since it only explicitly symmetrizes by looping over the lower left triangular part for efficiency reasons; if there are entries in the upper right triangle, then these elements are missed in the symmetrization. Symmetrization of the sparsity pattern can be obtain by <a class="el" href="classSparsityPattern.html#href_anchor">SparsityPattern::symmetrize()</a>. </p>
 
 </div>
@@ -2049,7 +2049,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the square of the norm of the vector <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1611.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
+<p>Return the square of the norm of the vector <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1608.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
 <p>Obviously, the matrix needs to be quadratic for this operation, and for the result to actually be a norm it also needs to be either real symmetric or complex hermitian.</p>
 <p>The underlying template types of both this matrix and the given vector should either both be real or complex-valued, but not mixed, for this function to make sense.</p>
 <dl class="section note"><dt>Note</dt><dd>If deal.II is configured with threads, this operation will run multi-threaded by splitting the work into smaller chunks (assuming there is enough work to make this worthwhile). </dd></dl>
@@ -2082,7 +2082,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1601.png"/></picture>.</p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1600.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>If deal.II is configured with threads, this operation will run multi-threaded by splitting the work into smaller chunks (assuming there is enough work to make this worthwhile). </dd></dl>
 
 </div>
@@ -2159,7 +2159,7 @@
 </div><div class="memdoc">
 <p>Perform the matrix-matrix multiplication <code>C = A * B</code>, or, if an optional vector argument is given, <code>C = A * diag(V) * B</code>, where <code>diag(V)</code> defines a diagonal matrix with the vector entries.</p>
 <p>This function assumes that the calling matrix <code>A</code> and the argument <code>B</code> have compatible sizes. By default, the output matrix <code>C</code> will be resized appropriately.</p>
-<p>By default, i.e., if the optional argument <code>rebuild_sparsity_pattern</code> is <code>true</code>, the sparsity pattern of the matrix C will be changed to ensure that all entries that result from the product <picture><source srcset="form_1927_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$AB$" src="form_1927.png"/></picture> can be stored in <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>. This is an expensive operation, and if there is a way to predict the sparsity pattern up front, you should probably build it yourself before calling this function with <code>false</code> as last argument. In this case, the rebuilding of the sparsity pattern is bypassed.</p>
+<p>By default, i.e., if the optional argument <code>rebuild_sparsity_pattern</code> is <code>true</code>, the sparsity pattern of the matrix C will be changed to ensure that all entries that result from the product <picture><source srcset="form_1920_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$AB$" src="form_1920.png"/></picture> can be stored in <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>. This is an expensive operation, and if there is a way to predict the sparsity pattern up front, you should probably build it yourself before calling this function with <code>false</code> as last argument. In this case, the rebuilding of the sparsity pattern is bypassed.</p>
 <p>When setting <code>rebuild_sparsity_pattern</code> to <code>true</code> (i.e., leaving it at the default value), it is important to realize that the matrix <code>C</code> passed as first argument still has to be initialized with a sparsity pattern (either at the time of creation of the <a class="el" href="classSparseMatrix.html">SparseMatrix</a> object, or via the <a class="el" href="classSparseMatrix.html#href_anchor">SparseMatrix::reinit()</a> function). This is because we could create a sparsity pattern inside the current function, and then associate <code>C</code> with it, but there would be no way to transfer ownership of this sparsity pattern to anyone once the current function finishes. Consequently, the function requires that <code>C</code> be already associated with a sparsity pattern object, and this object is then reset to fit the product of <code>A</code> and <code>B</code>.</p>
 <p>As a consequence of this, however, it is also important to realize that the sparsity pattern of <code>C</code> is modified and that this would render invalid <em>all other <a class="el" href="classSparseMatrix.html">SparseMatrix</a> objects</em> that happen to <em>also</em> use that sparsity pattern object. </p>
 
@@ -2230,8 +2230,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm of the matrix, that is <picture><source srcset="form_1931_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=\max_{\mathrm{all\
-columns\ }j}\sum_{\mathrm{all\ rows\ } i} |M_{ij}|$" src="form_1931.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm for vectors, i.e. <picture><source srcset="form_1614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1614.png"/></picture>. (cf. Haemmerlin- Hoffmann: Numerische Mathematik) </p>
+<p>Return the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm of the matrix, that is <picture><source srcset="form_1921_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=\max_{\mathrm{all\
+columns\ }j}\sum_{\mathrm{all\ rows\ } i} |M_{ij}|$" src="form_1921.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm for vectors, i.e. <picture><source srcset="form_1610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1610.png"/></picture>. (cf. Haemmerlin- Hoffmann: Numerische Mathematik) </p>
 
 </div>
 </div>
@@ -2259,8 +2259,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of the matrix, that is  <picture><source srcset="form_1629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_\infty=\max_{\mathrm{all\ rows\ }i}\sum_{\mathrm{all\ columns\ }j}
-|M_{ij}|$" src="form_1629.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of vectors, i.e. <picture><source srcset="form_1630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_\infty \leq
+<p>Return the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of the matrix, that is  <picture><source srcset="form_1629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_\infty=\max_{\mathrm{all\ rows\ }i}\sum_{\mathrm{all\ columns\ }j}
+|M_{ij}|$" src="form_1629.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of vectors, i.e. <picture><source srcset="form_1630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_\infty \leq
 |M|_\infty |v|_\infty$" src="form_1630.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
 
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMIC.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMIC.html	2024-03-17 21:57:37.231195932 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMIC.html	2024-03-17 21:57:37.235195955 +0000
@@ -426,8 +426,8 @@
 <div class="textblock"><div class="compoundTemplParams">template&lt;typename number&gt;<br />
 class SparseMIC&lt; number &gt;</div><p>Implementation of the Modified Incomplete Cholesky (MIC(0)) preconditioner for symmetric matrices. This class conforms to the state and usage specification in <a class="el" href="classSparseLUDecomposition.html">SparseLUDecomposition</a>.</p>
 <h3>The decomposition</h3>
-<p>Let a symmetric, positive-definite, sparse matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> be in the form <picture><source srcset="form_1923_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A = D
-- L - L^T$" src="form_1923.png"/></picture>, where <picture><source srcset="form_1479_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1479.png"/></picture> is the diagonal part of <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> and <picture><source srcset="form_1924_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-L$" src="form_1924.png"/></picture> is a strictly lower triangular matrix. The MIC(0) decomposition of the matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is defined by <picture><source srcset="form_1925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B = (X-L)X^{-1}(X-L^T)$" src="form_1925.png"/></picture>, where <picture><source srcset="form_1220_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X$" src="form_1220.png"/></picture> is a diagonal matrix defined by the condition <picture><source srcset="form_1926_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{rowsum}(A) = \text{rowsum}(B)$" src="form_1926.png"/></picture>. </p>
+<p>Let a symmetric, positive-definite, sparse matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> be in the form <picture><source srcset="form_1929_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A = D
+- L - L^T$" src="form_1929.png"/></picture>, where <picture><source srcset="form_1480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1480.png"/></picture> is the diagonal part of <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> and <picture><source srcset="form_1930_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-L$" src="form_1930.png"/></picture> is a strictly lower triangular matrix. The MIC(0) decomposition of the matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is defined by <picture><source srcset="form_1931_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B = (X-L)X^{-1}(X-L^T)$" src="form_1931.png"/></picture>, where <picture><source srcset="form_1220_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X$" src="form_1220.png"/></picture> is a diagonal matrix defined by the condition <picture><source srcset="form_1932_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{rowsum}(A) = \text{rowsum}(B)$" src="form_1932.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="sparse__mic_8h_source.html#href_anchor">46</a> of file <a class="el" href="sparse__mic_8h_source.html">sparse_mic.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
@@ -1966,7 +1966,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Symmetrize the matrix by forming the mean value between the existing matrix and its transpose, <picture><source srcset="form_1610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A = \frac 12(A+A^T)$" src="form_1610.png"/></picture>.</p>
+<p>Symmetrize the matrix by forming the mean value between the existing matrix and its transpose, <picture><source srcset="form_1607_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A = \frac 12(A+A^T)$" src="form_1607.png"/></picture>.</p>
 <p>This operation assumes that the underlying sparsity pattern represents a symmetric object. If this is not the case, then the result of this operation will not be a symmetric matrix, since it only explicitly symmetrizes by looping over the lower left triangular part for efficiency reasons; if there are entries in the upper right triangle, then these elements are missed in the symmetrization. Symmetrization of the sparsity pattern can be obtain by <a class="el" href="classSparsityPattern.html#href_anchor">SparsityPattern::symmetrize()</a>. </p>
 
 </div>
@@ -2218,7 +2218,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the square of the norm of the vector <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1611.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
+<p>Return the square of the norm of the vector <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1608.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
 <p>Obviously, the matrix needs to be quadratic for this operation, and for the result to actually be a norm it also needs to be either real symmetric or complex hermitian.</p>
 <p>The underlying template types of both this matrix and the given vector should either both be real or complex-valued, but not mixed, for this function to make sense.</p>
 <dl class="section note"><dt>Note</dt><dd>If deal.II is configured with threads, this operation will run multi-threaded by splitting the work into smaller chunks (assuming there is enough work to make this worthwhile). </dd></dl>
@@ -2251,7 +2251,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1601.png"/></picture>.</p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1600.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>If deal.II is configured with threads, this operation will run multi-threaded by splitting the work into smaller chunks (assuming there is enough work to make this worthwhile). </dd></dl>
 
 </div>
@@ -2328,7 +2328,7 @@
 </div><div class="memdoc">
 <p>Perform the matrix-matrix multiplication <code>C = A * B</code>, or, if an optional vector argument is given, <code>C = A * <a class="el" href="#href_anchor">diag(V)</a> * B</code>, where <code><a class="el" href="#href_anchor">diag(V)</a></code> defines a diagonal matrix with the vector entries.</p>
 <p>This function assumes that the calling matrix <code>A</code> and the argument <code>B</code> have compatible sizes. By default, the output matrix <code>C</code> will be resized appropriately.</p>
-<p>By default, i.e., if the optional argument <code>rebuild_sparsity_pattern</code> is <code>true</code>, the sparsity pattern of the matrix C will be changed to ensure that all entries that result from the product <picture><source srcset="form_1927_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$AB$" src="form_1927.png"/></picture> can be stored in <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>. This is an expensive operation, and if there is a way to predict the sparsity pattern up front, you should probably build it yourself before calling this function with <code>false</code> as last argument. In this case, the rebuilding of the sparsity pattern is bypassed.</p>
+<p>By default, i.e., if the optional argument <code>rebuild_sparsity_pattern</code> is <code>true</code>, the sparsity pattern of the matrix C will be changed to ensure that all entries that result from the product <picture><source srcset="form_1920_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$AB$" src="form_1920.png"/></picture> can be stored in <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>. This is an expensive operation, and if there is a way to predict the sparsity pattern up front, you should probably build it yourself before calling this function with <code>false</code> as last argument. In this case, the rebuilding of the sparsity pattern is bypassed.</p>
 <p>When setting <code>rebuild_sparsity_pattern</code> to <code>true</code> (i.e., leaving it at the default value), it is important to realize that the matrix <code>C</code> passed as first argument still has to be initialized with a sparsity pattern (either at the time of creation of the <a class="el" href="classSparseMatrix.html">SparseMatrix</a> object, or via the <a class="el" href="classSparseMatrix.html#href_anchor">SparseMatrix::reinit()</a> function). This is because we could create a sparsity pattern inside the current function, and then associate <code>C</code> with it, but there would be no way to transfer ownership of this sparsity pattern to anyone once the current function finishes. Consequently, the function requires that <code>C</code> be already associated with a sparsity pattern object, and this object is then reset to fit the product of <code>A</code> and <code>B</code>.</p>
 <p>As a consequence of this, however, it is also important to realize that the sparsity pattern of <code>C</code> is modified and that this would render invalid <em>all other <a class="el" href="classSparseMatrix.html">SparseMatrix</a> objects</em> that happen to <em>also</em> use that sparsity pattern object. </p>
 
@@ -2399,8 +2399,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm of the matrix, that is <picture><source srcset="form_1931_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=\max_{\mathrm{all\
-columns\ }j}\sum_{\mathrm{all\ rows\ } i} |M_{ij}|$" src="form_1931.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm for vectors, i.e. <picture><source srcset="form_1614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1614.png"/></picture>. (cf. Haemmerlin- Hoffmann: Numerische Mathematik) </p>
+<p>Return the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm of the matrix, that is <picture><source srcset="form_1921_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=\max_{\mathrm{all\
+columns\ }j}\sum_{\mathrm{all\ rows\ } i} |M_{ij}|$" src="form_1921.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm for vectors, i.e. <picture><source srcset="form_1610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1610.png"/></picture>. (cf. Haemmerlin- Hoffmann: Numerische Mathematik) </p>
 
 </div>
 </div>
@@ -2428,8 +2428,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of the matrix, that is  <picture><source srcset="form_1629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_\infty=\max_{\mathrm{all\ rows\ }i}\sum_{\mathrm{all\ columns\ }j}
-|M_{ij}|$" src="form_1629.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of vectors, i.e. <picture><source srcset="form_1630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_\infty \leq
+<p>Return the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of the matrix, that is  <picture><source srcset="form_1629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_\infty=\max_{\mathrm{all\ rows\ }i}\sum_{\mathrm{all\ columns\ }j}
+|M_{ij}|$" src="form_1629.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of vectors, i.e. <picture><source srcset="form_1630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_\infty \leq
 |M|_\infty |v|_\infty$" src="form_1630.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
 
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMatrix.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMatrix.html	2024-03-17 21:57:37.311196425 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMatrix.html	2024-03-17 21:57:37.315196450 +0000
@@ -1452,7 +1452,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Symmetrize the matrix by forming the mean value between the existing matrix and its transpose, <picture><source srcset="form_1610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A = \frac 12(A+A^T)$" src="form_1610.png"/></picture>.</p>
+<p>Symmetrize the matrix by forming the mean value between the existing matrix and its transpose, <picture><source srcset="form_1607_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A = \frac 12(A+A^T)$" src="form_1607.png"/></picture>.</p>
 <p>This operation assumes that the underlying sparsity pattern represents a symmetric object. If this is not the case, then the result of this operation will not be a symmetric matrix, since it only explicitly symmetrizes by looping over the lower left triangular part for efficiency reasons; if there are entries in the upper right triangle, then these elements are missed in the symmetrization. Symmetrization of the sparsity pattern can be obtain by <a class="el" href="classSparsityPattern.html#href_anchor">SparsityPattern::symmetrize()</a>. </p>
 
 </div>
@@ -1812,7 +1812,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the square of the norm of the vector <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1611.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
+<p>Return the square of the norm of the vector <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> with respect to the norm induced by this matrix, i.e. <picture><source srcset="form_1608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1608.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
 <p>Obviously, the matrix needs to be quadratic for this operation, and for the result to actually be a norm it also needs to be either real symmetric or complex hermitian.</p>
 <p>The underlying template types of both this matrix and the given vector should either both be real or complex-valued, but not mixed, for this function to make sense.</p>
 <dl class="section note"><dt>Note</dt><dd>If deal.II is configured with threads, this operation will run multi-threaded by splitting the work into smaller chunks (assuming there is enough work to make this worthwhile). </dd></dl>
@@ -1838,7 +1838,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classVector.html">Vector</a>&lt; somenumber &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>v</em></span>&#href_anchor"memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1601.png"/></picture>.</p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1600.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>If deal.II is configured with threads, this operation will run multi-threaded by splitting the work into smaller chunks (assuming there is enough work to make this worthwhile). </dd></dl>
 
 </div>
@@ -1901,7 +1901,7 @@
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>rebuild_sparsity_pattern</em><span class="paramdefsep"> = </span><span class="paramdefval">true</span></span>&#href_anchor"memdoc">
 <p>Perform the matrix-matrix multiplication <code>C = A * B</code>, or, if an optional vector argument is given, <code>C = A * diag(V) * B</code>, where <code>diag(V)</code> defines a diagonal matrix with the vector entries.</p>
 <p>This function assumes that the calling matrix <code>A</code> and the argument <code>B</code> have compatible sizes. By default, the output matrix <code>C</code> will be resized appropriately.</p>
-<p>By default, i.e., if the optional argument <code>rebuild_sparsity_pattern</code> is <code>true</code>, the sparsity pattern of the matrix C will be changed to ensure that all entries that result from the product <picture><source srcset="form_1927_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$AB$" src="form_1927.png"/></picture> can be stored in <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>. This is an expensive operation, and if there is a way to predict the sparsity pattern up front, you should probably build it yourself before calling this function with <code>false</code> as last argument. In this case, the rebuilding of the sparsity pattern is bypassed.</p>
+<p>By default, i.e., if the optional argument <code>rebuild_sparsity_pattern</code> is <code>true</code>, the sparsity pattern of the matrix C will be changed to ensure that all entries that result from the product <picture><source srcset="form_1920_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$AB$" src="form_1920.png"/></picture> can be stored in <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>. This is an expensive operation, and if there is a way to predict the sparsity pattern up front, you should probably build it yourself before calling this function with <code>false</code> as last argument. In this case, the rebuilding of the sparsity pattern is bypassed.</p>
 <p>When setting <code>rebuild_sparsity_pattern</code> to <code>true</code> (i.e., leaving it at the default value), it is important to realize that the matrix <code>C</code> passed as first argument still has to be initialized with a sparsity pattern (either at the time of creation of the <a class="el" href="classSparseMatrix.html">SparseMatrix</a> object, or via the <a class="el" href="#href_anchor">SparseMatrix::reinit()</a> function). This is because we could create a sparsity pattern inside the current function, and then associate <code>C</code> with it, but there would be no way to transfer ownership of this sparsity pattern to anyone once the current function finishes. Consequently, the function requires that <code>C</code> be already associated with a sparsity pattern object, and this object is then reset to fit the product of <code>A</code> and <code>B</code>.</p>
 <p>As a consequence of this, however, it is also important to realize that the sparsity pattern of <code>C</code> is modified and that this would render invalid <em>all other <a class="el" href="classSparseMatrix.html">SparseMatrix</a> objects</em> that happen to <em>also</em> use that sparsity pattern object. </p>
 
@@ -1957,8 +1957,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm of the matrix, that is <picture><source srcset="form_1931_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=\max_{\mathrm{all\
-columns\ }j}\sum_{\mathrm{all\ rows\ } i} |M_{ij}|$" src="form_1931.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm for vectors, i.e. <picture><source srcset="form_1614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1614.png"/></picture>. (cf. Haemmerlin- Hoffmann: Numerische Mathematik) </p>
+<p>Return the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm of the matrix, that is <picture><source srcset="form_1921_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=\max_{\mathrm{all\
+columns\ }j}\sum_{\mathrm{all\ rows\ } i} |M_{ij}|$" src="form_1921.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm for vectors, i.e. <picture><source srcset="form_1610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1\leq |M|_1 |v|_1$" src="form_1610.png"/></picture>. (cf. Haemmerlin- Hoffmann: Numerische Mathematik) </p>
 
 </div>
 </div>
@@ -1978,8 +1978,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of the matrix, that is  <picture><source srcset="form_1629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_\infty=\max_{\mathrm{all\ rows\ }i}\sum_{\mathrm{all\ columns\ }j}
-|M_{ij}|$" src="form_1629.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of vectors, i.e. <picture><source srcset="form_1630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_\infty \leq
+<p>Return the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of the matrix, that is  <picture><source srcset="form_1629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_\infty=\max_{\mathrm{all\ rows\ }i}\sum_{\mathrm{all\ columns\ }j}
+|M_{ij}|$" src="form_1629.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of vectors, i.e. <picture><source srcset="form_1630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_\infty \leq
 |M|_\infty |v|_\infty$" src="form_1630.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
 
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMatrixEZ.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMatrixEZ.html	2024-03-17 21:57:37.375196820 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMatrixEZ.html	2024-03-17 21:57:37.383196869 +0000
@@ -1206,7 +1206,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classVector.html">Vector</a>&lt; somenumber &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>src</em></span>&#href_anchor"memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1598.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. </p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1601.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. </p>
 
 </div>
 </div>
@@ -1229,7 +1229,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classVector.html">Vector</a>&lt; somenumber &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>src</em></span>&#href_anchor"memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. This function does the same as <code>vmult</code> but takes the transposed matrix. </p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. This function does the same as <code>vmult</code> but takes the transposed matrix. </p>
 
 </div>
 </div>
@@ -1252,7 +1252,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classVector.html">Vector</a>&lt; somenumber &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>src</em></span>&#href_anchor"memdoc">
-<p>Adding Matrix-vector multiplication. Add <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M*src$" src="form_1599.png"/></picture> on <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1600.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. </p>
+<p>Adding Matrix-vector multiplication. Add <picture><source srcset="form_1598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M*src$" src="form_1598.png"/></picture> on <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1599.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. </p>
 
 </div>
 </div>
@@ -1275,7 +1275,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classVector.html">Vector</a>&lt; somenumber &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>src</em></span>&#href_anchor"memdoc">
-<p>Adding Matrix-vector multiplication. Add <picture><source srcset="form_1603_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^T*src$" src="form_1603.png"/></picture> to <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1600.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. This function does the same as <code>vmult_add</code> but takes the transposed matrix. </p>
+<p>Adding Matrix-vector multiplication. Add <picture><source srcset="form_1603_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^T*src$" src="form_1603.png"/></picture> to <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1599.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. This function does the same as <code>vmult_add</code> but takes the transposed matrix. </p>
 
 </div>
 </div>
@@ -1384,7 +1384,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const number</td>          <td class="paramname"><span class="paramname"><em>om</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
-<p>Apply SOR preconditioning matrix to <code>src</code>. The result of this method is <picture><source srcset="form_1928_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = (om D - L)^{-1} src$" src="form_1928.png"/></picture>. </p>
+<p>Apply SOR preconditioning matrix to <code>src</code>. The result of this method is <picture><source srcset="form_1922_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = (om D - L)^{-1} src$" src="form_1922.png"/></picture>. </p>
 
 </div>
 </div>
@@ -1412,7 +1412,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const number</td>          <td class="paramname"><span class="paramname"><em>om</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
-<p>Apply transpose SOR preconditioning matrix to <code>src</code>. The result of this method is <picture><source srcset="form_1929_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = (om D - U)^{-1} src$" src="form_1929.png"/></picture>. </p>
+<p>Apply transpose SOR preconditioning matrix to <code>src</code>. The result of this method is <picture><source srcset="form_1923_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = (om D - U)^{-1} src$" src="form_1923.png"/></picture>. </p>
 
 </div>
 </div>
@@ -1447,7 +1447,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Add the matrix <code>A</code> conjugated by <code>B</code>, that is, <picture><source srcset="form_1930_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B A B^T$" src="form_1930.png"/></picture> to this object. If the parameter <code>transpose</code> is true, compute <picture><source srcset="form_1932_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B^T A B$" src="form_1932.png"/></picture>.</p>
+<p>Add the matrix <code>A</code> conjugated by <code>B</code>, that is, <picture><source srcset="form_1924_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B A B^T$" src="form_1924.png"/></picture> to this object. If the parameter <code>transpose</code> is true, compute <picture><source srcset="form_1925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B^T A B$" src="form_1925.png"/></picture>.</p>
 <p>This function requires that <code>B</code> has a <code><a class="el" href="classSparseMatrixEZ_1_1const__iterator.html">const_iterator</a></code> traversing all matrix entries and that <code>A</code> has a function <code>el(i,j)</code> for access to a specific entry. </p>
 
 <p class="definition">Definition at line <a class="el" href="sparse__matrix__ez_8h_source.html#href_anchor">1461</a> of file <a class="el" href="sparse__matrix__ez_8h_source.html">sparse_matrix_ez.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMatrixIterators_1_1Iterator.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMatrixIterators_1_1Iterator.html	2024-03-17 21:57:37.419197092 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSparseMatrixIterators_1_1Iterator.html	2024-03-17 21:57:37.423197117 +0000
@@ -143,7 +143,7 @@
 <p>The typical use for these iterators is to iterate over the elements of a sparse matrix or over the elements of individual rows. Note that there is no guarantee that the elements of a row are actually traversed in an order in which columns monotonically increase. See the documentation of the <a class="el" href="classSparsityPattern.html">SparsityPattern</a> class for more information.</p>
 <p>The first template argument denotes the underlying numeric type, the second the constness of the matrix.</p>
 <p>Since there is a specialization of this class for <code>Constness=false</code>, this class is for iterators to constant matrices.</p>
-<dl class="section note"><dt>Note</dt><dd>This class operates directly on the internal data structures of the <a class="el" href="classSparsityPattern.html">SparsityPattern</a> and <a class="el" href="classSparseMatrix.html">SparseMatrix</a> classes. As a consequence, some operations are cheap and some are not. In particular, it is cheap to access the column index and the value of an entry pointed to. On the other hand, it is expensive to access the row index (this requires <picture><source srcset="form_1922_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(\log(N))$" src="form_1922.png"/></picture> operations for a matrix with <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> row). As a consequence, when you design algorithms that use these iterators, it is common practice to not loop over <em>all</em> elements of a sparse matrix at once, but to have an outer loop over all rows and within this loop iterate over the elements of this row. This way, you only ever need to dereference the iterator to obtain the column indices and values whereas the (expensive) lookup of the row index can be avoided by using the loop index instead. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This class operates directly on the internal data structures of the <a class="el" href="classSparsityPattern.html">SparsityPattern</a> and <a class="el" href="classSparseMatrix.html">SparseMatrix</a> classes. As a consequence, some operations are cheap and some are not. In particular, it is cheap to access the column index and the value of an entry pointed to. On the other hand, it is expensive to access the row index (this requires <picture><source srcset="form_1919_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(\log(N))$" src="form_1919.png"/></picture> operations for a matrix with <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> row). As a consequence, when you design algorithms that use these iterators, it is common practice to not loop over <em>all</em> elements of a sparse matrix at once, but to have an outer loop over all rows and within this loop iterate over the elements of this row. This way, you only ever need to dereference the iterator to obtain the column indices and values whereas the (expensive) lookup of the row index can be avoided by using the loop index instead. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="sparse__matrix_8h_source.html#href_anchor">347</a> of file <a class="el" href="sparse__matrix_8h_source.html">sparse_matrix.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSparsityPattern.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSparsityPattern.html	2024-03-17 21:57:37.475197438 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSparsityPattern.html	2024-03-17 21:57:37.475197438 +0000
@@ -1161,7 +1161,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Compute the bandwidth of the matrix represented by this structure. The bandwidth is the maximum of <picture><source srcset="form_1607_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|i-j|$" src="form_1607.png"/></picture> for which the index pair <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> represents a nonzero entry of the matrix. Consequently, the maximum bandwidth a <picture><source srcset="form_1608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n\times m$" src="form_1608.png"/></picture> matrix can have is <picture><source srcset="form_1609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\max\{n-1,m-1\}$" src="form_1609.png"/></picture>, a diagonal matrix has bandwidth 0, and there are at most <picture><source srcset="form_1934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2*q+1$" src="form_1934.png"/></picture> entries per row if the bandwidth is <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>. The returned quantity is sometimes called "half
+<p>Compute the bandwidth of the matrix represented by this structure. The bandwidth is the maximum of <picture><source srcset="form_1613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|i-j|$" src="form_1613.png"/></picture> for which the index pair <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> represents a nonzero entry of the matrix. Consequently, the maximum bandwidth a <picture><source srcset="form_1614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n\times m$" src="form_1614.png"/></picture> matrix can have is <picture><source srcset="form_1615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\max\{n-1,m-1\}$" src="form_1615.png"/></picture>, a diagonal matrix has bandwidth 0, and there are at most <picture><source srcset="form_1934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2*q+1$" src="form_1934.png"/></picture> entries per row if the bandwidth is <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>. The returned quantity is sometimes called "half
 bandwidth" in the literature. </p>
 
 <p class="definition">Definition at line <a class="el" href="sparsity__pattern_8cc_source.html#href_anchor">674</a> of file <a class="el" href="sparsity__pattern_8cc_source.html">sparsity_pattern.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSparsityPatternIterators_1_1Iterator.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSparsityPatternIterators_1_1Iterator.html	2024-03-17 21:57:37.511197660 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSparsityPatternIterators_1_1Iterator.html	2024-03-17 21:57:37.515197685 +0000
@@ -160,7 +160,7 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>An iterator class for walking over the elements of a sparsity pattern.</p>
 <p>The typical use for these iterators is to iterate over the elements of a sparsity pattern (or, since they also serve as the basis for iterating over the elements of an associated matrix, over the elements of a sparse matrix), or over the elements of individual rows. There is no guarantee that the elements of a row are actually traversed in an order in which column numbers monotonically increase. See the documentation of the <a class="el" href="classSparsityPattern.html">SparsityPattern</a> class for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This class operates directly on the internal data structures of the <a class="el" href="classSparsityPattern.html">SparsityPattern</a> class. As a consequence, some operations are cheap and some are not. In particular, it is cheap to access the column index of the sparsity pattern entry pointed to. On the other hand, it is expensive to access the row index (this requires <picture><source srcset="form_1922_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(\log(N))$" src="form_1922.png"/></picture> operations for a matrix with <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> row). As a consequence, when you design algorithms that use these iterators, it is common practice to not loop over <em>all</em> elements of a sparsity pattern at once, but to have an outer loop over all rows and within this loop iterate over the elements of this row. This way, you only ever need to dereference the iterator to obtain the column indices whereas the (expensive) lookup of the row index can be avoided by using the loop index instead. </dd></dl>
+<dl class="section note"><dt>Note</dt><dd>This class operates directly on the internal data structures of the <a class="el" href="classSparsityPattern.html">SparsityPattern</a> class. As a consequence, some operations are cheap and some are not. In particular, it is cheap to access the column index of the sparsity pattern entry pointed to. On the other hand, it is expensive to access the row index (this requires <picture><source srcset="form_1919_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(\log(N))$" src="form_1919.png"/></picture> operations for a matrix with <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> row). As a consequence, when you design algorithms that use these iterators, it is common practice to not loop over <em>all</em> elements of a sparsity pattern at once, but to have an outer loop over all rows and within this loop iterate over the elements of this row. This way, you only ever need to dereference the iterator to obtain the column indices whereas the (expensive) lookup of the row index can be avoided by using the loop index instead. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="sparsity__pattern_8h_source.html#href_anchor">280</a> of file <a class="el" href="sparsity__pattern_8h_source.html">sparsity_pattern.h</a>.</p>
 </div><h2 class="groupheader">Member Typedef Documentation</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSphericalManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSphericalManifold.html	2024-03-17 21:57:37.567198006 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSphericalManifold.html	2024-03-17 21:57:37.571198031 +0000
@@ -219,20 +219,20 @@
 class SphericalManifold&lt; dim, spacedim &gt;</div><p><a class="el" href="classManifold.html">Manifold</a> description for a spherical space coordinate system.</p>
 <p>You can use this <a class="el" href="classManifold.html">Manifold</a> object to describe any sphere, circle, hypersphere or hyperdisc in two or three dimensions. This manifold can be used as a co-dimension one manifold descriptor of a spherical surface embedded in a higher dimensional space, or as a co-dimension zero manifold descriptor for a body with positive volume, provided that the center of the spherical space is excluded from the domain. An example for the use of this function would be in the description of a hyper-shell or hyper-ball geometry, for example after creating a coarse mesh using <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_ball()</a>. (However, it is worth mentioning that generating a good mesh for a disk or ball is complicated and requires addition steps. See the "Possibilities for extensions" section of <a class="el" href="step_6.html">step-6</a> for an extensive discussion of how one would construct such meshes and what one needs to do for it.)</p>
 <p>The two template arguments match the meaning of the two template arguments in <a class="el" href="classTriangulation.html">Triangulation&lt;dim, spacedim&gt;</a>, however this <a class="el" href="classManifold.html">Manifold</a> can be used to describe both thin and thick objects, and the behavior is identical when dim &lt;= spacedim, i.e., the functionality of SphericalManifold&lt;2,3&gt; is identical to SphericalManifold&lt;3,3&gt;.</p>
-<p>While <a class="el" href="classPolarManifold.html">PolarManifold</a> reflects the usual notion of polar coordinates, it may not be suitable for domains that contain either the north or south poles. Consider for instance the pair of points <picture><source srcset="form_1411_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_1=(1,\pi/3,0)$" src="form_1411.png"/></picture> and <picture><source srcset="form_1412_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_2=(1,\pi/3,\pi)$" src="form_1412.png"/></picture> in polar coordinates (lying on the surface of a sphere with radius one, on a parallel at height <picture><source srcset="form_1413_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi/3$" src="form_1413.png"/></picture>). In this case connecting the points with a straight line in polar coordinates would take the long road around the globe, without passing through the north pole.</p>
+<p>While <a class="el" href="classPolarManifold.html">PolarManifold</a> reflects the usual notion of polar coordinates, it may not be suitable for domains that contain either the north or south poles. Consider for instance the pair of points <picture><source srcset="form_1446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_1=(1,\pi/3,0)$" src="form_1446.png"/></picture> and <picture><source srcset="form_1447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_2=(1,\pi/3,\pi)$" src="form_1447.png"/></picture> in polar coordinates (lying on the surface of a sphere with radius one, on a parallel at height <picture><source srcset="form_1448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi/3$" src="form_1448.png"/></picture>). In this case connecting the points with a straight line in polar coordinates would take the long road around the globe, without passing through the north pole.</p>
 <p>These two points would be connected (using a <a class="el" href="classPolarManifold.html">PolarManifold</a>) by the curve  </p><p class="formulaDsp">
-<picture><source srcset="form_1414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_1449_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   s: [0,1]  &amp; \rightarrow &amp;  \mathbb S^3 \\
           t &amp; \mapsto     &amp;  (1,\pi/3,0) + (0,0,t\pi)
-\end{align*}" src="form_1414.png"/></picture>
+\end{align*}" src="form_1449.png"/></picture>
 </p>
 <p> This curve is not a geodesic on the sphere, and it is not how we would connect those two points. A better curve, would be the one passing through the North pole:  </p><p class="formulaDsp">
-<picture><source srcset="form_1415_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1450_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  s(t) = x_1 \cos(\alpha(t)) + \kappa \times x_1 \sin(\alpha(t)) +
  \kappa ( \kappa \cdot x_1) (1-\cos(\alpha(t))).
-\]" src="form_1415.png"/></picture>
+\]" src="form_1450.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1416_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa = \frac{x_1 \times x_2}{\Vert x_1 \times x_2 \Vert}$" src="form_1416.png"/></picture> and <picture><source srcset="form_1417_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha(t) = t \cdot \arccos(x_1 \cdot x_2)$" src="form_1417.png"/></picture> for <picture><source srcset="form_1418_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t\in[0,1]$" src="form_1418.png"/></picture>. Indeed, this is a geodesic, and it is the natural choice when connecting points on the surface of the sphere. In the examples above, the <a class="el" href="classPolarManifold.html">PolarManifold</a> class implements the first way of connecting two points on the surface of a sphere, while <a class="el" href="classSphericalManifold.html">SphericalManifold</a> implements the second way, i.e., this <a class="el" href="classManifold.html">Manifold</a> connects points using geodesics. If more than two points are involved through a <a class="el" href="#href_anchor">SphericalManifold::get_new_points()</a> call, a so-called spherical average is used where the final point minimizes the weighted distance to all other points via geodesics.</p>
+<p> where <picture><source srcset="form_1451_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa = \frac{x_1 \times x_2}{\Vert x_1 \times x_2 \Vert}$" src="form_1451.png"/></picture> and <picture><source srcset="form_1452_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha(t) = t \cdot \arccos(x_1 \cdot x_2)$" src="form_1452.png"/></picture> for <picture><source srcset="form_1453_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t\in[0,1]$" src="form_1453.png"/></picture>. Indeed, this is a geodesic, and it is the natural choice when connecting points on the surface of the sphere. In the examples above, the <a class="el" href="classPolarManifold.html">PolarManifold</a> class implements the first way of connecting two points on the surface of a sphere, while <a class="el" href="classSphericalManifold.html">SphericalManifold</a> implements the second way, i.e., this <a class="el" href="classManifold.html">Manifold</a> connects points using geodesics. If more than two points are involved through a <a class="el" href="#href_anchor">SphericalManifold::get_new_points()</a> call, a so-called spherical average is used where the final point minimizes the weighted distance to all other points via geodesics.</p>
 <p>In particular, this class implements a <a class="el" href="classManifold.html">Manifold</a> that joins any two points in space by first projecting them onto the surface of a sphere with unit radius, then connecting them with a geodesic, and finally rescaling the final radius so that the resulting one is the weighted average of the starting radii. This <a class="el" href="classManifold.html">Manifold</a> is identical to <a class="el" href="classPolarManifold.html">PolarManifold</a> in dimension two, while for dimension three it returns points that are more uniformly distributed on the sphere, and it is invariant with respect to rotations of the coordinate system, therefore avoiding the problems that <a class="el" href="classPolarManifold.html">PolarManifold</a> has at the poles. Notice, in particular, that computing tangent vectors at the poles with a <a class="el" href="classPolarManifold.html">PolarManifold</a> is not well defined, while it is perfectly fine with this class.</p>
 <p>For mathematical reasons, it is impossible to construct a unique map of a sphere using only geodesic curves, and therefore, using this class with <a class="el" href="classMappingManifold.html">MappingManifold</a> is discouraged. If you use this <a class="el" href="classManifold.html">Manifold</a> to describe the geometry of a sphere, you should use <a class="el" href="classMappingQ.html">MappingQ</a> as the underlying mapping, and not <a class="el" href="classMappingManifold.html">MappingManifold</a>.</p>
 <p>This <a class="el" href="classManifold.html">Manifold</a> can be used <em>only</em> on geometries where a ball with finite radius is removed from the center. Indeed, the center is a singular point for this manifold, and if you try to connect two points across the center, they would travel on spherical coordinates, avoiding the center.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classSymmetricTensor.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classSymmetricTensor.html	2024-03-17 21:57:37.663198599 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classSymmetricTensor.html	2024-03-17 21:57:37.659198574 +0000
@@ -301,7 +301,7 @@
 <tr class="memitem:a351a3d35263baee19d033e5c68bc8539"><td class="memTemplItemLeft" align="right" valign="top">std::ostream &amp;&#href_anchor"memTemplItemRight" valign="bottom"><a class="el" href="#href_anchor">operator&lt;&lt;</a> (std::ostream &amp;out, const <a class="el" href="classSymmetricTensor.html">SymmetricTensor</a>&lt; 4, dim, Number &gt; &amp;t)</td></tr>
 <tr class="separator:a351a3d35263baee19d033e5c68bc8539"><td class="memSeparator" colspan="2">&#href_anchor"details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> rank_, <a class="el" href="classint.html">int</a> dim, typename Number&gt;<br />
-class SymmetricTensor&lt; rank_, dim, Number &gt;</div><p>Provide a class that stores symmetric tensors of rank 2,4,... efficiently, i.e. only store those off-diagonal elements of the full tensor that are not redundant. For example, for symmetric <picture><source srcset="form_104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_104.png"/></picture> tensors, this would be the elements 11, 22, and 12, while the element 21 is equal to the 12 element. Within this documentation, second order symmetric tensors are denoted as bold-faced upper-case Latin letters such as <picture><source srcset="form_791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A, \mathbf B, \dots$" src="form_791.png"/></picture> or bold-faced Greek letters such as <picture><source srcset="form_792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\varepsilon}$" src="form_792.png"/></picture>, <picture><source srcset="form_793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\sigma}$" src="form_793.png"/></picture>. The Cartesian coordinates of a second-order tensor such as <picture><source srcset="form_395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_395.png"/></picture> are represented as <picture><source srcset="form_794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij}$" src="form_794.png"/></picture> where <picture><source srcset="form_795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i,j$" src="form_795.png"/></picture> are indices ranging from 0 to <code>dim-1</code>.</p>
+class SymmetricTensor&lt; rank_, dim, Number &gt;</div><p>Provide a class that stores symmetric tensors of rank 2,4,... efficiently, i.e. only store those off-diagonal elements of the full tensor that are not redundant. For example, for symmetric <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_97.png"/></picture> tensors, this would be the elements 11, 22, and 12, while the element 21 is equal to the 12 element. Within this documentation, second order symmetric tensors are denoted as bold-faced upper-case Latin letters such as <picture><source srcset="form_791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A, \mathbf B, \dots$" src="form_791.png"/></picture> or bold-faced Greek letters such as <picture><source srcset="form_792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\varepsilon}$" src="form_792.png"/></picture>, <picture><source srcset="form_793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\sigma}$" src="form_793.png"/></picture>. The Cartesian coordinates of a second-order tensor such as <picture><source srcset="form_401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_401.png"/></picture> are represented as <picture><source srcset="form_794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij}$" src="form_794.png"/></picture> where <picture><source srcset="form_795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i,j$" src="form_795.png"/></picture> are indices ranging from 0 to <code>dim-1</code>.</p>
 <p>Using this class for symmetric tensors of rank 2 has advantages over matrices in many cases since the dimension is known to the compiler as well as the location of the data. It is therefore possible to produce far more efficient code than for matrices with runtime-dependent dimension. It is also more efficient than using the more general <code><a class="el" href="classTensor.html">Tensor</a></code> class, since fewer elements are stored, and the class automatically makes sure that the tensor represents a symmetric object.</p>
 <p>For tensors of higher rank, the savings in storage are even higher. For example for the <picture><source srcset="form_796_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$3 \times 3 \times 3 \times 3$" src="form_796.png"/></picture> tensors of rank 4, only 36 instead of the full 81 entries have to be stored. These rank 4 tensors are denoted by blackboard-style upper-case Latin letters such as <picture><source srcset="form_797_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb A$" src="form_797.png"/></picture> with components <picture><source srcset="form_798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{A}_{ijkl}$" src="form_798.png"/></picture>.</p>
 <p>While the definition of a symmetric rank-2 tensor is obvious, tensors of rank 4 are considered symmetric if they are operators mapping symmetric rank-2 tensors onto symmetric rank-2 tensors. This so-called minor symmetry of the rank 4 tensor requires that for every set of four indices <picture><source srcset="form_799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i, j, k, l$" src="form_799.png"/></picture>, the identity <picture><source srcset="form_800_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{C}_{ijkl} = \mathcal{C}_{jikl} =
@@ -630,7 +630,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>This operator assigns a scalar to a tensor. To avoid confusion with what exactly it means to assign a scalar value to a tensor, zero is the only value allowed for <code>d</code>, allowing the intuitive notation <picture><source srcset="form_835_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A = 0$" src="form_835.png"/></picture> to reset all elements of the tensor to zero. </p>
+<p>This operator assigns a scalar to a tensor. To avoid confusion with what exactly it means to assign a scalar value to a tensor, zero is the only value allowed for <code>d</code>, allowing the intuitive notation <picture><source srcset="form_829_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A = 0$" src="form_829.png"/></picture> to reset all elements of the tensor to zero. </p>
 
 </div>
 </div>
@@ -892,8 +892,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Double contraction product between the present symmetric tensor and a tensor of rank 2. For example, if the present object is the symmetric rank-2 tensor <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture> and it is multiplied by another symmetric rank-2 tensor <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_836.png"/></picture>, then the result is the scalar-product double contraction <picture><source srcset="form_837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A : \mathbf B = \sum_{i,j} A_{ij} B_{ij}$" src="form_837.png"/></picture>. In this case, the return value evaluates to a single scalar. While it is possible to define other scalar products (and associated induced norms), this one seems to be the most appropriate one.</p>
-<p>If the present object is a rank-4 tensor such as <picture><source srcset="form_797_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb A$" src="form_797.png"/></picture>, then the result is a rank-2 tensor <picture><source srcset="form_838_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C = \mathbb A : \mathbf B$" src="form_838.png"/></picture>, i.e., the operation contracts over the last two indices of the present object and the indices of the argument, and the result is a tensor of rank 2 ( <picture><source srcset="form_839_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C_{ij} = \sum_{k,l} \mathcal{A}_{ijkl} B_{kl}$" src="form_839.png"/></picture>).</p>
+<p>Double contraction product between the present symmetric tensor and a tensor of rank 2. For example, if the present object is the symmetric rank-2 tensor <picture><source srcset="form_255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{A}$" src="form_255.png"/></picture> and it is multiplied by another symmetric rank-2 tensor <picture><source srcset="form_830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_830.png"/></picture>, then the result is the scalar-product double contraction <picture><source srcset="form_831_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A : \mathbf B = \sum_{i,j} A_{ij} B_{ij}$" src="form_831.png"/></picture>. In this case, the return value evaluates to a single scalar. While it is possible to define other scalar products (and associated induced norms), this one seems to be the most appropriate one.</p>
+<p>If the present object is a rank-4 tensor such as <picture><source srcset="form_797_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb A$" src="form_797.png"/></picture>, then the result is a rank-2 tensor <picture><source srcset="form_832_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf C = \mathbb A : \mathbf B$" src="form_832.png"/></picture>, i.e., the operation contracts over the last two indices of the present object and the indices of the argument, and the result is a tensor of rank 2 ( <picture><source srcset="form_833_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C_{ij} = \sum_{k,l} \mathcal{A}_{ijkl} B_{kl}$" src="form_833.png"/></picture>).</p>
 <p>Note that the multiplication operator for symmetric tensors is defined to be a double contraction over two indices, while it is defined as a single contraction over only one index for regular <code><a class="el" href="classTensor.html">Tensor</a></code> objects. For symmetric tensors it therefore acts in a way that is commonly denoted by a "colon multiplication" in the mathematical literature (the two dots of the colon suggesting that it is a contraction over two indices), which corresponds to a scalar product between tensors.</p>
 <p>It is worth pointing out that this definition of <code>operator*</code> between symmetric tensors is different to how the (in general non-symmetric) <a class="el" href="classTensor.html">Tensor</a> class defines <code>operator*</code>, namely as the single-contraction product over the last index of the first operand and the first index of the second operand. For the double contraction of <a class="el" href="classTensor.html">Tensor</a> objects, you will need to use the <code><a class="el" href="#href_anchor">double_contract()</a></code> function.</p>
 <p>To maintain at least a modicum of resemblance between the interfaces of <a class="el" href="classTensor.html">Tensor</a> and <a class="el" href="classSymmetricTensor.html">SymmetricTensor</a>, there are also global functions <a class="el" href="#href_anchor">double_contract()</a> for symmetric tensors that then do the same work as this operator. However, rather than returning the result as a return value, they write it into the first argument to the function in the same way as the corresponding functions for the <a class="el" href="classTensor.html">Tensor</a> class do things.</p>
@@ -1237,7 +1237,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>The opposite of the previous function: given an index <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> in the unrolled form of the tensor, return what set of indices <picture><source srcset="form_840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(k,l)$" src="form_840.png"/></picture> (for rank-2 tensors) or <picture><source srcset="form_841_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(k,l,m,n)$" src="form_841.png"/></picture> (for rank-4 tensors) corresponds to it. </p>
+<p>The opposite of the previous function: given an index <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> in the unrolled form of the tensor, return what set of indices <picture><source srcset="form_834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(k,l)$" src="form_834.png"/></picture> (for rank-2 tensors) or <picture><source srcset="form_835_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(k,l,m,n)$" src="form_835.png"/></picture> (for rank-4 tensors) corresponds to it. </p>
 
 </div>
 </div>
@@ -1457,7 +1457,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the fourth-order symmetric identity tensor <picture><source srcset="form_776_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb S$" src="form_776.png"/></picture> which maps symmetric second-order tensors, such as <picture><source srcset="form_395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_395.png"/></picture>, to themselves.  </p><p class="formulaDsp">
+<p>Return the fourth-order symmetric identity tensor <picture><source srcset="form_776_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb S$" src="form_776.png"/></picture> which maps symmetric second-order tensors, such as <picture><source srcset="form_401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_401.png"/></picture>, to themselves.  </p><p class="formulaDsp">
 <picture><source srcset="form_777_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbb S : \mathbf A = \mathbf A
 \]" src="form_777.png"/></picture>
@@ -1857,7 +1857,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the second invariant of a tensor of rank 2. The second invariant of a tensor <picture><source srcset="form_395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_395.png"/></picture> is defined as  <picture><source srcset="form_809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_2 (\mathbf A) = II(\mathbf A) = \frac 12
+<p>Compute the second invariant of a tensor of rank 2. The second invariant of a tensor <picture><source srcset="form_401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_401.png"/></picture> is defined as  <picture><source srcset="form_809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_2 (\mathbf A) = II(\mathbf A) = \frac 12
 \left[ (\text{tr} \mathbf A)^2 - \text{tr} (\mathbf{A}^2) \right]$" src="form_809.png"/></picture>.</p>
 <p>For the kind of arguments to this function, i.e., a rank-2 tensor of size 1, the result is simply zero. </p>
 
@@ -1889,11 +1889,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the second invariant of a tensor of rank 2. The second invariant of a tensor <picture><source srcset="form_395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_395.png"/></picture> is defined as  <picture><source srcset="form_809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_2 (\mathbf A) = II(\mathbf A) = \frac 12
+<p>Compute the second invariant of a tensor of rank 2. The second invariant of a tensor <picture><source srcset="form_401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_401.png"/></picture> is defined as  <picture><source srcset="form_809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_2 (\mathbf A) = II(\mathbf A) = \frac 12
 \left[ (\text{tr} \mathbf A)^2 - \text{tr} (\mathbf{A}^2) \right]$" src="form_809.png"/></picture>.</p>
 <p>For the kind of arguments to this function, i.e., a symmetric rank-2 tensor of size 2, the result is (counting indices starting at one)  <picture><source srcset="form_810_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_2(\mathbf A) = II(\mathbf A) = \frac 12
   \left[ (A_{11} + A_{22})^2 - (A_{11}^2+2 A_{12}^2+ A_{22}^2) \right]
-  = A_{11} A_{22} - A_{12}^2$" src="form_810.png"/></picture>. As expected, for the <picture><source srcset="form_104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_104.png"/></picture> symmetric tensors this function handles, this equals the determinant of the tensor. (This is so because for <picture><source srcset="form_104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_104.png"/></picture> symmetric tensors, there really are only two invariants, so the second and third invariant are the same; the determinant is the third invariant.) </p>
+  = A_{11} A_{22} - A_{12}^2$" src="form_810.png"/></picture>. As expected, for the <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_97.png"/></picture> symmetric tensors this function handles, this equals the determinant of the tensor. (This is so because for <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_97.png"/></picture> symmetric tensors, there really are only two invariants, so the second and third invariant are the same; the determinant is the third invariant.) </p>
 
 <p class="definition">Definition at line <a class="el" href="symmetric__tensor_8h_source.html#href_anchor">2917</a> of file <a class="el" href="symmetric__tensor_8h_source.html">symmetric_tensor.h</a>.</p>
 
@@ -1923,7 +1923,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the second invariant of a tensor of rank 2. The second invariant of a tensor <picture><source srcset="form_395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_395.png"/></picture> is defined as  <picture><source srcset="form_809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_2 (\mathbf A) = II(\mathbf A) = \frac 12
+<p>Compute the second invariant of a tensor of rank 2. The second invariant of a tensor <picture><source srcset="form_401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_401.png"/></picture> is defined as  <picture><source srcset="form_809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_2 (\mathbf A) = II(\mathbf A) = \frac 12
 \left[ (\text{tr} \mathbf A)^2 - \text{tr} (\mathbf{A}^2) \right]$" src="form_809.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="symmetric__tensor_8h_source.html#href_anchor">2934</a> of file <a class="el" href="symmetric__tensor_8h_source.html">symmetric_tensor.h</a>.</p>
@@ -1982,8 +1982,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the eigenvalues of a symmetric <picture><source srcset="form_104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_104.png"/></picture> tensor. The array of eigenvalues is sorted in descending order.</p>
-<p>For <picture><source srcset="form_104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_104.png"/></picture> tensors, the eigenvalues of tensor <picture><source srcset="form_770_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf T$" src="form_770.png"/></picture> are the roots of <a href="https://en.wikipedia.org/wiki/Eigenvalue_algorithm#href_anchor">the characteristic polynomial</a> <picture><source srcset="form_812_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0 = \lambda^2
+<p>Return the eigenvalues of a symmetric <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_97.png"/></picture> tensor. The array of eigenvalues is sorted in descending order.</p>
+<p>For <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_97.png"/></picture> tensors, the eigenvalues of tensor <picture><source srcset="form_770_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf T$" src="form_770.png"/></picture> are the roots of <a href="https://en.wikipedia.org/wiki/Eigenvalue_algorithm#href_anchor">the characteristic polynomial</a> <picture><source srcset="form_812_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0 = \lambda^2
 - \lambda\;\text{tr}\mathbf{T} + \det \mathbf{T}$" src="form_812.png"/></picture> as given by  <picture><source srcset="form_813_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_1, \lambda_2 = \frac{1}{2} \left[ \text{tr} \mathbf{T} \pm
 \sqrt{(\text{tr} \mathbf{T})^2 - 4 \det \mathbf{T}} \right]$" src="form_813.png"/></picture>.</p>
 <dl class="section warning"><dt>Warning</dt><dd>The algorithm employed here determines the eigenvalues by computing the roots of the characteristic polynomial. In the case that there exists a common root (the eigenvalues are equal), the computation is <a href="https://scicomp.stackexchange.com/q/23686">subject to round-off errors</a> of order <picture><source srcset="form_814_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{\epsilon}$" src="form_814.png"/></picture>. As an alternative, the <a class="el" href="#href_anchor">eigenvectors()</a> function provides a more robust, but costly, method to compute the eigenvalues of a symmetric tensor. </dd></dl>
@@ -3051,7 +3051,7 @@
 <b>Initial value:</b><div class="fragment"><div class="line">=</div>
 <div class="line">    <a class="code hl_struct" href="structinternal_1_1SymmetricTensorAccessors_1_1StorageType.html">internal::SymmetricTensorAccessors::StorageType&lt;rank_, dim, Number&gt;</a>::</div>
 <div class="line">      n_independent_components</div>
-</div><!-- fragment --><p>An integer denoting the number of independent components that fully describe a symmetric tensor. In <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> space dimensions, this number equals <picture><source srcset="form_829_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 12 (d^2+d)$" src="form_829.png"/></picture> for symmetric tensors of rank 2. </p>
+</div><!-- fragment --><p>An integer denoting the number of independent components that fully describe a symmetric tensor. In <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> space dimensions, this number equals <picture><source srcset="form_828_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 12 (d^2+d)$" src="form_828.png"/></picture> for symmetric tensors of rank 2. </p>
 
 <p class="definition">Definition at line <a class="el" href="symmetric__tensor_8h_source.html#href_anchor">743</a> of file <a class="el" href="symmetric__tensor_8h_source.html">symmetric_tensor.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classTableBase.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTableBase.html	2024-03-17 21:57:37.711198895 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTableBase.html	2024-03-17 21:57:37.719198945 +0000
@@ -232,7 +232,7 @@
 <p>In some way, this class is similar to the <a class="el" href="classTensor.html">Tensor</a> class, in that it templatizes on the number of dimensions. However, there are two major differences. The first is that the <a class="el" href="classTensor.html">Tensor</a> class stores only numeric values (as <code>double</code>s), while the <a class="el" href="classTable.html">Table</a> class stores arbitrary objects. The second is that the <a class="el" href="classTensor.html">Tensor</a> class has fixed sizes in each dimension, also given as a template argument, while this class can handle arbitrary and different sizes in each dimension.</p>
 <p>This has two consequences. First, since the size is not known at compile time, it has to do explicit memory allocation. Second, the layout of individual elements is not known at compile time, so access is slower than for the <a class="el" href="classTensor.html">Tensor</a> class where the number of elements are their location is known at compile time and the compiler can optimize with this knowledge (for example when unrolling loops). On the other hand, this class is of course more flexible, for example when you want a two-dimensional table with the number of rows equal to the number of degrees of freedom on a cell, and the number of columns equal to the number of quadrature points. Both numbers may only be known at run-time, so a flexible table is needed here. Furthermore, you may want to store, say, the gradients of shape functions, so the data type is not a single scalar value, but a tensor itself.</p>
 <h3>Dealing with large data sets</h3>
-<p>The <a class="el" href="classTable.html">Table</a> classes (derived from this class) are frequently used to store large data tables. A modest example is given in <a class="el" href="step_53.html">step-53</a> where we store a <picture><source srcset="form_828_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$380 \times 220$" src="form_828.png"/></picture> table of geographic elevation data for a region of Africa, and this data requires about 670 kB if memory; however, tables that store three- or more-dimensional data (say, information about the density, pressure, and temperature in the earth interior on a regular grid of <code>(latitude, longitude, depth)</code> points) can easily run into hundreds of megabytes or more. These tables are then often provided to classes such as InterpolatedTensorProductGridData or InterpolatedUniformGridData.</p>
+<p>The <a class="el" href="classTable.html">Table</a> classes (derived from this class) are frequently used to store large data tables. A modest example is given in <a class="el" href="step_53.html">step-53</a> where we store a <picture><source srcset="form_837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$380 \times 220$" src="form_837.png"/></picture> table of geographic elevation data for a region of Africa, and this data requires about 670 kB if memory; however, tables that store three- or more-dimensional data (say, information about the density, pressure, and temperature in the earth interior on a regular grid of <code>(latitude, longitude, depth)</code> points) can easily run into hundreds of megabytes or more. These tables are then often provided to classes such as InterpolatedTensorProductGridData or InterpolatedUniformGridData.</p>
 <p>If you need to load such tables on single-processor (or multi-threaded) jobs, then there is nothing you can do about the size of these tables: The table just has to fit into memory. But, if your program is parallelized via MPI, then a typical first implementation would create a table object on every process and fill it on every MPI process by reading the data from a file. This is inefficient from two perspectives:</p><ul>
 <li>You will have a lot of processes that are all trying to read from the same file at the same time.</li>
 <li>In most cases, the data stored on every process is the same, and while every process needs to be able to read from a table, it is not necessary that every process stores its own table: All MPI processes that happen to be located on the same machine might as well store only one copy and make it available to each other via <a href="https://en.wikipedia.org/wiki/Shared_memory">shared memory</a>; in this model, only one MPI process per machine needs to store the data, and all other processes could then access it.</li>
/usr/share/doc/packages/dealii/doxygen/deal.II/classTableHandler.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTableHandler.html	2024-03-17 21:57:37.755199167 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTableHandler.html	2024-03-17 21:57:37.759199192 +0000
@@ -200,7 +200,7 @@
 <p>Two (or more) columns may be merged into a "supercolumn" by twice (or multiple) calling <a class="el" href="#href_anchor">add_column_to_supercolumn()</a>, see there. Additionally there is a function to set for each column the precision of the output of numbers, and there are several functions to prescribe the format and the captions the columns are written with in tex mode.</p>
 <p>A detailed explanation of this class is also given in the <a class="el" href="step_13.html">step-13</a> tutorial program.</p>
 <h3>Example</h3>
-<p>This is a simple example demonstrating the usage of this class. The first column includes the numbers <picture><source srcset="form_830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i=1 \dots n$" src="form_830.png"/></picture>, the second <picture><source srcset="form_831_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1^2 \dots n^2$" src="form_831.png"/></picture>, the third <picture><source srcset="form_832_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{1}\dots\sqrt{n}$" src="form_832.png"/></picture>, where the second and third columns are merged into one supercolumn with the superkey <code>squares and roots</code>. Additionally the first column is aligned to the right (the default was <code>centered</code>) and the precision of the square roots are set to be 6 (instead of 4 as default).</p>
+<p>This is a simple example demonstrating the usage of this class. The first column includes the numbers <picture><source srcset="form_838_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i=1 \dots n$" src="form_838.png"/></picture>, the second <picture><source srcset="form_839_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1^2 \dots n^2$" src="form_839.png"/></picture>, the third <picture><source srcset="form_840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{1}\dots\sqrt{n}$" src="form_840.png"/></picture>, where the second and third columns are merged into one supercolumn with the superkey <code>squares and roots</code>. Additionally the first column is aligned to the right (the default was <code>centered</code>) and the precision of the square roots are set to be 6 (instead of 4 as default).</p>
 <div class="fragment"><div class="line"><a class="code hl_class" href="classTableHandler.html">TableHandler</a> table;</div>
 <div class="line"><span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1; i &lt;= n; ++i)</div>
 <div class="line">  {</div>
@@ -231,9 +231,9 @@
 <p>When generating output, <a class="el" href="classTableHandler.html">TableHandler</a> expects that all columns have the exact same number of elements in it so that the result is in fact a table. This assumes that in each of the iterations (time steps, nonlinear iterations, etc) you fill every single column. On the other hand, this may not always be what you want to do. For example, it could be that the function that computes the nonlinear residual is only called every few time steps; or, a function computing statistics of the mesh is only called whenever the mesh is in fact refined. In these cases, the <a class="el" href="#href_anchor">add_value()</a> function will be called less often for some columns and the column would therefore have fewer elements; furthermore, these elements would not be aligned with the rows that contain the other data elements that were produced during this iteration. An entirely different scenario is that the table is filled and at a later time we use the data in there to compute the elements of other rows; the <a class="el" href="classConvergenceTable.html">ConvergenceTable</a> class does something like this.</p>
 <p>To support both scenarios, the <a class="el" href="classTableHandler.html">TableHandler</a> class has a property called <em>auto-fill mode</em>. By default, auto-fill mode is off, but it can be enabled by calling <a class="el" href="#href_anchor">set_auto_fill_mode()</a>. If auto-fill mode is enabled we use the following algorithm:</p>
 <ul>
-<li>When calling <code>add_value(key, value)</code>, we count the number of elements in the column corresponding to <code>key</code>. Let's call this number <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture>.</li>
-<li>We also determine the maximal number of elements in the other columns; call it <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>.</li>
-<li>If <picture><source srcset="form_833_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m &lt; n-1$" src="form_833.png"/></picture> then we add <picture><source srcset="form_834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n-m-1$" src="form_834.png"/></picture> copies of the object <code>T()</code> to this column. Here, <code>T</code> is the data type of the given <code>value</code>. For example, if <code>T</code> is a numeric type, then <code>T()</code> is the number zero; if <code>T</code> is <code>std::string</code>, then <code>T()</code> is the empty string <code>""</code>.</li>
+<li>When calling <code>add_value(key, value)</code>, we count the number of elements in the column corresponding to <code>key</code>. Let's call this number <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture>.</li>
+<li>We also determine the maximal number of elements in the other columns; call it <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>.</li>
+<li>If <picture><source srcset="form_841_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m &lt; n-1$" src="form_841.png"/></picture> then we add <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n-m-1$" src="form_842.png"/></picture> copies of the object <code>T()</code> to this column. Here, <code>T</code> is the data type of the given <code>value</code>. For example, if <code>T</code> is a numeric type, then <code>T()</code> is the number zero; if <code>T</code> is <code>std::string</code>, then <code>T()</code> is the empty string <code>""</code>.</li>
 <li>Add the given value to this column.</li>
 </ul>
 <p>Padding the column with default elements makes sure that after the addition the column has as many entries as the longest other column. In other words, if we have skipped previous invocations of <a class="el" href="#href_anchor">add_value()</a> for a given key, then the padding will enter default values into this column.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classTensor.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTensor.html	2024-03-17 21:57:37.815199538 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTensor.html	2024-03-17 21:57:37.823199588 +0000
@@ -268,13 +268,13 @@
 class Tensor&lt; rank_, dim, Number &gt;</div><p>A general tensor class with an arbitrary rank, i.e. with an arbitrary number of indices. The <a class="el" href="classTensor.html">Tensor</a> class provides an indexing operator and a bit of infrastructure, but most functionality is recursively handed down to tensors of rank 1 or put into external templated functions, e.g. the <code>contract</code> family.</p>
 <p>The rank of a tensor specifies which types of physical quantities it can represent: </p><ul>
 <li>
-A rank-0 tensor is a scalar that can store quantities such as temperature or pressure. These scalar quantities are shown in this documentation as simple lower-case Latin letters e.g. <picture><source srcset="form_852_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a, b, c, \dots$" src="form_852.png"/></picture>.  </li>
+A rank-0 tensor is a scalar that can store quantities such as temperature or pressure. These scalar quantities are shown in this documentation as simple lower-case Latin letters e.g. <picture><source srcset="form_849_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a, b, c, \dots$" src="form_849.png"/></picture>.  </li>
 <li>
-A rank-1 tensor is a vector with <code>dim</code> components and it can represent vector quantities such as velocity, displacement, electric field, etc. They can also describe the gradient of a scalar field. The notation used for rank-1 tensors is bold-faced lower-case Latin letters e.g. <picture><source srcset="form_853_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf a, \mathbf b, \mathbf c, \dots$" src="form_853.png"/></picture>. The components of a rank-1 tensor such as <picture><source srcset="form_854_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf a$" src="form_854.png"/></picture> are represented as <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_i$" src="form_855.png"/></picture> where <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> is an index between 0 and <code>dim-1</code>.  </li>
+A rank-1 tensor is a vector with <code>dim</code> components and it can represent vector quantities such as velocity, displacement, electric field, etc. They can also describe the gradient of a scalar field. The notation used for rank-1 tensors is bold-faced lower-case Latin letters e.g. <picture><source srcset="form_850_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf a, \mathbf b, \mathbf c, \dots$" src="form_850.png"/></picture>. The components of a rank-1 tensor such as <picture><source srcset="form_851_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf a$" src="form_851.png"/></picture> are represented as <picture><source srcset="form_852_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_i$" src="form_852.png"/></picture> where <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> is an index between 0 and <code>dim-1</code>.  </li>
 <li>
-A rank-2 tensor is a linear operator that can transform a vector into another vector. These tensors are similar to matrices with <picture><source srcset="form_856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{dim} \times \text{dim}$" src="form_856.png"/></picture> components. There is a related class <a class="el" href="classSymmetricTensor.html">SymmetricTensor&lt;2,dim&gt;</a> for tensors of rank 2 whose elements are symmetric. Rank-2 tensors are usually denoted by bold-faced upper-case Latin letters such as <picture><source srcset="form_791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A, \mathbf B, \dots$" src="form_791.png"/></picture> or bold-faced Greek letters for example <picture><source srcset="form_857_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\varepsilon}, \boldsymbol{\sigma}$" src="form_857.png"/></picture>. The components of a rank 2 tensor such as <picture><source srcset="form_395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_395.png"/></picture> are shown with two indices <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> as <picture><source srcset="form_794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij}$" src="form_794.png"/></picture>. These tensors usually describe the gradients of vector fields (deformation gradient, velocity gradient, etc.) or Hessians of scalar fields. Additionally, mechanical stress tensors are rank-2 tensors that map the unit normal vectors of internal surfaces into local traction (force per unit area) vectors.  </li>
+A rank-2 tensor is a linear operator that can transform a vector into another vector. These tensors are similar to matrices with <picture><source srcset="form_853_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{dim} \times \text{dim}$" src="form_853.png"/></picture> components. There is a related class <a class="el" href="classSymmetricTensor.html">SymmetricTensor&lt;2,dim&gt;</a> for tensors of rank 2 whose elements are symmetric. Rank-2 tensors are usually denoted by bold-faced upper-case Latin letters such as <picture><source srcset="form_791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A, \mathbf B, \dots$" src="form_791.png"/></picture> or bold-faced Greek letters for example <picture><source srcset="form_854_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\varepsilon}, \boldsymbol{\sigma}$" src="form_854.png"/></picture>. The components of a rank 2 tensor such as <picture><source srcset="form_401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_401.png"/></picture> are shown with two indices <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> as <picture><source srcset="form_794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij}$" src="form_794.png"/></picture>. These tensors usually describe the gradients of vector fields (deformation gradient, velocity gradient, etc.) or Hessians of scalar fields. Additionally, mechanical stress tensors are rank-2 tensors that map the unit normal vectors of internal surfaces into local traction (force per unit area) vectors.  </li>
 <li>
-Tensors with ranks higher than 2 are similarly defined in a consistent manner. They have <picture><source srcset="form_859_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{dim}^{\text{rank}}$" src="form_859.png"/></picture> components and the number of indices required to identify a component equals <code>rank</code>. For rank-4 tensors, a symmetric variant called <a class="el" href="classSymmetricTensor.html">SymmetricTensor&lt;4,dim&gt;</a> exists.  </li>
+Tensors with ranks higher than 2 are similarly defined in a consistent manner. They have <picture><source srcset="form_856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{dim}^{\text{rank}}$" src="form_856.png"/></picture> components and the number of indices required to identify a component equals <code>rank</code>. For rank-4 tensors, a symmetric variant called <a class="el" href="classSymmetricTensor.html">SymmetricTensor&lt;4,dim&gt;</a> exists.  </li>
 </ul>
 <p>Using this tensor class for objects of rank 2 has advantages over matrices in many cases since the dimension is known to the compiler as well as the location of the data. It is therefore possible to produce far more efficient code than for matrices with runtime-dependent dimension. It also makes the code easier to read because of the semantic difference between a tensor (an object that relates to a coordinate system and has transformation properties with regard to coordinate rotations and transforms) and matrices (which we consider as operators on arbitrary vector spaces related to linear algebra things).</p>
 <dl class="tparams"><dt>Template Parameters</dt><dd>
@@ -1209,7 +1209,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return an unrolled index in the range <picture><source srcset="form_865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,\text{dim}^{\text{rank}}-1]$" src="form_865.png"/></picture> for the element of the tensor indexed by the argument to the function. </p>
+<p>Return an unrolled index in the range <picture><source srcset="form_862_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,\text{dim}^{\text{rank}}-1]$" src="form_862.png"/></picture> for the element of the tensor indexed by the argument to the function. </p>
 
 </div>
 </div>
@@ -1237,7 +1237,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Opposite of component_to_unrolled_index: For an index in the range <picture><source srcset="form_866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, \text{dim}^{\text{rank}}-1]$" src="form_866.png"/></picture>, return which set of indices it would correspond to. </p>
+<p>Opposite of component_to_unrolled_index: For an index in the range <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, \text{dim}^{\text{rank}}-1]$" src="form_863.png"/></picture>, return which set of indices it would correspond to. </p>
 
 </div>
 </div>
@@ -1903,11 +1903,11 @@
 </div><div class="memdoc">
 <p>Entrywise multiplication of two tensor objects of general rank.</p>
 <p>This multiplication is also called "Hadamard-product" (c.f. <a href="https://en.wikipedia.org/wiki/Hadamard_product_(matrices)">https://en.wikipedia.org/wiki/Hadamard_product_(matrices)</a>), and generates a new tensor of size &lt;rank, dim&gt;:  </p><p class="formulaDsp">
-<picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_857_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \text{result}_{i, j}
   = \text{left}_{i, j}\circ
     \text{right}_{i, j}
-\]" src="form_860.png"/></picture>
+\]" src="form_857.png"/></picture>
 </p>
 <dl class="tparams"><dt>Template Parameters</dt><dd>
   <table class="tparams">
@@ -1956,7 +1956,7 @@
 </p>
 <dl class="section note"><dt>Note</dt><dd>For the <a class="el" href="classTensor.html">Tensor</a> class, the multiplication operator only performs a contraction over a single pair of indices. This is in contrast to the multiplication operator for <a class="el" href="classSymmetricTensor.html">SymmetricTensor</a>, for which the corresponding <code><a class="el" href="#href_anchor">operator*()</a></code> performs a double contraction. The origin of the difference in how <code><a class="el" href="#href_anchor">operator*()</a></code> is implemented between <a class="el" href="classTensor.html">Tensor</a> and <a class="el" href="classSymmetricTensor.html">SymmetricTensor</a> is that for the former, the product between two <a class="el" href="classTensor.html">Tensor</a> objects of same rank and dimension results in another <a class="el" href="classTensor.html">Tensor</a> object &ndash; that it, <code><a class="el" href="#href_anchor">operator*()</a></code> corresponds to the multiplicative group action within the group of tensors. On the other hand, there is no corresponding multiplicative group action with the set of symmetric tensors because, in general, the product of two symmetric tensors is a <em>nonsymmetric</em> tensor. As a consequence, for a mathematician, it is clear that <code><a class="el" href="#href_anchor">operator*()</a></code> for symmetric tensors must have a different meaning: namely the <em>dot</em> or <em>scalar product</em> that maps two symmetric tensors of rank 2 to a scalar. This corresponds to the double-dot (colon) operator whose meaning is then extended to the product of any two even-ranked symmetric tensors.</dd>
 <dd>
-In case the contraction yields a tensor of rank 0, that is, if <code>rank_1==rank_2==1</code>, then a scalar number is returned as an unwrapped number type. Return the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture> norm of the given rank-2 tensor, where <picture><source srcset="form_862_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf T\|_1 = \max_j \sum_i |T_{ij}|$" src="form_862.png"/></picture> (maximum of the sums over columns). </dd></dl>
+In case the contraction yields a tensor of rank 0, that is, if <code>rank_1==rank_2==1</code>, then a scalar number is returned as an unwrapped number type. Return the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture> norm of the given rank-2 tensor, where <picture><source srcset="form_859_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf T\|_1 = \max_j \sum_i |T_{ij}|$" src="form_859.png"/></picture> (maximum of the sums over columns). </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="tensor_8h_source.html#href_anchor">3035</a> of file <a class="el" href="tensor_8h_source.html">tensor.h</a>.</p>
 
@@ -1986,7 +1986,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture> norm of the given rank-2 tensor, where <picture><source srcset="form_864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf T\|_\infty = \max_i \sum_j |T_{ij}|$" src="form_864.png"/></picture> (maximum of the sums over rows). </p>
+<p>Return the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture> norm of the given rank-2 tensor, where <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf T\|_\infty = \max_i \sum_j |T_{ij}|$" src="form_861.png"/></picture> (maximum of the sums over rows). </p>
 
 <p class="definition">Definition at line <a class="el" href="tensor_8h_source.html#href_anchor">3061</a> of file <a class="el" href="tensor_8h_source.html">tensor.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classTensorProductManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTensorProductManifold.html	2024-03-17 21:57:37.871199884 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTensorProductManifold.html	2024-03-17 21:57:37.879199933 +0000
@@ -233,7 +233,7 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> dim_A, <a class="el" href="classint.html">int</a> spacedim_A, <a class="el" href="classint.html">int</a> chartdim_A, <a class="el" href="classint.html">int</a> dim_B, <a class="el" href="classint.html">int</a> spacedim_B, <a class="el" href="classint.html">int</a> chartdim_B&gt;<br />
 class TensorProductManifold&lt; dim, dim_A, spacedim_A, chartdim_A, dim_B, spacedim_B, chartdim_B &gt;</div><p><a class="el" href="classTensor.html">Tensor</a> product manifold of two ChartManifolds. </p>
-<p>This manifold will combine the ChartManifolds <code>A</code> and <code>B</code> given in the constructor to form a new <a class="el" href="classChartManifold.html">ChartManifold</a> by building the tensor product <picture><source srcset="form_1449_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A\otimes B$" src="form_1449.png"/></picture>. The first <code>spacedim_A</code> dimensions in the real space and the first <code>chartdim_A</code> dimensions of the chart will be given by manifold <code>A</code>, while the remaining coordinates are given by <code>B</code>. The manifold is to be used by a <code><a class="el" href="classTriangulation.html">Triangulation</a>&lt;dim, space_dim_A+space_dim_B&gt;</code>.</p>
+<p>This manifold will combine the ChartManifolds <code>A</code> and <code>B</code> given in the constructor to form a new <a class="el" href="classChartManifold.html">ChartManifold</a> by building the tensor product <picture><source srcset="form_1476_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A\otimes B$" src="form_1476.png"/></picture>. The first <code>spacedim_A</code> dimensions in the real space and the first <code>chartdim_A</code> dimensions of the chart will be given by manifold <code>A</code>, while the remaining coordinates are given by <code>B</code>. The manifold is to be used by a <code><a class="el" href="classTriangulation.html">Triangulation</a>&lt;dim, space_dim_A+space_dim_B&gt;</code>.</p>
 <p>An example usage would be the combination of a <a class="el" href="classSphericalManifold.html">SphericalManifold</a> with space dimension 2 and a <a class="el" href="classFlatManifold.html">FlatManifold</a> with space dimension 1 to form a cylindrical manifold.</p>
 <p><a class="el" href="#href_anchor">pull_back()</a>, <a class="el" href="#href_anchor">push_forward()</a>, and <a class="el" href="#href_anchor">push_forward_gradient()</a> are implemented by splitting the input argument into inputs for <code>A</code> and <code>B</code> according to the given dimensions and applying the corresponding operations before concatenating the result.</p>
 <dl class="section note"><dt>Note</dt><dd>The dimension arguments <code>dim_A</code> and <code>dim_B</code> are not used.</dd></dl>
@@ -605,24 +605,24 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a vector that, at <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1427.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
-<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1442.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
-<picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>Return a vector that, at <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1429.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
+<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1439.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
+<picture><source srcset="form_1440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \zeta(t) &amp;= \xi_1 +  t (\xi_2-\xi_1)
  \\          &amp;= F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                             -F^{-1}(\mathbf x_1)\right]
-\end{align*}" src="form_1443.png"/></picture>
+\end{align*}" src="form_1440.png"/></picture>
 </p>
 <p> In image space, i.e., in the space in which we operate, this leads to the curve  </p><p class="formulaDsp">
-<picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_1441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s(t) &amp;= F(\zeta(t))
  \\          &amp;= F(\xi_1 +  t (\xi_2-\xi_1))
  \\          &amp;= F\left(F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                     -F^{-1}(\mathbf x_1)\right]\right).
-\end{align*}" src="form_1444.png"/></picture>
+\end{align*}" src="form_1441.png"/></picture>
 </p>
-<p> What the current function is supposed to return is <picture><source srcset="form_1431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1431.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
-<picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> What the current function is supposed to return is <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1433.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
+<picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s'(0) &amp;=
     \frac{d}{dt}\left. F\left(F^{-1}(\mathbf x_1)
                        + t\left[F^{-1}(\mathbf x_2)
@@ -631,11 +631,11 @@
 \\ &amp;= \nabla_\xi F\left(F^{-1}(\mathbf x_1)\right)
                    \left[F^{-1}(\mathbf x_2)
                                 -F^{-1}(\mathbf x_1)\right].
-\end{align*}" src="form_1445.png"/></picture>
+\end{align*}" src="form_1442.png"/></picture>
 </p>
 <p> This formula may then have to be slightly modified by considering any periodicity that was assumed in the call to the constructor.</p>
-<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1446.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1447.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
-x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1448.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
+<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1443.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1444.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
+x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1445.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">x1</td><td>The first point that describes the geodesic, and the one at which the "direction" is to be evaluated. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classTensorProductMatrixSymmetricSum.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTensorProductMatrixSymmetricSum.html	2024-03-17 21:57:37.911200131 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTensorProductMatrixSymmetricSum.html	2024-03-17 21:57:37.911200131 +0000
@@ -161,9 +161,9 @@
 M_1 \otimes A_0
 \end{align*}" src="form_1936.png"/></picture>
 </p>
-<p> in 3d. The typical application setting is a discretization of the Laplacian <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture> on a Cartesian (axis-aligned) geometry, where it can be exactly represented by the Kronecker or tensor product of a 1d <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> and a 1d Laplace matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> in each tensor direction (due to symmetry <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> and <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> are the same in each dimension). The dimension of the resulting class is the product of the one-dimensional matrices.</p>
-<p>This class implements two basic operations, namely the usual multiplication by a vector and the inverse. For both operations, fast tensorial techniques can be applied that implement the operator evaluation in <picture><source srcset="form_1937_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{size}(M)^{d+1}$" src="form_1937.png"/></picture> arithmetic operations, considerably less than <picture><source srcset="form_1938_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{size}(M)^{2d}$" src="form_1938.png"/></picture> for the naive forward transformation and <picture><source srcset="form_1939_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{size}(M)^{3d}$" src="form_1939.png"/></picture> for setting up the inverse of <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>.</p>
-<p>Interestingly, the exact inverse of the matrix <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture> can be found through tensor products due to 1964's work by Lynch et al. <b>[Lynch1964]</b>,  </p><p class="formulaDsp">
+<p> in 3d. The typical application setting is a discretization of the Laplacian <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture> on a Cartesian (axis-aligned) geometry, where it can be exactly represented by the Kronecker or tensor product of a 1d <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> and a 1d Laplace matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> in each tensor direction (due to symmetry <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> and <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> are the same in each dimension). The dimension of the resulting class is the product of the one-dimensional matrices.</p>
+<p>This class implements two basic operations, namely the usual multiplication by a vector and the inverse. For both operations, fast tensorial techniques can be applied that implement the operator evaluation in <picture><source srcset="form_1937_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{size}(M)^{d+1}$" src="form_1937.png"/></picture> arithmetic operations, considerably less than <picture><source srcset="form_1938_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{size}(M)^{2d}$" src="form_1938.png"/></picture> for the naive forward transformation and <picture><source srcset="form_1939_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{size}(M)^{3d}$" src="form_1939.png"/></picture> for setting up the inverse of <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>.</p>
+<p>Interestingly, the exact inverse of the matrix <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture> can be found through tensor products due to 1964's work by Lynch et al. <b>[Lynch1964]</b>,  </p><p class="formulaDsp">
 <picture><source srcset="form_1940_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 L^{-1} &amp;= S_1 \otimes S_0 (\Lambda_1 \otimes I + I \otimes \Lambda_0)^{-1}
 S_1^\mathrm T \otimes S_0^\mathrm T,
@@ -174,7 +174,7 @@
 A_d s  &amp;= \lambda M_d s, d = 0, \quad \ldots,\mathrm{dim},
 \end{align*}" src="form_1942.png"/></picture>
 </p>
-<p> and <picture><source srcset="form_1943_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Lambda_d$" src="form_1943.png"/></picture> is the diagonal matrix representing the generalized eigenvalues <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture>. Note that the vectors <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> are such that they simultaneously diagonalize <picture><source srcset="form_1944_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_d$" src="form_1944.png"/></picture> and <picture><source srcset="form_1945_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_d$" src="form_1945.png"/></picture>, i.e. <picture><source srcset="form_1946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_d^{\mathrm T} A_d S_d =
+<p> and <picture><source srcset="form_1943_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Lambda_d$" src="form_1943.png"/></picture> is the diagonal matrix representing the generalized eigenvalues <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture>. Note that the vectors <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> are such that they simultaneously diagonalize <picture><source srcset="form_1944_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_d$" src="form_1944.png"/></picture> and <picture><source srcset="form_1945_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_d$" src="form_1945.png"/></picture>, i.e. <picture><source srcset="form_1946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_d^{\mathrm T} A_d S_d =
 \Lambda_d$" src="form_1946.png"/></picture> and <picture><source srcset="form_1947_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_d^{\mathrm T} M_d S_d = I$" src="form_1947.png"/></picture>. This method of matrix inversion is called fast diagonalization method.</p>
 <p>This class requires LAPACK support.</p>
 <dl class="section note"><dt>Note</dt><dd>This class allows for two modes of usage. The first is a use case with run time constants for the matrix dimensions that is achieved by setting the optional template parameter <code>n_rows_1d</code> to -1. The second mode of usage that is faster allows to set the template parameter as a compile time constant, giving significantly faster code in particular for small sizes of the matrix.</dd>
/usr/share/doc/packages/dealii/doxygen/deal.II/classTensorProductPolynomialsBubbles.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTensorProductPolynomialsBubbles.html	2024-03-17 21:57:37.951200378 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTensorProductPolynomialsBubbles.html	2024-03-17 21:57:37.951200378 +0000
@@ -157,9 +157,9 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class TensorProductPolynomialsBubbles&lt; dim &gt;</div><p>A class that represents a space of tensor product polynomials, augmented by <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture> (non-normalized) bubble functions of form  <picture><source srcset="form_867_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(\mathbf x)
+class TensorProductPolynomialsBubbles&lt; dim &gt;</div><p>A class that represents a space of tensor product polynomials, augmented by <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture> (non-normalized) bubble functions of form  <picture><source srcset="form_877_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(\mathbf x)
 = 2^{\text{degree}-1}\left(x_j-frac 12\right)^{\text{degree}-1}
-\left[\prod_{i=0}^{dim-1}(x_i(1-x_i))\right]$" src="form_867.png"/></picture> for <picture><source srcset="form_868_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=0,\ldots,dim-1$" src="form_868.png"/></picture>. If <code>degree</code> is one, then the first factor disappears and one receives the usual bubble function centered at the mid-point of the cell.</p>
+\left[\prod_{i=0}^{dim-1}(x_i(1-x_i))\right]$" src="form_877.png"/></picture> for <picture><source srcset="form_878_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=0,\ldots,dim-1$" src="form_878.png"/></picture>. If <code>degree</code> is one, then the first factor disappears and one receives the usual bubble function centered at the mid-point of the cell.</p>
 <p>This class inherits most of its functionality from <a class="el" href="classTensorProductPolynomials.html">TensorProductPolynomials</a>. The bubble enrichments are added for the last index. </p>
 
 <p class="definition">Definition at line <a class="el" href="tensor__product__polynomials__bubbles_8h_source.html#href_anchor">53</a> of file <a class="el" href="tensor__product__polynomials__bubbles_8h_source.html">tensor_product_polynomials_bubbles.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classTorusManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTorusManifold.html	2024-03-17 21:57:38.007200724 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTorusManifold.html	2024-03-17 21:57:38.011200748 +0000
@@ -232,7 +232,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim&gt;<br />
-class TorusManifold&lt; dim &gt;</div><p><a class="el" href="classManifold.html">Manifold</a> description for the surface of a Torus in three dimensions. The Torus is assumed to be in the x-z plane. The reference coordinate system is given by the angle <picture><source srcset="form_1424_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$phi$" src="form_1424.png"/></picture> around the y axis, the angle <picture><source srcset="form_1425_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$theta$" src="form_1425.png"/></picture> around the centerline of the torus, and the distance to the centerline <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture> (between 0 and 1).</p>
+class TorusManifold&lt; dim &gt;</div><p><a class="el" href="classManifold.html">Manifold</a> description for the surface of a Torus in three dimensions. The Torus is assumed to be in the x-z plane. The reference coordinate system is given by the angle <picture><source srcset="form_1459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$phi$" src="form_1459.png"/></picture> around the y axis, the angle <picture><source srcset="form_1460_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$theta$" src="form_1460.png"/></picture> around the centerline of the torus, and the distance to the centerline <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture> (between 0 and 1).</p>
 <p>This class was developed to be used in conjunction with <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::torus</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="grid_2manifold__lib_8h_source.html#href_anchor">787</a> of file <a class="el" href="grid_2manifold__lib_8h_source.html">manifold_lib.h</a>.</p>
@@ -638,7 +638,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
+<p>Given a point in the chartdim dimensional Euclidean space, this method returns the derivatives of the function <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> that maps from the chartdim-dimensional to the spacedim-dimensional space. In other words, it is a matrix of size <picture><source srcset="form_1438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{spacedim}\times\text{chartdim}$" src="form_1438.png"/></picture>.</p>
 <p>This function is used in the computations required by the <a class="el" href="classChartManifold.html#href_anchor">get_tangent_vector()</a> function. Since not all users of the <a class="el" href="classManifold.html">Manifold</a> class interface will require calling that function, the current function is implemented but will trigger an exception whenever called. This allows derived classes to avoid implementing the push_forward_gradient function if this functionality is not needed in the user program.</p>
 <p>Refer to the general documentation of this class for more information. </p>
 
@@ -668,24 +668,24 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a vector that, at <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1427.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
-<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1442.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
-<picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>Return a vector that, at <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1429.png"/></picture>. See the documentation of the <a class="el" href="classManifold.html">Manifold</a> class and of <a class="el" href="classManifold.html#href_anchor">Manifold::get_tangent_vector()</a> for a more detailed description.</p>
+<p>For the current class, we assume that this geodesic is the image under the <a class="el" href="#href_anchor">push_forward()</a> operation of a straight line of the pre-images of <code>x1</code> and <code>x2</code> (where pre-images are computed by pulling back the locations <code>x1</code> and <code>x2</code>). In other words, if these preimages are <picture><source srcset="form_1439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi_1=F^{-1}(\mathbf x_1), \xi_2=F^{-1}(\mathbf x_2)$" src="form_1439.png"/></picture>, then the geodesic in preimage (the chartdim-dimensional Euclidean) space is  </p><p class="formulaDsp">
+<picture><source srcset="form_1440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \zeta(t) &amp;= \xi_1 +  t (\xi_2-\xi_1)
  \\          &amp;= F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                             -F^{-1}(\mathbf x_1)\right]
-\end{align*}" src="form_1443.png"/></picture>
+\end{align*}" src="form_1440.png"/></picture>
 </p>
 <p> In image space, i.e., in the space in which we operate, this leads to the curve  </p><p class="formulaDsp">
-<picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_1441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s(t) &amp;= F(\zeta(t))
  \\          &amp;= F(\xi_1 +  t (\xi_2-\xi_1))
  \\          &amp;= F\left(F^{-1}(\mathbf x_1) + t\left[F^{-1}(\mathbf x_2)
                                     -F^{-1}(\mathbf x_1)\right]\right).
-\end{align*}" src="form_1444.png"/></picture>
+\end{align*}" src="form_1441.png"/></picture>
 </p>
-<p> What the current function is supposed to return is <picture><source srcset="form_1431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1431.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
-<picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> What the current function is supposed to return is <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1433.png"/></picture>. By the chain rule, this is equal to  </p><p class="formulaDsp">
+<picture><source srcset="form_1442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf s'(0) &amp;=
     \frac{d}{dt}\left. F\left(F^{-1}(\mathbf x_1)
                        + t\left[F^{-1}(\mathbf x_2)
@@ -694,11 +694,11 @@
 \\ &amp;= \nabla_\xi F\left(F^{-1}(\mathbf x_1)\right)
                    \left[F^{-1}(\mathbf x_2)
                                 -F^{-1}(\mathbf x_1)\right].
-\end{align*}" src="form_1445.png"/></picture>
+\end{align*}" src="form_1442.png"/></picture>
 </p>
 <p> This formula may then have to be slightly modified by considering any periodicity that was assumed in the call to the constructor.</p>
-<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1446.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1447.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
-x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1448.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
+<p>Thus, the computation of tangent vectors also requires the implementation of <em>derivatives</em> <picture><source srcset="form_1443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F(\xi)$" src="form_1443.png"/></picture> of the push-forward mapping. Here, <picture><source srcset="form_1444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^{-1}(\mathbf x_2)-F^{-1}(\mathbf x_1)$" src="form_1444.png"/></picture> is a chartdim-dimensional vector, and <picture><source srcset="form_1445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\xi F\left(F^{-1}(\mathbf
+x_1)\right) = \nabla_\xi F\left(\xi_1\right)$" src="form_1445.png"/></picture> is a spacedim-times-chartdim-dimensional matrix. Consequently, and as desired, the operation results in a spacedim-dimensional vector.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">x1</td><td>The first point that describes the geodesic, and the one at which the "direction" is to be evaluated. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classTransfiniteInterpolationManifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTransfiniteInterpolationManifold.html	2024-03-17 21:57:38.067201095 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTransfiniteInterpolationManifold.html	2024-03-17 21:57:38.075201144 +0000
@@ -220,16 +220,16 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim&gt;<br />
 class TransfiniteInterpolationManifold&lt; dim, spacedim &gt;</div><p>A mapping class that extends curved boundary descriptions into the interior of the computational domain. The outer curved boundary description is assumed to be given by another manifold (e.g. a polar manifold on a circle). The mechanism to extend the boundary information is a so-called transfinite interpolation. The use of this class is discussed extensively in <a class="el" href="step_65.html">step-65</a>.</p>
-<p>The formula for extending such a description in 2d is, for example, described on <a href="https://en.wikipedia.org/wiki/Transfinite_interpolation">Wikipedia</a>. Given a point <picture><source srcset="form_112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v)$" src="form_112.png"/></picture> on the chart, the image of this point in real space is given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1426_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>The formula for extending such a description in 2d is, for example, described on <a href="https://en.wikipedia.org/wiki/Transfinite_interpolation">Wikipedia</a>. Given a point <picture><source srcset="form_205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v)$" src="form_205.png"/></picture> on the chart, the image of this point in real space is given by  </p><p class="formulaDsp">
+<picture><source srcset="form_1461_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 \mathbf S(u,v) &amp;= (1-v)\mathbf c_0(u)+v \mathbf c_1(u) + (1-u)\mathbf c_2(v)
 + u \mathbf c_3(v) \\
 &amp;\quad - \left[(1-u)(1-v) \mathbf x_0 + u(1-v) \mathbf x_1 + (1-u)v \mathbf
 x_2 + uv \mathbf x_3 \right]
-\end{align*}" src="form_1426.png"/></picture>
+\end{align*}" src="form_1461.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_114_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf x_0, \bf x_1, \bf x_2, \bf x_3$" src="form_114.png"/></picture> denote the four bounding vertices bounding the image space and <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf c_0, \bf c_1, \bf c_2, \bf c_3$" src="form_115.png"/></picture> are the four curves describing the lines of the cell. If a curved manifold is attached to any of these lines, the evaluation is done according to <a class="el" href="classManifold.html#href_anchor">Manifold::get_new_point()</a> with the two end points of the line and appropriate weight. In 3d, the generalization of this formula is implemented, creating a weighted sum of the vertices (positive contribution), the lines (negative), and the faces (positive contribution).</p>
-<p>This manifold is usually attached to a coarse mesh and then places new points as a combination of the descriptions on the boundaries, weighted appropriately according to the position of the point in the original chart coordinates <picture><source srcset="form_112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v)$" src="form_112.png"/></picture>. This manifold should be preferred over setting only a curved manifold on the boundary of a mesh in most situations as it yields more uniform mesh distributions as the mesh is refined because it switches from a curved description to a straight description over all children of the initial coarse cell this manifold was attached to. This way, the curved nature of the manifold that is originally contained in one <em>coarse</em> mesh layer will be applied to more than one <em>fine</em> mesh layer once the mesh gets refined. Note that the mechanisms of <a class="el" href="classTransfiniteInterpolationManifold.html">TransfiniteInterpolationManifold</a> are also built into the <a class="el" href="classMappingQ.html">MappingQ</a> class when only a surface of a cell is subject to a curved description, ensuring that even the default case without this manifold gets optimal convergence rates when applying curved boundary descriptions.</p>
+<p> where <picture><source srcset="form_207_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf x_0, \bf x_1, \bf x_2, \bf x_3$" src="form_207.png"/></picture> denote the four bounding vertices bounding the image space and <picture><source srcset="form_208_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf c_0, \bf c_1, \bf c_2, \bf c_3$" src="form_208.png"/></picture> are the four curves describing the lines of the cell. If a curved manifold is attached to any of these lines, the evaluation is done according to <a class="el" href="classManifold.html#href_anchor">Manifold::get_new_point()</a> with the two end points of the line and appropriate weight. In 3d, the generalization of this formula is implemented, creating a weighted sum of the vertices (positive contribution), the lines (negative), and the faces (positive contribution).</p>
+<p>This manifold is usually attached to a coarse mesh and then places new points as a combination of the descriptions on the boundaries, weighted appropriately according to the position of the point in the original chart coordinates <picture><source srcset="form_205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v)$" src="form_205.png"/></picture>. This manifold should be preferred over setting only a curved manifold on the boundary of a mesh in most situations as it yields more uniform mesh distributions as the mesh is refined because it switches from a curved description to a straight description over all children of the initial coarse cell this manifold was attached to. This way, the curved nature of the manifold that is originally contained in one <em>coarse</em> mesh layer will be applied to more than one <em>fine</em> mesh layer once the mesh gets refined. Note that the mechanisms of <a class="el" href="classTransfiniteInterpolationManifold.html">TransfiniteInterpolationManifold</a> are also built into the <a class="el" href="classMappingQ.html">MappingQ</a> class when only a surface of a cell is subject to a curved description, ensuring that even the default case without this manifold gets optimal convergence rates when applying curved boundary descriptions.</p>
 <p>If no curved boundaries surround a coarse cell, this class reduces to a flat manifold description.</p>
 <p>To give an example of using this class, the following code attaches a transfinite manifold to a circle:</p>
 <div class="fragment"><div class="line"><a class="code hl_class" href="classPolarManifold.html">PolarManifold&lt;dim&gt;</a> polar_manifold;</div>
@@ -1142,11 +1142,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a vector that, at <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1389.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1427.png"/></picture>. The geodesic is the shortest line between these two points, where "shortest" is defined via a metric specific to a particular implementation of this class in a derived class. For example, in the case of a <a class="el" href="classFlatManifold.html">FlatManifold</a>, the shortest line between two points is just the straight line, and in this case the tangent vector is just the difference <picture><source srcset="form_1428_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf d=\mathbf
-x_2-\mathbf x_1$" src="form_1428.png"/></picture>. On the other hand, for a manifold that describes a surface embedded in a higher dimensional space (e.g., the surface of a sphere), then the tangent vector is tangential to the surface, and consequently may point in a different direction than the straight line that connects the two points.</p>
-<p>While tangent vectors are often normalized to unit length, the vectors returned by this function are normalized as described in the introduction of this class. Specifically, if <picture><source srcset="form_1386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(t)$" src="form_1386.png"/></picture> traces out the geodesic between the two points where <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1 = \mathbf s(0)$" src="form_1429.png"/></picture> and <picture><source srcset="form_1430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2 = \mathbf s(1)$" src="form_1430.png"/></picture>, then the returned vector must equal <picture><source srcset="form_1431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1431.png"/></picture>. In other words, the norm of the returned vector also encodes, in some sense, the <em>length</em> of the geodesic because a curve <picture><source srcset="form_1386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(t)$" src="form_1386.png"/></picture> must move "faster" if the two points it connects between arguments <picture><source srcset="form_430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=0$" src="form_430.png"/></picture> and <picture><source srcset="form_1395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=1$" src="form_1395.png"/></picture> are farther apart.</p>
-<p>The default implementation of this function approximates <picture><source srcset="form_1432_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0) \approx \frac{\mathbf s(\epsilon)-\mathbf x_1}{\epsilon}$" src="form_1432.png"/></picture> for a small value of <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1433.png"/></picture>, and the evaluation of <picture><source srcset="form_1434_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf
-s(\epsilon)$" src="form_1434.png"/></picture> is done by calling <a class="el" href="#href_anchor">get_new_point()</a>. If possible, derived classes should override this function by an implementation of the exact derivative.</p>
+<p>Return a vector that, at <picture><source srcset="form_1407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1$" src="form_1407.png"/></picture>, is tangential to the geodesic that connects two points <picture><source srcset="form_1429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1,\mathbf x_2$" src="form_1429.png"/></picture>. The geodesic is the shortest line between these two points, where "shortest" is defined via a metric specific to a particular implementation of this class in a derived class. For example, in the case of a <a class="el" href="classFlatManifold.html">FlatManifold</a>, the shortest line between two points is just the straight line, and in this case the tangent vector is just the difference <picture><source srcset="form_1430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf d=\mathbf
+x_2-\mathbf x_1$" src="form_1430.png"/></picture>. On the other hand, for a manifold that describes a surface embedded in a higher dimensional space (e.g., the surface of a sphere), then the tangent vector is tangential to the surface, and consequently may point in a different direction than the straight line that connects the two points.</p>
+<p>While tangent vectors are often normalized to unit length, the vectors returned by this function are normalized as described in the introduction of this class. Specifically, if <picture><source srcset="form_1404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(t)$" src="form_1404.png"/></picture> traces out the geodesic between the two points where <picture><source srcset="form_1431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1 = \mathbf s(0)$" src="form_1431.png"/></picture> and <picture><source srcset="form_1432_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2 = \mathbf s(1)$" src="form_1432.png"/></picture>, then the returned vector must equal <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0)$" src="form_1433.png"/></picture>. In other words, the norm of the returned vector also encodes, in some sense, the <em>length</em> of the geodesic because a curve <picture><source srcset="form_1404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s(t)$" src="form_1404.png"/></picture> must move "faster" if the two points it connects between arguments <picture><source srcset="form_430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=0$" src="form_430.png"/></picture> and <picture><source srcset="form_1413_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=1$" src="form_1413.png"/></picture> are farther apart.</p>
+<p>The default implementation of this function approximates <picture><source srcset="form_1434_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf s'(0) \approx \frac{\mathbf s(\epsilon)-\mathbf x_1}{\epsilon}$" src="form_1434.png"/></picture> for a small value of <picture><source srcset="form_1435_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1435.png"/></picture>, and the evaluation of <picture><source srcset="form_1436_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf
+s(\epsilon)$" src="form_1436.png"/></picture> is done by calling <a class="el" href="#href_anchor">get_new_point()</a>. If possible, derived classes should override this function by an implementation of the exact derivative.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">x1</td><td>The first point that describes the geodesic, and the one at which the "direction" is to be evaluated. </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/classTriaAccessor.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTriaAccessor.html	2024-03-17 21:57:38.155201639 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTriaAccessor.html	2024-03-17 21:57:38.163201687 +0000
@@ -327,7 +327,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> structdim, <a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim&gt;<br />
-class TriaAccessor&lt; structdim, dim, spacedim &gt;</div><p>A class that provides access to objects in a triangulation such as its vertices, sub-objects, children, geometric information, etc. This class represents objects of dimension <code>structdim</code> (i.e. 1 for lines, 2 for quads, 3 for hexes) in a triangulation of dimensionality <code>dim</code> (i.e. 1 for a triangulation of lines, 2 for a triangulation of quads, and 3 for a triangulation of hexes) that is embedded in a space of dimensionality <code>spacedim</code> (for <code>spacedim==dim</code> the triangulation represents a domain in <picture><source srcset="form_1477_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^{dim}$" src="form_1477.png"/></picture>, for <code>spacedim&gt;dim</code> the triangulation is of a manifold embedded in a higher dimensional space).</p>
+class TriaAccessor&lt; structdim, dim, spacedim &gt;</div><p>A class that provides access to objects in a triangulation such as its vertices, sub-objects, children, geometric information, etc. This class represents objects of dimension <code>structdim</code> (i.e. 1 for lines, 2 for quads, 3 for hexes) in a triangulation of dimensionality <code>dim</code> (i.e. 1 for a triangulation of lines, 2 for a triangulation of quads, and 3 for a triangulation of hexes) that is embedded in a space of dimensionality <code>spacedim</code> (for <code>spacedim==dim</code> the triangulation represents a domain in <picture><source srcset="form_1479_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^{dim}$" src="form_1479.png"/></picture>, for <code>spacedim&gt;dim</code> the triangulation is of a manifold embedded in a higher dimensional space).</p>
 <p>There is a specialization of this class for the case where <code>structdim</code> equals zero, i.e., for vertices of a triangulation. </p>
 
 <p class="definition">Definition at line <a class="el" href="tria__accessor_8h_source.html#href_anchor">757</a> of file <a class="el" href="tria__accessor_8h_source.html">tria_accessor.h</a>.</p>
@@ -1716,7 +1716,7 @@
       </table>
 </div><div class="memdoc">
 <p>This function computes a fast approximate transformation from the real to the unit cell by inversion of an affine approximation of the <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-linear function from the reference <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-dimensional cell.</p>
-<p>The affine approximation of the unit to real cell mapping is found by a least squares fit of an affine function to the <picture><source srcset="form_1376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^d$" src="form_1376.png"/></picture> vertices of the present object. For any valid mesh cell whose geometry is not degenerate, this operation results in a unique affine mapping. Thus, this function will return a finite result for all given input points, even in cases where the actual transformation by an actual bi-/trilinear or higher order mapping might be singular. Besides only approximating the mapping from the vertex points, this function also ignores the attached manifold descriptions. The result is only exact in case the transformation from the unit to the real cell is indeed affine, such as in one dimension or for Cartesian and affine (parallelogram) meshes in 2d/3d.</p>
+<p>The affine approximation of the unit to real cell mapping is found by a least squares fit of an affine function to the <picture><source srcset="form_1377_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^d$" src="form_1377.png"/></picture> vertices of the present object. For any valid mesh cell whose geometry is not degenerate, this operation results in a unique affine mapping. Thus, this function will return a finite result for all given input points, even in cases where the actual transformation by an actual bi-/trilinear or higher order mapping might be singular. Besides only approximating the mapping from the vertex points, this function also ignores the attached manifold descriptions. The result is only exact in case the transformation from the unit to the real cell is indeed affine, such as in one dimension or for Cartesian and affine (parallelogram) meshes in 2d/3d.</p>
 <p>For exact transformations to the unit cell, use <a class="el" href="classMapping.html#href_anchor">Mapping::transform_real_to_unit_cell()</a>.</p>
 <dl class="section note"><dt>Note</dt><dd>If dim&lt;spacedim we first project p onto the plane. </dd></dl>
 
@@ -1764,15 +1764,15 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the barycenter (also called centroid) of the object. The barycenter for an object <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> of dimension <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> in <picture><source srcset="form_1479_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1479.png"/></picture> space dimensions is given by the <picture><source srcset="form_1479_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1479.png"/></picture>-dimensional vector <picture><source srcset="form_1480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_K$" src="form_1480.png"/></picture> defined by  </p><p class="formulaDsp">
-<picture><source srcset="form_1481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Return the barycenter (also called centroid) of the object. The barycenter for an object <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> of dimension <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> in <picture><source srcset="form_1480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1480.png"/></picture> space dimensions is given by the <picture><source srcset="form_1480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1480.png"/></picture>-dimensional vector <picture><source srcset="form_1481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_K$" src="form_1481.png"/></picture> defined by  </p><p class="formulaDsp">
+<picture><source srcset="form_1482_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf x_K = \frac{1}{|K|} \int_K \mathbf x \; \textrm{d}x
-\]" src="form_1481.png"/></picture>
+\]" src="form_1482.png"/></picture>
 </p>
 <p> where the measure of the object is given by  </p><p class="formulaDsp">
-<picture><source srcset="form_1482_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1483_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   |K| = \int_K \mathbf 1 \; \textrm{d}x.
-\]" src="form_1482.png"/></picture>
+\]" src="form_1483.png"/></picture>
 </p>
 <p> This function assumes that <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is mapped by a <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-linear function from the reference <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-dimensional cell. Then the integrals above can be pulled back to the reference cell and evaluated exactly (if through lengthy and, compared to the <a class="el" href="data__out__base_8cc.html#href_anchor">center()</a> function, expensive computations). </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classTriaAccessor_3_010_00_011_00_01spacedim_01_4.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTriaAccessor_3_010_00_011_00_01spacedim_01_4.html	2024-03-17 21:57:38.223202058 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTriaAccessor_3_010_00_011_00_01spacedim_01_4.html	2024-03-17 21:57:38.227202083 +0000
@@ -280,7 +280,7 @@
 <tr class="separator:a48c161a434bdc8c7ab8b0a57604c2667"><td class="memSeparator" colspan="2">&#href_anchor"memitem:a34cceffc302e3c23552635478b9fc983" id="r_a34cceffc302e3c23552635478b9fc983"><td class="memItemLeft" align="right" valign="top">static unsigned <a class="el" href="classint.html">int</a>&#href_anchor"memItemRight" valign="bottom"><a class="el" href="#href_anchor">quad_index</a> (const unsigned <a class="el" href="classint.html">int</a> i)</td></tr>
 <tr class="separator:a34cceffc302e3c23552635478b9fc983"><td class="memSeparator" colspan="2">&#href_anchor"details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> spacedim&gt;<br />
-class TriaAccessor&lt; 0, 1, spacedim &gt;</div><p>This class is a specialization of <code><a class="el" href="classTriaAccessor.html">TriaAccessor</a>&lt;structdim, dim, spacedim&gt;</code> for the case that <code>structdim</code> is zero and <code>dim</code> is one. This class represents vertices in a one-dimensional triangulation that is embedded in a space of dimensionality <code>spacedim</code> (for <code>spacedim==dim==1</code> the triangulation represents a domain in <picture><source srcset="form_106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^\text{dim}$" src="form_106.png"/></picture>, for <code>spacedim&gt;dim==1</code> the triangulation is of a manifold embedded in a higher dimensional space).</p>
+class TriaAccessor&lt; 0, 1, spacedim &gt;</div><p>This class is a specialization of <code><a class="el" href="classTriaAccessor.html">TriaAccessor</a>&lt;structdim, dim, spacedim&gt;</code> for the case that <code>structdim</code> is zero and <code>dim</code> is one. This class represents vertices in a one-dimensional triangulation that is embedded in a space of dimensionality <code>spacedim</code> (for <code>spacedim==dim==1</code> the triangulation represents a domain in <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^\text{dim}$" src="form_99.png"/></picture>, for <code>spacedim&gt;dim==1</code> the triangulation is of a manifold embedded in a higher dimensional space).</p>
 <p>The current specialization of the <a class="el" href="classTriaAccessor_3_010_00_01dim_00_01spacedim_01_4.html">TriaAccessor&lt;0,dim,spacedim&gt;</a> class for vertices of a one-dimensional triangulation exists since in the <code>dim</code> == 1 case vertices are also faces. </p>
 
 <p class="definition">Definition at line <a class="el" href="tria__accessor_8h_source.html#href_anchor">2328</a> of file <a class="el" href="tria__accessor_8h_source.html">tria_accessor.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classTriaAccessor_3_010_00_01dim_00_01spacedim_01_4.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTriaAccessor_3_010_00_01dim_00_01spacedim_01_4.html	2024-03-17 21:57:38.275202380 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTriaAccessor_3_010_00_01dim_00_01spacedim_01_4.html	2024-03-17 21:57:38.279202404 +0000
@@ -231,7 +231,7 @@
 <tr class="separator:a714f770282cf78093c2b1637db615e69"><td class="memSeparator" colspan="2">&#href_anchor"memitem:abda88195917e4d56f80eab016f21bde3" id="r_abda88195917e4d56f80eab016f21bde3"><td class="memItemLeft" align="right" valign="top">static unsigned <a class="el" href="classint.html">int</a>&#href_anchor"memItemRight" valign="bottom"><a class="el" href="#href_anchor">quad_index</a> (const unsigned <a class="el" href="classint.html">int</a> i)</td></tr>
 <tr class="separator:abda88195917e4d56f80eab016f21bde3"><td class="memSeparator" colspan="2">&#href_anchor"details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim&gt;<br />
-class TriaAccessor&lt; 0, dim, spacedim &gt;</div><p>This class is a specialization of <code><a class="el" href="classTriaAccessor.html">TriaAccessor</a>&lt;structdim, dim, spacedim&gt;</code> for the case that <code>structdim</code> is zero. This class represents vertices in a triangulation of dimensionality <code>dim</code> (i.e. 1 for a triangulation of lines, 2 for a triangulation of quads, and 3 for a triangulation of hexes) that is embedded in a space of dimensionality <code>spacedim</code> (for <code>spacedim==dim</code> the triangulation represents a domain in <picture><source srcset="form_106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^\text{dim}$" src="form_106.png"/></picture>, for <code>spacedim&gt;dim</code> the triangulation is of a manifold embedded in a higher dimensional space).</p>
+class TriaAccessor&lt; 0, dim, spacedim &gt;</div><p>This class is a specialization of <code><a class="el" href="classTriaAccessor.html">TriaAccessor</a>&lt;structdim, dim, spacedim&gt;</code> for the case that <code>structdim</code> is zero. This class represents vertices in a triangulation of dimensionality <code>dim</code> (i.e. 1 for a triangulation of lines, 2 for a triangulation of quads, and 3 for a triangulation of hexes) that is embedded in a space of dimensionality <code>spacedim</code> (for <code>spacedim==dim</code> the triangulation represents a domain in <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^\text{dim}$" src="form_99.png"/></picture>, for <code>spacedim&gt;dim</code> the triangulation is of a manifold embedded in a higher dimensional space).</p>
 <p>There is a further specialization of this class for the case that <code>dim</code> equals one, i.e., for vertices of a one-dimensional triangulation, since in that case vertices are also faces. </p>
 
 <p class="definition">Definition at line <a class="el" href="tria__accessor_8h_source.html#href_anchor">1910</a> of file <a class="el" href="tria__accessor_8h_source.html">tria_accessor.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classTriangulation.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTriangulation.html	2024-03-17 21:57:38.427203318 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTriangulation.html	2024-03-17 21:57:38.431203342 +0000
@@ -1940,7 +1940,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Refine all cells <code>times</code> times. In other words, in each one of the <code>times</code> iterations, loop over all cells and refine each cell uniformly into <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1304.png"/></picture> children. In practice, this function repeats the following operations <code>times</code> times: call <a class="el" href="#href_anchor">set_all_refine_flags()</a> followed by <a class="el" href="#href_anchor">execute_coarsening_and_refinement()</a>. The end result is that the number of cells increases by a factor of <picture><source srcset="form_1476_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}$" src="form_1476.png"/></picture>.</p>
+<p>Refine all cells <code>times</code> times. In other words, in each one of the <code>times</code> iterations, loop over all cells and refine each cell uniformly into <picture><source srcset="form_1317_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1317.png"/></picture> children. In practice, this function repeats the following operations <code>times</code> times: call <a class="el" href="#href_anchor">set_all_refine_flags()</a> followed by <a class="el" href="#href_anchor">execute_coarsening_and_refinement()</a>. The end result is that the number of cells increases by a factor of <picture><source srcset="form_1477_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}$" src="form_1477.png"/></picture>.</p>
 <p>The <a class="el" href="#href_anchor">execute_coarsening_and_refinement()</a> function called in this loop may throw an exception if it creates cells that are distorted (see its documentation for an explanation). This exception will be propagated through this function if that happens, and you may not get the actual number of refinement steps in that case.</p>
 <dl class="section note"><dt>Note</dt><dd>This function triggers the pre- and post-refinement signals before and after doing each individual refinement cycle (i.e. more than once if <code>times &gt; 1</code>) . See the section on signals in the general documentation of this class. </dd></dl>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1BlockSparseMatrix.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1BlockSparseMatrix.html	2024-03-17 21:57:38.507203812 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1BlockSparseMatrix.html	2024-03-17 21:57:38.511203837 +0000
@@ -999,7 +999,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1598.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. The vector types can be block vectors or non-block vectors (only if the matrix has only one row or column, respectively), and need to define <a class="el" href="classTrilinosWrappers_1_1SparseMatrix.html#href_anchor">TrilinosWrappers::SparseMatrix::vmult</a>. </p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1601.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. The vector types can be block vectors or non-block vectors (only if the matrix has only one row or column, respectively), and need to define <a class="el" href="classTrilinosWrappers_1_1SparseMatrix.html#href_anchor">TrilinosWrappers::SparseMatrix::vmult</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="trilinos__block__sparse__matrix_8h_source.html#href_anchor">444</a> of file <a class="el" href="trilinos__block__sparse__matrix_8h_source.html">trilinos_block_sparse_matrix.h</a>.</p>
 
@@ -1029,7 +1029,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult()</a> but takes the transposed matrix. </p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult()</a> but takes the transposed matrix. </p>
 
 <p class="definition">Definition at line <a class="el" href="trilinos__block__sparse__matrix_8h_source.html#href_anchor">457</a> of file <a class="el" href="trilinos__block__sparse__matrix_8h_source.html">trilinos_block_sparse_matrix.h</a>.</p>
 
@@ -1935,7 +1935,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Adding Matrix-vector multiplication. Add <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M*src$" src="form_1599.png"/></picture> on <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1600.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. </p>
+<p>Adding Matrix-vector multiplication. Add <picture><source srcset="form_1598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M*src$" src="form_1598.png"/></picture> on <picture><source srcset="form_1599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst$" src="form_1599.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. </p>
 
 </div>
 </div>
@@ -2040,7 +2040,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1601.png"/></picture>. </p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1600.png"/></picture>. </p>
 
 </div>
 </div>
@@ -2437,7 +2437,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1598.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix.</p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M*src$" src="form_1601.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix.</p>
 <p>Due to problems with deriving template arguments between the block and non-block versions of the vmult/Tvmult functions, the actual functions are implemented in derived classes, with implementations forwarding the calls to the implementations provided here under a unique name for which template arguments can be derived by the compiler. </p>
 
 </div>
@@ -2545,7 +2545,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult()</a> but takes the transposed matrix.</p>
+<p>Matrix-vector multiplication: let <picture><source srcset="form_1602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dst = M^T*src$" src="form_1602.png"/></picture> with <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> being this matrix. This function does the same as <a class="el" href="#href_anchor">vmult()</a> but takes the transposed matrix.</p>
 <p>Due to problems with deriving template arguments between the block and non-block versions of the vmult/Tvmult functions, the actual functions are implemented in derived classes, with implementations forwarding the calls to the implementations provided here under a unique name for which template arguments can be derived by the compiler. </p>
 
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1MPI_1_1BlockVector.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1MPI_1_1BlockVector.html	2024-03-17 21:57:38.579204257 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1MPI_1_1BlockVector.html	2024-03-17 21:57:38.587204306 +0000
@@ -1690,7 +1690,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the square of the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm. </p>
+<p>Return the square of the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm. </p>
 
 </div>
 </div>
@@ -1742,7 +1742,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm of the vector, i.e. the sum of the absolute values. </p>
+<p>Return the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm of the vector, i.e. the sum of the absolute values. </p>
 
 </div>
 </div>
@@ -1768,7 +1768,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm of the vector, i.e. the square root of the sum of the squares of the elements. </p>
+<p>Return the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm of the vector, i.e. the square root of the sum of the squares of the elements. </p>
 
 </div>
 </div>
@@ -1794,7 +1794,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the maximum absolute value of the elements of this vector, which is the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture>-norm of a vector. </p>
+<p>Return the maximum absolute value of the elements of this vector, which is the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture>-norm of a vector. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1MPI_1_1Vector.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1MPI_1_1Vector.html	2024-03-17 21:57:38.647204677 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1MPI_1_1Vector.html	2024-03-17 21:57:38.655204726 +0000
@@ -1207,8 +1207,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return a pair of indices indicating which elements of this vector are stored locally. The first number is the index of the first element stored, the second the index of the one past the last one that is stored locally. If this is a sequential vector, then the result will be the pair <code>(0,N)</code>, otherwise it will be a pair <code>(i,i+n)</code>, where <code>n=<a class="el" href="#href_anchor">local_size()</a></code> and <code>i</code> is the first element of the vector stored on this processor, corresponding to the half open interval <picture><source srcset="form_1986_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[i,i+n)$" src="form_1986.png"/></picture></p>
-<dl class="section note"><dt>Note</dt><dd>The description above is true most of the time, but not always. In particular, Trilinos vectors need not store contiguous ranges of elements such as <picture><source srcset="form_1986_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[i,i+n)$" src="form_1986.png"/></picture>. Rather, it can store vectors where the elements are distributed in an arbitrary way across all processors and each processor simply stores a particular subset, not necessarily contiguous. In this case, this function clearly makes no sense since it could, at best, return a range that includes all elements that are stored locally. Thus, the function only succeeds if the locally stored range is indeed contiguous. It will trigger an assertion if the local portion of the vector is not contiguous. </dd></dl>
+<p>Return a pair of indices indicating which elements of this vector are stored locally. The first number is the index of the first element stored, the second the index of the one past the last one that is stored locally. If this is a sequential vector, then the result will be the pair <code>(0,N)</code>, otherwise it will be a pair <code>(i,i+n)</code>, where <code>n=<a class="el" href="#href_anchor">local_size()</a></code> and <code>i</code> is the first element of the vector stored on this processor, corresponding to the half open interval <picture><source srcset="form_1962_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[i,i+n)$" src="form_1962.png"/></picture></p>
+<dl class="section note"><dt>Note</dt><dd>The description above is true most of the time, but not always. In particular, Trilinos vectors need not store contiguous ranges of elements such as <picture><source srcset="form_1962_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[i,i+n)$" src="form_1962.png"/></picture>. Rather, it can store vectors where the elements are distributed in an arbitrary way across all processors and each processor simply stores a particular subset, not necessarily contiguous. In this case, this function clearly makes no sense since it could, at best, return a range that includes all elements that are stored locally. Thus, the function only succeeds if the locally stored range is indeed contiguous. It will trigger an assertion if the local portion of the vector is not contiguous. </dd></dl>
 
 </div>
 </div>
@@ -1319,7 +1319,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the square of the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm. </p>
+<p>Return the square of the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm. </p>
 
 </div>
 </div>
@@ -1391,7 +1391,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p><picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm of the vector. The sum of the absolute values. </p>
+<p><picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm of the vector. The sum of the absolute values. </p>
 
 </div>
 </div>
@@ -1409,7 +1409,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p><picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm of the vector. The square root of the sum of the squares of the elements. </p>
+<p><picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm of the vector. The square root of the sum of the squares of the elements. </p>
 
 </div>
 </div>
@@ -1427,7 +1427,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p><picture><source srcset="form_1648_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_p$" src="form_1648.png"/></picture>-norm of the vector. The <em>p</em>th root of the sum of the <em>p</em>th powers of the absolute values of the elements. </p>
+<p><picture><source srcset="form_1651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_p$" src="form_1651.png"/></picture>-norm of the vector. The <em>p</em>th root of the sum of the <em>p</em>th powers of the absolute values of the elements. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1NOXSolver.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1NOXSolver.html	2024-03-17 21:57:38.691204949 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1NOXSolver.html	2024-03-17 21:57:38.699204998 +0000
@@ -368,7 +368,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>A user function that applies the Jacobian <picture><source srcset="form_2681_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_u F(u)$" src="form_2681.png"/></picture> to <code>x</code> and writes the result in <code>y</code>. The Jacobian to be used (i.e., more precisely: the linearization point <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> above) is the one computed when the <code>setup_jacobian</code> function was last called.</p>
+<p>A user function that applies the Jacobian <picture><source srcset="form_2681_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_u F(u)$" src="form_2681.png"/></picture> to <code>x</code> and writes the result in <code>y</code>. The Jacobian to be used (i.e., more precisely: the linearization point <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> above) is the one computed when the <code>setup_jacobian</code> function was last called.</p>
 <dl class="section note"><dt>Note</dt><dd>This function is optional and is used in the case of certain configurations. For instance, this function is required if the polynomial line search (<code>NOX::LineSearch::Polynomial</code>) is chosen, whereas for the full step case (<code>NOX::LineSearch::FullStep</code>) it won't be called.</dd>
 <dd>
 This variable represents a <a class="el" href="DEALGlossary.html#href_anchor">user provided callback</a>. See there for a description of how to deal with errors and other requirements and conventions. NOX can not deal with "recoverable" errors, so if a callback throws an exception of type RecoverableUserCallbackError, then this exception is treated like any other exception. </dd></dl>
@@ -390,7 +390,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>A user function that applies the inverse of the Jacobian <picture><source srcset="form_2682_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\nabla_u F(u)]^{-1}$" src="form_2682.png"/></picture> to <code>y</code> and writes the result in <code>x</code>. The parameter <code>tolerance</code> specifies the error reduction if an iterative solver is used in applying the inverse matrix. The Jacobian to be used (i.e., more precisely: the linearization point <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> above) is the one computed when the <code>setup_jacobian</code> function was last called.</p>
+<p>A user function that applies the inverse of the Jacobian <picture><source srcset="form_2682_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\nabla_u F(u)]^{-1}$" src="form_2682.png"/></picture> to <code>y</code> and writes the result in <code>x</code>. The parameter <code>tolerance</code> specifies the error reduction if an iterative solver is used in applying the inverse matrix. The Jacobian to be used (i.e., more precisely: the linearization point <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> above) is the one computed when the <code>setup_jacobian</code> function was last called.</p>
 <dl class="section note"><dt>Note</dt><dd>This function is optional and is used in the case of certain configurations.</dd>
 <dd>
 This variable represents a <a class="el" href="DEALGlossary.html#href_anchor">user provided callback</a>. See there for a description of how to deal with errors and other requirements and conventions. NOX can not deal with "recoverable" errors, so if a callback throws an exception of type RecoverableUserCallbackError, then this exception is treated like any other exception. </dd></dl>
@@ -412,7 +412,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>A user function that applies the inverse of the Jacobian <picture><source srcset="form_2682_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\nabla_u F(u)]^{-1}$" src="form_2682.png"/></picture> to <code>y</code>, writes the result in <code>x</code> and returns the number of linear iterations the linear solver needed. The parameter <code>tolerance</code> species the error reduction if an iterative solver is used. The Jacobian to be used (i.e., more precisely: the linearization point <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> above) is the one computed when the <code>setup_jacobian</code> function was last called.</p>
+<p>A user function that applies the inverse of the Jacobian <picture><source srcset="form_2682_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\nabla_u F(u)]^{-1}$" src="form_2682.png"/></picture> to <code>y</code>, writes the result in <code>x</code> and returns the number of linear iterations the linear solver needed. The parameter <code>tolerance</code> species the error reduction if an iterative solver is used. The Jacobian to be used (i.e., more precisely: the linearization point <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> above) is the one computed when the <code>setup_jacobian</code> function was last called.</p>
 <dl class="section note"><dt>Note</dt><dd>This function is used if <code>solve_with_jacobian</code> is not provided. Its return value is compared again AdditionalFlags::threshold_n_linear_iterations; if it is larger, the preconditioner will be built before the next linear system is solved. The use of this approach is predicated on the idea that one can keep using a preconditioner built earlier as long as it is a good preconditioner for the matrix currently in use &ndash; where "good" is defined as leading to a number of iterations to solve linear systems less than the threshold given by the current variable.</dd>
 <dd>
 This variable represents a <a class="el" href="DEALGlossary.html#href_anchor">user provided callback</a>. See there for a description of how to deal with errors and other requirements and conventions. NOX can not deal with "recoverable" errors, so if a callback throws an exception of type RecoverableUserCallbackError, then this exception is treated like any other exception. </dd></dl>
/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1SparseMatrix.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1SparseMatrix.html	2024-03-17 21:57:38.771205443 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1SparseMatrix.html	2024-03-17 21:57:38.775205467 +0000
@@ -2097,7 +2097,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the square of the norm of the vector <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> with respect to the norm induced by this matrix, i.e., <picture><source srcset="form_1611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1611.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
+<p>Return the square of the norm of the vector <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> with respect to the norm induced by this matrix, i.e., <picture><source srcset="form_1608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(v,Mv\right)$" src="form_1608.png"/></picture>. This is useful, e.g. in the finite element context, where the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of a function equals the matrix norm with respect to the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> of the vector representing the nodal values of the finite element function.</p>
 <p>Obviously, the matrix needs to be quadratic for this operation.</p>
 <p>The implementation of this function is not as efficient as the one in the <code><a class="el" href="classTrilinosWrappers_1_1SparseMatrix.html">SparseMatrix</a></code> class used in deal.II (i.e. the original one, not the Trilinos wrapper class) since Trilinos doesn't support this operation and needs a temporary vector.</p>
 <p>The vector has to be initialized with the same <a class="el" href="classIndexSet.html">IndexSet</a> the matrix was initialized with.</p>
@@ -2122,7 +2122,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classTrilinosWrappers_1_1MPI_1_1Vector.html">MPI::Vector</a> &amp;</td>          <td class="paramname"><span class="paramname"><em>v</em></span>&#href_anchor"memdoc">
-<p>Compute the matrix scalar product <picture><source srcset="form_1601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1601.png"/></picture>.</p>
+<p>Compute the matrix scalar product <picture><source srcset="form_1600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(u,Mv\right)$" src="form_1600.png"/></picture>.</p>
 <p>The implementation of this function is not as efficient as the one in the <code><a class="el" href="classTrilinosWrappers_1_1SparseMatrix.html">SparseMatrix</a></code> class used in deal.II (i.e. the original one, not the Trilinos wrapper class) since Trilinos doesn't support this operation and needs a temporary vector.</p>
 <p>The vector <code>u</code> has to be initialized with the same <a class="el" href="classIndexSet.html">IndexSet</a> that was used for the row indices of the matrix and the vector <code>v</code> has to be initialized with the same <a class="el" href="classIndexSet.html">IndexSet</a> that was used for the column indices of the matrix.</p>
 <p>In case of a localized <a class="el" href="classVector.html">Vector</a>, this function will only work when running on one processor, since the matrix object is inherently distributed. Otherwise, an exception will be thrown.</p>
@@ -2231,10 +2231,10 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the <em>l</em><sub>1</sub>-norm of the matrix, that is <picture><source srcset="form_1983_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=
+<p>Return the <em>l</em><sub>1</sub>-norm of the matrix, that is <picture><source srcset="form_1959_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_1=
 \max_{\mathrm{all\ columns\ } j} \sum_{\mathrm{all\ rows\ } i}
-|M_{ij}|$" src="form_1983.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e. <picture><source srcset="form_1984_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1 \leq |M|_1
-|v|_1$" src="form_1984.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
+|M_{ij}|$" src="form_1959.png"/></picture>, (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e. <picture><source srcset="form_1960_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_1 \leq |M|_1
+|v|_1$" src="form_1960.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
 
 <p class="definition">Definition at line <a class="el" href="trilinos__sparse__matrix_8cc_source.html#href_anchor">1911</a> of file <a class="el" href="trilinos__sparse__matrix_8cc_source.html">trilinos_sparse_matrix.cc</a>.</p>
 
@@ -2254,8 +2254,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the linfty-norm of the matrix, that is  <picture><source srcset="form_1985_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_\infty=\max_{\mathrm{all\ rows\ } i}\sum_{\mathrm{all\ columns\ }
-j} |M_{ij}|$" src="form_1985.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e. <picture><source srcset="form_1630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_\infty \leq
+<p>Return the linfty-norm of the matrix, that is  <picture><source srcset="form_1961_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|M|_\infty=\max_{\mathrm{all\ rows\ } i}\sum_{\mathrm{all\ columns\ }
+j} |M_{ij}|$" src="form_1961.png"/></picture>, (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e. <picture><source srcset="form_1630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|Mv|_\infty \leq
 |M|_\infty |v|_\infty$" src="form_1630.png"/></picture>. (cf. Haemmerlin-Hoffmann: Numerische Mathematik) </p>
 
 <p class="definition">Definition at line <a class="el" href="trilinos__sparse__matrix_8cc_source.html#href_anchor">1920</a> of file <a class="el" href="trilinos__sparse__matrix_8cc_source.html">trilinos_sparse_matrix.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1SparsityPattern.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1SparsityPattern.html	2024-03-17 21:57:38.843205887 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classTrilinosWrappers_1_1SparsityPattern.html	2024-03-17 21:57:38.839205863 +0000
@@ -454,7 +454,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Generate a sparsity pattern that is completely stored locally, having <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> rows and <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> columns. The resulting matrix will be completely stored locally, too.</p>
+<p>Generate a sparsity pattern that is completely stored locally, having <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> rows and <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> columns. The resulting matrix will be completely stored locally, too.</p>
 <p>It is possible to specify the number of columns entries per row using the optional <code>n_entries_per_row</code> argument. However, this value does not need to be accurate or even given at all, since one does usually not have this kind of information before building the sparsity pattern (the usual case when the function <a class="el" href="group__constraints.html#href_anchor">DoFTools::make_sparsity_pattern()</a> is called). The entries are allocated dynamically in a similar manner as for the deal.II <a class="el" href="classDynamicSparsityPattern.html">DynamicSparsityPattern</a> classes. However, a good estimate will reduce the setup time of the sparsity pattern. </p>
 
 <p class="definition">Definition at line <a class="el" href="trilinos__sparsity__pattern_8cc_source.html#href_anchor">100</a> of file <a class="el" href="trilinos__sparsity__pattern_8cc_source.html">trilinos_sparsity_pattern.cc</a>.</p>
@@ -484,7 +484,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Generate a sparsity pattern that is completely stored locally, having <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> rows and <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> columns. The resulting matrix will be completely stored locally, too.</p>
+<p>Generate a sparsity pattern that is completely stored locally, having <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> rows and <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> columns. The resulting matrix will be completely stored locally, too.</p>
 <p>The vector <code>n_entries_per_row</code> specifies the number of entries in each row (an information usually not available, though). </p>
 
 <p class="definition">Definition at line <a class="el" href="trilinos__sparsity__pattern_8cc_source.html#href_anchor">109</a> of file <a class="el" href="trilinos__sparsity__pattern_8cc_source.html">trilinos_sparsity_pattern.cc</a>.</p>
@@ -756,7 +756,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Initialize a sparsity pattern that is completely stored locally, having <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> rows and <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> columns. The resulting matrix will be completely stored locally.</p>
+<p>Initialize a sparsity pattern that is completely stored locally, having <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> rows and <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> columns. The resulting matrix will be completely stored locally.</p>
 <p>The number of columns entries per row is specified as the maximum number of entries argument. This does not need to be an accurate number since the entries are allocated dynamically in a similar manner as for the deal.II <a class="el" href="classDynamicSparsityPattern.html">DynamicSparsityPattern</a> classes, but a good estimate will reduce the setup time of the sparsity pattern. </p>
 
 <p class="definition">Definition at line <a class="el" href="trilinos__sparsity__pattern_8cc_source.html#href_anchor">214</a> of file <a class="el" href="trilinos__sparsity__pattern_8cc_source.html">trilinos_sparsity_pattern.cc</a>.</p>
@@ -786,7 +786,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Initialize a sparsity pattern that is completely stored locally, having <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> rows and <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> columns. The resulting matrix will be completely stored locally.</p>
+<p>Initialize a sparsity pattern that is completely stored locally, having <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> rows and <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> columns. The resulting matrix will be completely stored locally.</p>
 <p>The vector <code>n_entries_per_row</code> specifies the number of entries in each row. </p>
 
 <p class="definition">Definition at line <a class="el" href="trilinos__sparsity__pattern_8cc_source.html#href_anchor">227</a> of file <a class="el" href="trilinos__sparsity__pattern_8cc_source.html">trilinos_sparsity_pattern.cc</a>.</p>
@@ -1287,7 +1287,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Compute the bandwidth of the matrix represented by this structure. The bandwidth is the maximum of <picture><source srcset="form_1607_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|i-j|$" src="form_1607.png"/></picture> for which the index pair <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> represents a nonzero entry of the matrix. Consequently, the maximum bandwidth a <picture><source srcset="form_1608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n\times m$" src="form_1608.png"/></picture> matrix can have is <picture><source srcset="form_1609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\max\{n-1,m-1\}$" src="form_1609.png"/></picture>. </p>
+<p>Compute the bandwidth of the matrix represented by this structure. The bandwidth is the maximum of <picture><source srcset="form_1613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|i-j|$" src="form_1613.png"/></picture> for which the index pair <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> represents a nonzero entry of the matrix. Consequently, the maximum bandwidth a <picture><source srcset="form_1614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n\times m$" src="form_1614.png"/></picture> matrix can have is <picture><source srcset="form_1615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\max\{n-1,m-1\}$" src="form_1615.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="trilinos__sparsity__pattern_8cc_source.html#href_anchor">896</a> of file <a class="el" href="trilinos__sparsity__pattern_8cc_source.html">trilinos_sparsity_pattern.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classUtilities_1_1MPI_1_1Partitioner.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classUtilities_1_1MPI_1_1Partitioner.html	2024-03-17 21:57:38.899206234 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classUtilities_1_1MPI_1_1Partitioner.html	2024-03-17 21:57:38.903206258 +0000
@@ -316,7 +316,7 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classMPI__Comm.html">MPI_Comm</a></td>          <td class="paramname"><span class="paramname"><em>communicator</em></span>&#href_anchor"memdoc">
 <p>Constructor that takes the number of locally-owned degrees of freedom <code>local_size</code> and the number of ghost degrees of freedom <code>ghost_size</code>.</p>
-<p>The local index range is translated to global indices in an ascending and one-to-one fashion, i.e., the indices of process <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> sit exactly between the indices of the processes <picture><source srcset="form_579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p-1$" src="form_579.png"/></picture> and <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>, respectively.</p>
+<p>The local index range is translated to global indices in an ascending and one-to-one fashion, i.e., the indices of process <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> sit exactly between the indices of the processes <picture><source srcset="form_579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p-1$" src="form_579.png"/></picture> and <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>, respectively.</p>
 <dl class="section note"><dt>Note</dt><dd>Setting the <code>ghost_size</code> variable to an appropriate value provides memory space for the ghost data in a vector's memory allocation as and allows access to it via local_element(). However, the associated global indices must be handled externally in this case. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="partitioner_8cc_source.html#href_anchor">65</a> of file <a class="el" href="partitioner_8cc_source.html">partitioner.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classUtilities_1_1MPI_1_1ProcessGrid.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classUtilities_1_1MPI_1_1ProcessGrid.html	2024-03-17 21:57:38.939206480 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classUtilities_1_1MPI_1_1ProcessGrid.html	2024-03-17 21:57:38.943206505 +0000
@@ -225,7 +225,7 @@
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>column_block_size</em></span>&#href_anchor"memdoc">
 <p>Constructor for a process grid for a given <code>mpi_communicator</code>. In this case the process grid is heuristically chosen based on the dimensions and block-cyclic distribution of a target matrix provided in <code>n_rows_matrix</code>, <code>n_columns_matrix</code>, <code>row_block_size</code> and <code>column_block_size</code>.</p>
-<p>The maximum number of <a class="el" href="namespaceUtilities_1_1MPI.html">MPI</a> cores one can utilize is <picture><source srcset="form_711_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\min\{\frac{M}{MB}\frac{N}{NB}, Np\}$" src="form_711.png"/></picture>, where <picture><source srcset="form_712_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M,N$" src="form_712.png"/></picture> are the matrix dimension and <picture><source srcset="form_713_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB,NB$" src="form_713.png"/></picture> are the block sizes and <picture><source srcset="form_714_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Np$" src="form_714.png"/></picture> is the number of processes in the <code>mpi_communicator</code>. This function then creates a 2d processor grid assuming the ratio between number of process row <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> and columns <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> to be equal the ratio between matrix dimensions <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> and <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture>.</p>
+<p>The maximum number of <a class="el" href="namespaceUtilities_1_1MPI.html">MPI</a> cores one can utilize is <picture><source srcset="form_711_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\min\{\frac{M}{MB}\frac{N}{NB}, Np\}$" src="form_711.png"/></picture>, where <picture><source srcset="form_712_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M,N$" src="form_712.png"/></picture> are the matrix dimension and <picture><source srcset="form_713_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MB,NB$" src="form_713.png"/></picture> are the block sizes and <picture><source srcset="form_714_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Np$" src="form_714.png"/></picture> is the number of processes in the <code>mpi_communicator</code>. This function then creates a 2d processor grid assuming the ratio between number of process row <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> and columns <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> to be equal the ratio between matrix dimensions <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> and <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture>.</p>
 <p>For example, a square matrix <picture><source srcset="form_715_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$640x640$" src="form_715.png"/></picture> with the block size <picture><source srcset="form_716_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$32$" src="form_716.png"/></picture> and the <code>mpi_communicator</code> with 11 cores will result in the <picture><source srcset="form_717_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$3x3$" src="form_717.png"/></picture> process grid. </p>
 
 <p class="definition">Definition at line <a class="el" href="process__grid_8cc_source.html#href_anchor">209</a> of file <a class="el" href="process__grid_8cc_source.html">process_grid.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/classVector.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classVector.html	2024-03-17 21:57:39.003206875 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classVector.html	2024-03-17 21:57:39.011206925 +0000
@@ -1273,7 +1273,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the square of the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm.</p>
+<p>Return the square of the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm.</p>
 <dl class="section note"><dt>Note</dt><dd>If deal.II is configured with threads, this operation will run multi-threaded by splitting the work into smaller chunks (assuming there is enough work to make this worthwhile). The algorithm uses pairwise summation with the same order of summation in every run, which gives fully repeatable results from one run to another. </dd></dl>
 
 </div>
@@ -1315,7 +1315,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p><picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm of the vector. The sum of the absolute values.</p>
+<p><picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm of the vector. The sum of the absolute values.</p>
 <dl class="section note"><dt>Note</dt><dd>If deal.II is configured with threads, this operation will run multi-threaded by splitting the work into smaller chunks (assuming there is enough work to make this worthwhile). The algorithm uses pairwise summation with the same order of summation in every run, which gives fully repeatable results from one run to another. </dd></dl>
 
 </div>
@@ -1336,7 +1336,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p><picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm of the vector. The square root of the sum of the squares of the elements.</p>
+<p><picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm of the vector. The square root of the sum of the squares of the elements.</p>
 <dl class="section note"><dt>Note</dt><dd>If deal.II is configured with threads, this operation will run multi-threaded by splitting the work into smaller chunks (assuming there is enough work to make this worthwhile). The algorithm uses pairwise summation with the same order of summation in every run, which gives fully repeatable results from one run to another. </dd></dl>
 
 </div>
@@ -1357,7 +1357,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p><picture><source srcset="form_1648_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_p$" src="form_1648.png"/></picture>-norm of the vector. The pth root of the sum of the pth powers of the absolute values of the elements.</p>
+<p><picture><source srcset="form_1651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_p$" src="form_1651.png"/></picture>-norm of the vector. The pth root of the sum of the pth powers of the absolute values of the elements.</p>
 <dl class="section note"><dt>Note</dt><dd>If deal.II is configured with threads, this operation will run multi-threaded by splitting the work into smaller chunks (assuming there is enough work to make this worthwhile). The algorithm uses pairwise summation with the same order of summation in every run, which gives fully repeatable results from one run to another. </dd></dl>
 
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/classhp_1_1FECollection.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classhp_1_1FECollection.html	2024-03-17 21:57:39.075207320 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classhp_1_1FECollection.html	2024-03-17 21:57:39.079207346 +0000
@@ -1324,7 +1324,7 @@
       </table>
 </div><div class="memdoc">
 <p>Return a block mask with as many elements as this object has blocks and of which exactly the one component is true that corresponds to the given argument. See <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the scalar referenced by the argument encompasses a complete block. In other words, if, for example, you pass an extractor for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single scalar object you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd>
 <dd>
 This function is the equivalent of <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::component_mask()</a> with the same arguments. It verifies that it gets the same result from every one of the elements that are stored in this <a class="el" href="classhp_1_1FECollection.html">FECollection</a>. If this is not the case, it throws an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
@@ -1420,7 +1420,7 @@
       </table>
 </div><div class="memdoc">
 <p>Given a component mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ), produce a block mask (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> ) that represents the blocks that correspond to the components selected in the input argument. This is essentially a conversion operator from <a class="el" href="classComponentMask.html">ComponentMask</a> to <a class="el" href="classBlockMask.html">BlockMask</a>.</p>
-<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd>
+<dl class="section note"><dt>Note</dt><dd>This function will only succeed if the components referenced by the argument encompasses complete blocks. In other words, if, for example, you pass an component mask for the single <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> velocity and this object represents an <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> object, then the single component you selected is part of a larger block and consequently there is no block mask that would represent it. The function will then produce an exception.</dd>
 <dd>
 This function is the equivalent of <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::component_mask()</a> with the same arguments. It verifies that it gets the same result from every one of the elements that are stored in this <a class="el" href="classhp_1_1FECollection.html">FECollection</a>. If this is not the case, it throws an exception.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
/usr/share/doc/packages/dealii/doxygen/deal.II/classinternal_1_1MappingQImplementation_1_1InverseQuadraticApproximation.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classinternal_1_1MappingQImplementation_1_1InverseQuadraticApproximation.html	2024-03-17 21:57:39.107207519 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classinternal_1_1MappingQImplementation_1_1InverseQuadraticApproximation.html	2024-03-17 21:57:39.115207567 +0000
@@ -166,7 +166,7 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">real_support_points</td><td>The position of the mapping support points in real space, queried by <a class="el" href="classMappingQ.html#href_anchor">MappingQ::compute_mapping_support_points()</a>.</td></tr>
-    <tr><td class="paramname">unit_support_points</td><td>The location of the support points in reference coordinates <picture><source srcset="form_1483_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^d$" src="form_1483.png"/></picture> that map to the mapping support points in real space by a polynomial map. </td></tr>
+    <tr><td class="paramname">unit_support_points</td><td>The location of the support points in reference coordinates <picture><source srcset="form_1318_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 1]^d$" src="form_1318.png"/></picture> that map to the mapping support points in real space by a polynomial map. </td></tr>
   </table>
   </dd>
 </dl>
/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1DistributedTriangulationBase.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1DistributedTriangulationBase.html	2024-03-17 21:57:39.275208556 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1DistributedTriangulationBase.html	2024-03-17 21:57:39.279208580 +0000
@@ -2026,7 +2026,7 @@
 </div><div class="memdoc">
 <p>When vertices have been moved locally, for example using code like </p><div class="fragment"><div class="line">cell-&gt;vertex(0) = new_location;</div>
 </div><!-- fragment --><p> then this function can be used to update the location of vertices between MPI processes.</p>
-<p>All the vertices that have been moved and might be in the ghost layer of a process have to be reported in the <code>vertex_locally_moved</code> argument. This ensures that that part of the information that has to be send between processes is actually sent. Additionally, it is quite important that vertices on the boundary between processes are reported on exactly one process (e.g. the one with the highest id). Otherwise we could expect undesirable results if multiple processes move a vertex differently. A typical strategy is to let processor <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> move those vertices that are adjacent to cells whose owners include processor <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> but no other processor <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> with <picture><source srcset="form_949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j&lt;i$" src="form_949.png"/></picture>; in other words, for vertices at the boundary of a subdomain, the processor with the lowest subdomain id "owns" a vertex.</p>
+<p>All the vertices that have been moved and might be in the ghost layer of a process have to be reported in the <code>vertex_locally_moved</code> argument. This ensures that that part of the information that has to be send between processes is actually sent. Additionally, it is quite important that vertices on the boundary between processes are reported on exactly one process (e.g. the one with the highest id). Otherwise we could expect undesirable results if multiple processes move a vertex differently. A typical strategy is to let processor <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> move those vertices that are adjacent to cells whose owners include processor <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> but no other processor <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> with <picture><source srcset="form_949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j&lt;i$" src="form_949.png"/></picture>; in other words, for vertices at the boundary of a subdomain, the processor with the lowest subdomain id "owns" a vertex.</p>
 <dl class="section note"><dt>Note</dt><dd>It only makes sense to move vertices that are either located on locally owned cells or on cells in the ghost layer. This is because you can be sure that these vertices indeed exist on the finest mesh aggregated over all processors, whereas vertices on artificial cells but not at least in the ghost layer may or may not exist on the globally finest mesh. Consequently, the <code>vertex_locally_moved</code> argument may not contain vertices that aren't at least on ghost cells.</dd>
 <dd>
 This function moves vertices in such a way that on every processor, the vertices of every locally owned and ghost cell is consistent with the corresponding location of these cells on other processors. On the other hand, the locations of artificial cells will in general be wrong since artificial cells may or may not exist on other processors and consequently it is not possible to determine their location in any way. This is not usually a problem since one never does anything on artificial cells. However, it may lead to problems if the mesh with moved vertices is refined in a later step. If that's what you want to do, the right way to do it is to save the offset applied to every vertex, call this function, and before refining or coarsening the mesh apply the opposite offset and call this function again.</dd></dl>
@@ -2426,7 +2426,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Refine all cells <code>times</code> times. In other words, in each one of the <code>times</code> iterations, loop over all cells and refine each cell uniformly into <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1304.png"/></picture> children. In practice, this function repeats the following operations <code>times</code> times: call <a class="el" href="classTriangulation.html#href_anchor">set_all_refine_flags()</a> followed by <a class="el" href="classTriangulation.html#href_anchor">execute_coarsening_and_refinement()</a>. The end result is that the number of cells increases by a factor of <picture><source srcset="form_1476_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}$" src="form_1476.png"/></picture>.</p>
+<p>Refine all cells <code>times</code> times. In other words, in each one of the <code>times</code> iterations, loop over all cells and refine each cell uniformly into <picture><source srcset="form_1317_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1317.png"/></picture> children. In practice, this function repeats the following operations <code>times</code> times: call <a class="el" href="classTriangulation.html#href_anchor">set_all_refine_flags()</a> followed by <a class="el" href="classTriangulation.html#href_anchor">execute_coarsening_and_refinement()</a>. The end result is that the number of cells increases by a factor of <picture><source srcset="form_1477_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}$" src="form_1477.png"/></picture>.</p>
 <p>The <a class="el" href="classTriangulation.html#href_anchor">execute_coarsening_and_refinement()</a> function called in this loop may throw an exception if it creates cells that are distorted (see its documentation for an explanation). This exception will be propagated through this function if that happens, and you may not get the actual number of refinement steps in that case.</p>
 <dl class="section note"><dt>Note</dt><dd>This function triggers the pre- and post-refinement signals before and after doing each individual refinement cycle (i.e. more than once if <code>times &gt; 1</code>) . See the section on signals in the general documentation of this class. </dd></dl>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1TriangulationBase.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1TriangulationBase.html	2024-03-17 21:57:39.435209544 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1TriangulationBase.html	2024-03-17 21:57:39.435209544 +0000
@@ -1586,7 +1586,7 @@
 </div><div class="memdoc">
 <p>When vertices have been moved locally, for example using code like </p><div class="fragment"><div class="line">cell-&gt;vertex(0) = new_location;</div>
 </div><!-- fragment --><p> then this function can be used to update the location of vertices between MPI processes.</p>
-<p>All the vertices that have been moved and might be in the ghost layer of a process have to be reported in the <code>vertex_locally_moved</code> argument. This ensures that that part of the information that has to be send between processes is actually sent. Additionally, it is quite important that vertices on the boundary between processes are reported on exactly one process (e.g. the one with the highest id). Otherwise we could expect undesirable results if multiple processes move a vertex differently. A typical strategy is to let processor <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> move those vertices that are adjacent to cells whose owners include processor <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> but no other processor <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> with <picture><source srcset="form_949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j&lt;i$" src="form_949.png"/></picture>; in other words, for vertices at the boundary of a subdomain, the processor with the lowest subdomain id "owns" a vertex.</p>
+<p>All the vertices that have been moved and might be in the ghost layer of a process have to be reported in the <code>vertex_locally_moved</code> argument. This ensures that that part of the information that has to be send between processes is actually sent. Additionally, it is quite important that vertices on the boundary between processes are reported on exactly one process (e.g. the one with the highest id). Otherwise we could expect undesirable results if multiple processes move a vertex differently. A typical strategy is to let processor <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> move those vertices that are adjacent to cells whose owners include processor <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> but no other processor <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> with <picture><source srcset="form_949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j&lt;i$" src="form_949.png"/></picture>; in other words, for vertices at the boundary of a subdomain, the processor with the lowest subdomain id "owns" a vertex.</p>
 <dl class="section note"><dt>Note</dt><dd>It only makes sense to move vertices that are either located on locally owned cells or on cells in the ghost layer. This is because you can be sure that these vertices indeed exist on the finest mesh aggregated over all processors, whereas vertices on artificial cells but not at least in the ghost layer may or may not exist on the globally finest mesh. Consequently, the <code>vertex_locally_moved</code> argument may not contain vertices that aren't at least on ghost cells.</dd>
 <dd>
 This function moves vertices in such a way that on every processor, the vertices of every locally owned and ghost cell is consistent with the corresponding location of these cells on other processors. On the other hand, the locations of artificial cells will in general be wrong since artificial cells may or may not exist on other processors and consequently it is not possible to determine their location in any way. This is not usually a problem since one never does anything on artificial cells. However, it may lead to problems if the mesh with moved vertices is refined in a later step. If that's what you want to do, the right way to do it is to save the offset applied to every vertex, call this function, and before refining or coarsening the mesh apply the opposite offset and call this function again.</dd></dl>
@@ -2053,7 +2053,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Refine all cells <code>times</code> times. In other words, in each one of the <code>times</code> iterations, loop over all cells and refine each cell uniformly into <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1304.png"/></picture> children. In practice, this function repeats the following operations <code>times</code> times: call <a class="el" href="classTriangulation.html#href_anchor">set_all_refine_flags()</a> followed by <a class="el" href="classTriangulation.html#href_anchor">execute_coarsening_and_refinement()</a>. The end result is that the number of cells increases by a factor of <picture><source srcset="form_1476_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}$" src="form_1476.png"/></picture>.</p>
+<p>Refine all cells <code>times</code> times. In other words, in each one of the <code>times</code> iterations, loop over all cells and refine each cell uniformly into <picture><source srcset="form_1317_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1317.png"/></picture> children. In practice, this function repeats the following operations <code>times</code> times: call <a class="el" href="classTriangulation.html#href_anchor">set_all_refine_flags()</a> followed by <a class="el" href="classTriangulation.html#href_anchor">execute_coarsening_and_refinement()</a>. The end result is that the number of cells increases by a factor of <picture><source srcset="form_1477_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}$" src="form_1477.png"/></picture>.</p>
 <p>The <a class="el" href="classTriangulation.html#href_anchor">execute_coarsening_and_refinement()</a> function called in this loop may throw an exception if it creates cells that are distorted (see its documentation for an explanation). This exception will be propagated through this function if that happens, and you may not get the actual number of refinement steps in that case.</p>
 <dl class="section note"><dt>Note</dt><dd>This function triggers the pre- and post-refinement signals before and after doing each individual refinement cycle (i.e. more than once if <code>times &gt; 1</code>) . See the section on signals in the general documentation of this class. </dd></dl>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1distributed_1_1Triangulation.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1distributed_1_1Triangulation.html	2024-03-17 21:57:39.619210680 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1distributed_1_1Triangulation.html	2024-03-17 21:57:39.619210680 +0000
@@ -1945,7 +1945,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return a permutation vector for the order the coarse cells are handed off to p4est. For example the value of the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th element in this vector is the index of the deal.II coarse cell (counting from begin(0)) that corresponds to the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th tree managed by p4est. </p>
+<p>Return a permutation vector for the order the coarse cells are handed off to p4est. For example the value of the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th element in this vector is the index of the deal.II coarse cell (counting from begin(0)) that corresponds to the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th tree managed by p4est. </p>
 
 <p class="definition">Definition at line <a class="el" href="distributed_2tria_8cc_source.html#href_anchor">3609</a> of file <a class="el" href="distributed_2tria_8cc_source.html">tria.cc</a>.</p>
 
@@ -3039,7 +3039,7 @@
 </div><div class="memdoc">
 <p>When vertices have been moved locally, for example using code like </p><div class="fragment"><div class="line">cell-&gt;vertex(0) = new_location;</div>
 </div><!-- fragment --><p> then this function can be used to update the location of vertices between MPI processes.</p>
-<p>All the vertices that have been moved and might be in the ghost layer of a process have to be reported in the <code>vertex_locally_moved</code> argument. This ensures that that part of the information that has to be send between processes is actually sent. Additionally, it is quite important that vertices on the boundary between processes are reported on exactly one process (e.g. the one with the highest id). Otherwise we could expect undesirable results if multiple processes move a vertex differently. A typical strategy is to let processor <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> move those vertices that are adjacent to cells whose owners include processor <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> but no other processor <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> with <picture><source srcset="form_949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j&lt;i$" src="form_949.png"/></picture>; in other words, for vertices at the boundary of a subdomain, the processor with the lowest subdomain id "owns" a vertex.</p>
+<p>All the vertices that have been moved and might be in the ghost layer of a process have to be reported in the <code>vertex_locally_moved</code> argument. This ensures that that part of the information that has to be send between processes is actually sent. Additionally, it is quite important that vertices on the boundary between processes are reported on exactly one process (e.g. the one with the highest id). Otherwise we could expect undesirable results if multiple processes move a vertex differently. A typical strategy is to let processor <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> move those vertices that are adjacent to cells whose owners include processor <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> but no other processor <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> with <picture><source srcset="form_949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j&lt;i$" src="form_949.png"/></picture>; in other words, for vertices at the boundary of a subdomain, the processor with the lowest subdomain id "owns" a vertex.</p>
 <dl class="section note"><dt>Note</dt><dd>It only makes sense to move vertices that are either located on locally owned cells or on cells in the ghost layer. This is because you can be sure that these vertices indeed exist on the finest mesh aggregated over all processors, whereas vertices on artificial cells but not at least in the ghost layer may or may not exist on the globally finest mesh. Consequently, the <code>vertex_locally_moved</code> argument may not contain vertices that aren't at least on ghost cells.</dd>
 <dd>
 This function moves vertices in such a way that on every processor, the vertices of every locally owned and ghost cell is consistent with the corresponding location of these cells on other processors. On the other hand, the locations of artificial cells will in general be wrong since artificial cells may or may not exist on other processors and consequently it is not possible to determine their location in any way. This is not usually a problem since one never does anything on artificial cells. However, it may lead to problems if the mesh with moved vertices is refined in a later step. If that's what you want to do, the right way to do it is to save the offset applied to every vertex, call this function, and before refining or coarsening the mesh apply the opposite offset and call this function again.</dd></dl>
@@ -3355,7 +3355,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Refine all cells <code>times</code> times. In other words, in each one of the <code>times</code> iterations, loop over all cells and refine each cell uniformly into <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1304.png"/></picture> children. In practice, this function repeats the following operations <code>times</code> times: call <a class="el" href="classTriangulation.html#href_anchor">set_all_refine_flags()</a> followed by <a class="el" href="#href_anchor">execute_coarsening_and_refinement()</a>. The end result is that the number of cells increases by a factor of <picture><source srcset="form_1476_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}$" src="form_1476.png"/></picture>.</p>
+<p>Refine all cells <code>times</code> times. In other words, in each one of the <code>times</code> iterations, loop over all cells and refine each cell uniformly into <picture><source srcset="form_1317_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1317.png"/></picture> children. In practice, this function repeats the following operations <code>times</code> times: call <a class="el" href="classTriangulation.html#href_anchor">set_all_refine_flags()</a> followed by <a class="el" href="#href_anchor">execute_coarsening_and_refinement()</a>. The end result is that the number of cells increases by a factor of <picture><source srcset="form_1477_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}$" src="form_1477.png"/></picture>.</p>
 <p>The <a class="el" href="#href_anchor">execute_coarsening_and_refinement()</a> function called in this loop may throw an exception if it creates cells that are distorted (see its documentation for an explanation). This exception will be propagated through this function if that happens, and you may not get the actual number of refinement steps in that case.</p>
 <dl class="section note"><dt>Note</dt><dd>This function triggers the pre- and post-refinement signals before and after doing each individual refinement cycle (i.e. more than once if <code>times &gt; 1</code>) . See the section on signals in the general documentation of this class. </dd></dl>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1distributed_1_1Triangulation_3_011_00_01spacedim_01_4.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1distributed_1_1Triangulation_3_011_00_01spacedim_01_4.html	2024-03-17 21:57:39.787211718 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1distributed_1_1Triangulation_3_011_00_01spacedim_01_4.html	2024-03-17 21:57:39.787211718 +0000
@@ -2361,7 +2361,7 @@
 </div><div class="memdoc">
 <p>When vertices have been moved locally, for example using code like </p><div class="fragment"><div class="line">cell-&gt;vertex(0) = new_location;</div>
 </div><!-- fragment --><p> then this function can be used to update the location of vertices between MPI processes.</p>
-<p>All the vertices that have been moved and might be in the ghost layer of a process have to be reported in the <code>vertex_locally_moved</code> argument. This ensures that that part of the information that has to be send between processes is actually sent. Additionally, it is quite important that vertices on the boundary between processes are reported on exactly one process (e.g. the one with the highest id). Otherwise we could expect undesirable results if multiple processes move a vertex differently. A typical strategy is to let processor <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> move those vertices that are adjacent to cells whose owners include processor <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> but no other processor <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> with <picture><source srcset="form_949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j&lt;i$" src="form_949.png"/></picture>; in other words, for vertices at the boundary of a subdomain, the processor with the lowest subdomain id "owns" a vertex.</p>
+<p>All the vertices that have been moved and might be in the ghost layer of a process have to be reported in the <code>vertex_locally_moved</code> argument. This ensures that that part of the information that has to be send between processes is actually sent. Additionally, it is quite important that vertices on the boundary between processes are reported on exactly one process (e.g. the one with the highest id). Otherwise we could expect undesirable results if multiple processes move a vertex differently. A typical strategy is to let processor <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> move those vertices that are adjacent to cells whose owners include processor <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> but no other processor <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> with <picture><source srcset="form_949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j&lt;i$" src="form_949.png"/></picture>; in other words, for vertices at the boundary of a subdomain, the processor with the lowest subdomain id "owns" a vertex.</p>
 <dl class="section note"><dt>Note</dt><dd>It only makes sense to move vertices that are either located on locally owned cells or on cells in the ghost layer. This is because you can be sure that these vertices indeed exist on the finest mesh aggregated over all processors, whereas vertices on artificial cells but not at least in the ghost layer may or may not exist on the globally finest mesh. Consequently, the <code>vertex_locally_moved</code> argument may not contain vertices that aren't at least on ghost cells.</dd>
 <dd>
 This function moves vertices in such a way that on every processor, the vertices of every locally owned and ghost cell is consistent with the corresponding location of these cells on other processors. On the other hand, the locations of artificial cells will in general be wrong since artificial cells may or may not exist on other processors and consequently it is not possible to determine their location in any way. This is not usually a problem since one never does anything on artificial cells. However, it may lead to problems if the mesh with moved vertices is refined in a later step. If that's what you want to do, the right way to do it is to save the offset applied to every vertex, call this function, and before refining or coarsening the mesh apply the opposite offset and call this function again.</dd></dl>
@@ -2760,7 +2760,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Refine all cells <code>times</code> times. In other words, in each one of the <code>times</code> iterations, loop over all cells and refine each cell uniformly into <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1304.png"/></picture> children. In practice, this function repeats the following operations <code>times</code> times: call <a class="el" href="classTriangulation.html#href_anchor">set_all_refine_flags()</a> followed by <a class="el" href="classTriangulation.html#href_anchor">execute_coarsening_and_refinement()</a>. The end result is that the number of cells increases by a factor of <picture><source srcset="form_1476_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}$" src="form_1476.png"/></picture>.</p>
+<p>Refine all cells <code>times</code> times. In other words, in each one of the <code>times</code> iterations, loop over all cells and refine each cell uniformly into <picture><source srcset="form_1317_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1317.png"/></picture> children. In practice, this function repeats the following operations <code>times</code> times: call <a class="el" href="classTriangulation.html#href_anchor">set_all_refine_flags()</a> followed by <a class="el" href="classTriangulation.html#href_anchor">execute_coarsening_and_refinement()</a>. The end result is that the number of cells increases by a factor of <picture><source srcset="form_1477_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}$" src="form_1477.png"/></picture>.</p>
 <p>The <a class="el" href="classTriangulation.html#href_anchor">execute_coarsening_and_refinement()</a> function called in this loop may throw an exception if it creates cells that are distorted (see its documentation for an explanation). This exception will be propagated through this function if that happens, and you may not get the actual number of refinement steps in that case.</p>
 <dl class="section note"><dt>Note</dt><dd>This function triggers the pre- and post-refinement signals before and after doing each individual refinement cycle (i.e. more than once if <code>times &gt; 1</code>) . See the section on signals in the general documentation of this class. </dd></dl>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1fullydistributed_1_1Triangulation.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1fullydistributed_1_1Triangulation.html	2024-03-17 21:57:39.951212731 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1fullydistributed_1_1Triangulation.html	2024-03-17 21:57:39.955212755 +0000
@@ -2529,7 +2529,7 @@
 </div><div class="memdoc">
 <p>When vertices have been moved locally, for example using code like </p><div class="fragment"><div class="line">cell-&gt;vertex(0) = new_location;</div>
 </div><!-- fragment --><p> then this function can be used to update the location of vertices between MPI processes.</p>
-<p>All the vertices that have been moved and might be in the ghost layer of a process have to be reported in the <code>vertex_locally_moved</code> argument. This ensures that that part of the information that has to be send between processes is actually sent. Additionally, it is quite important that vertices on the boundary between processes are reported on exactly one process (e.g. the one with the highest id). Otherwise we could expect undesirable results if multiple processes move a vertex differently. A typical strategy is to let processor <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> move those vertices that are adjacent to cells whose owners include processor <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> but no other processor <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> with <picture><source srcset="form_949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j&lt;i$" src="form_949.png"/></picture>; in other words, for vertices at the boundary of a subdomain, the processor with the lowest subdomain id "owns" a vertex.</p>
+<p>All the vertices that have been moved and might be in the ghost layer of a process have to be reported in the <code>vertex_locally_moved</code> argument. This ensures that that part of the information that has to be send between processes is actually sent. Additionally, it is quite important that vertices on the boundary between processes are reported on exactly one process (e.g. the one with the highest id). Otherwise we could expect undesirable results if multiple processes move a vertex differently. A typical strategy is to let processor <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> move those vertices that are adjacent to cells whose owners include processor <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> but no other processor <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> with <picture><source srcset="form_949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j&lt;i$" src="form_949.png"/></picture>; in other words, for vertices at the boundary of a subdomain, the processor with the lowest subdomain id "owns" a vertex.</p>
 <dl class="section note"><dt>Note</dt><dd>It only makes sense to move vertices that are either located on locally owned cells or on cells in the ghost layer. This is because you can be sure that these vertices indeed exist on the finest mesh aggregated over all processors, whereas vertices on artificial cells but not at least in the ghost layer may or may not exist on the globally finest mesh. Consequently, the <code>vertex_locally_moved</code> argument may not contain vertices that aren't at least on ghost cells.</dd>
 <dd>
 This function moves vertices in such a way that on every processor, the vertices of every locally owned and ghost cell is consistent with the corresponding location of these cells on other processors. On the other hand, the locations of artificial cells will in general be wrong since artificial cells may or may not exist on other processors and consequently it is not possible to determine their location in any way. This is not usually a problem since one never does anything on artificial cells. However, it may lead to problems if the mesh with moved vertices is refined in a later step. If that's what you want to do, the right way to do it is to save the offset applied to every vertex, call this function, and before refining or coarsening the mesh apply the opposite offset and call this function again.</dd></dl>
@@ -2857,7 +2857,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Refine all cells <code>times</code> times. In other words, in each one of the <code>times</code> iterations, loop over all cells and refine each cell uniformly into <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1304.png"/></picture> children. In practice, this function repeats the following operations <code>times</code> times: call <a class="el" href="classTriangulation.html#href_anchor">set_all_refine_flags()</a> followed by <a class="el" href="#href_anchor">execute_coarsening_and_refinement()</a>. The end result is that the number of cells increases by a factor of <picture><source srcset="form_1476_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}$" src="form_1476.png"/></picture>.</p>
+<p>Refine all cells <code>times</code> times. In other words, in each one of the <code>times</code> iterations, loop over all cells and refine each cell uniformly into <picture><source srcset="form_1317_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1317.png"/></picture> children. In practice, this function repeats the following operations <code>times</code> times: call <a class="el" href="classTriangulation.html#href_anchor">set_all_refine_flags()</a> followed by <a class="el" href="#href_anchor">execute_coarsening_and_refinement()</a>. The end result is that the number of cells increases by a factor of <picture><source srcset="form_1477_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}$" src="form_1477.png"/></picture>.</p>
 <p>The <a class="el" href="#href_anchor">execute_coarsening_and_refinement()</a> function called in this loop may throw an exception if it creates cells that are distorted (see its documentation for an explanation). This exception will be propagated through this function if that happens, and you may not get the actual number of refinement steps in that case.</p>
 <dl class="section note"><dt>Note</dt><dd>This function triggers the pre- and post-refinement signals before and after doing each individual refinement cycle (i.e. more than once if <code>times &gt; 1</code>) . See the section on signals in the general documentation of this class. </dd></dl>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1shared_1_1Triangulation.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1shared_1_1Triangulation.html	2024-03-17 21:57:40.115213744 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/classparallel_1_1shared_1_1Triangulation.html	2024-03-17 21:57:40.123213793 +0000
@@ -2029,7 +2029,7 @@
 </div><div class="memdoc">
 <p>When vertices have been moved locally, for example using code like </p><div class="fragment"><div class="line">cell-&gt;vertex(0) = new_location;</div>
 </div><!-- fragment --><p> then this function can be used to update the location of vertices between MPI processes.</p>
-<p>All the vertices that have been moved and might be in the ghost layer of a process have to be reported in the <code>vertex_locally_moved</code> argument. This ensures that that part of the information that has to be send between processes is actually sent. Additionally, it is quite important that vertices on the boundary between processes are reported on exactly one process (e.g. the one with the highest id). Otherwise we could expect undesirable results if multiple processes move a vertex differently. A typical strategy is to let processor <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> move those vertices that are adjacent to cells whose owners include processor <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> but no other processor <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> with <picture><source srcset="form_949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j&lt;i$" src="form_949.png"/></picture>; in other words, for vertices at the boundary of a subdomain, the processor with the lowest subdomain id "owns" a vertex.</p>
+<p>All the vertices that have been moved and might be in the ghost layer of a process have to be reported in the <code>vertex_locally_moved</code> argument. This ensures that that part of the information that has to be send between processes is actually sent. Additionally, it is quite important that vertices on the boundary between processes are reported on exactly one process (e.g. the one with the highest id). Otherwise we could expect undesirable results if multiple processes move a vertex differently. A typical strategy is to let processor <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> move those vertices that are adjacent to cells whose owners include processor <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> but no other processor <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> with <picture><source srcset="form_949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j&lt;i$" src="form_949.png"/></picture>; in other words, for vertices at the boundary of a subdomain, the processor with the lowest subdomain id "owns" a vertex.</p>
 <dl class="section note"><dt>Note</dt><dd>It only makes sense to move vertices that are either located on locally owned cells or on cells in the ghost layer. This is because you can be sure that these vertices indeed exist on the finest mesh aggregated over all processors, whereas vertices on artificial cells but not at least in the ghost layer may or may not exist on the globally finest mesh. Consequently, the <code>vertex_locally_moved</code> argument may not contain vertices that aren't at least on ghost cells.</dd>
 <dd>
 This function moves vertices in such a way that on every processor, the vertices of every locally owned and ghost cell is consistent with the corresponding location of these cells on other processors. On the other hand, the locations of artificial cells will in general be wrong since artificial cells may or may not exist on other processors and consequently it is not possible to determine their location in any way. This is not usually a problem since one never does anything on artificial cells. However, it may lead to problems if the mesh with moved vertices is refined in a later step. If that's what you want to do, the right way to do it is to save the offset applied to every vertex, call this function, and before refining or coarsening the mesh apply the opposite offset and call this function again.</dd></dl>
@@ -2376,7 +2376,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Refine all cells <code>times</code> times. In other words, in each one of the <code>times</code> iterations, loop over all cells and refine each cell uniformly into <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1304.png"/></picture> children. In practice, this function repeats the following operations <code>times</code> times: call <a class="el" href="classTriangulation.html#href_anchor">set_all_refine_flags()</a> followed by <a class="el" href="#href_anchor">execute_coarsening_and_refinement()</a>. The end result is that the number of cells increases by a factor of <picture><source srcset="form_1476_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}$" src="form_1476.png"/></picture>.</p>
+<p>Refine all cells <code>times</code> times. In other words, in each one of the <code>times</code> iterations, loop over all cells and refine each cell uniformly into <picture><source srcset="form_1317_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1317.png"/></picture> children. In practice, this function repeats the following operations <code>times</code> times: call <a class="el" href="classTriangulation.html#href_anchor">set_all_refine_flags()</a> followed by <a class="el" href="#href_anchor">execute_coarsening_and_refinement()</a>. The end result is that the number of cells increases by a factor of <picture><source srcset="form_1477_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2^\text{dim})^\text{times}=2^{\text{dim} \times \text{times}}$" src="form_1477.png"/></picture>.</p>
 <p>The <a class="el" href="#href_anchor">execute_coarsening_and_refinement()</a> function called in this loop may throw an exception if it creates cells that are distorted (see its documentation for an explanation). This exception will be propagated through this function if that happens, and you may not get the actual number of refinement steps in that case.</p>
 <dl class="section note"><dt>Note</dt><dd>This function triggers the pre- and post-refinement signals before and after doing each individual refinement cycle (i.e. more than once if <code>times &gt; 1</code>) . See the section on signals in the general documentation of this class. </dd></dl>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/deprecated.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/deprecated.html	2024-03-17 21:57:40.167214065 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/deprecated.html	2024-03-17 21:57:40.171214090 +0000
@@ -105,34 +105,34 @@
 <dd><a class="anchor" id="_deprecated000041"></a>Use <a class="el" href="namespacenumbers.html#href_anchor">numbers::invalid_fe_index</a> instead.  </dd>
 <dt>Member <a class="el" href="classDoFHandler.html#href_anchor">DoFHandler&lt; dim, spacedim &gt;::set_active_fe_indices</a>  (const std::vector&lt; unsigned int &gt; &amp;active_fe_indices)</dt>
 <dd><a class="anchor" id="_deprecated000044"></a>Use <a class="el" href="classDoFHandler.html#href_anchor">set_active_fe_indices()</a> with the <a class="el" href="namespacetypes.html#href_anchor">types::fe_index</a> datatype.  </dd>
-<dt>Member <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::extract_boundary_dofs</a>  (const <a class="el" href="classDoFHandler.html">DoFHandler&lt; dim, spacedim &gt;</a> &amp;dof_handler, const <a class="el" href="classComponentMask.html">ComponentMask</a> &amp;component_mask, <a class="el" href="classIndexSet.html">IndexSet</a> &amp;selected_dofs, const std::set&lt; types::boundary_id &gt; &amp;boundary_ids={})</dt>
-<dd><a class="anchor" id="_deprecated000049"></a>Use the previous function instead.  </dd>
 <dt>Member <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::extract_boundary_dofs</a>  (const <a class="el" href="classDoFHandler.html">DoFHandler&lt; dim, spacedim &gt;</a> &amp;dof_handler, const <a class="el" href="classComponentMask.html">ComponentMask</a> &amp;component_mask, std::vector&lt; bool &gt; &amp;selected_dofs, const std::set&lt; types::boundary_id &gt; &amp;boundary_ids={})</dt>
-<dd><a class="anchor" id="_deprecated000048"></a>This function will not work for <a class="el" href="classDoFHandler.html">DoFHandler</a> objects that are built on a <a class="el" href="classparallel_1_1distributed_1_1Triangulation.html">parallel::distributed::Triangulation</a> object. The reasons is that the output argument <code>selected_dofs</code> has to have a length equal to <em>all</em> global degrees of freedom. Consequently, this does not scale to very large problems, and this is also why the function is deprecated. If you need the functionality of this function for parallel triangulations, then you need to use the other <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::extract_boundary_dofs()</a> function that returns its information via an <a class="el" href="classIndexSet.html">IndexSet</a> object. </dd>
+<dd><a class="anchor" id="_deprecated000046"></a>This function will not work for <a class="el" href="classDoFHandler.html">DoFHandler</a> objects that are built on a <a class="el" href="classparallel_1_1distributed_1_1Triangulation.html">parallel::distributed::Triangulation</a> object. The reasons is that the output argument <code>selected_dofs</code> has to have a length equal to <em>all</em> global degrees of freedom. Consequently, this does not scale to very large problems, and this is also why the function is deprecated. If you need the functionality of this function for parallel triangulations, then you need to use the other <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::extract_boundary_dofs()</a> function that returns its information via an <a class="el" href="classIndexSet.html">IndexSet</a> object. </dd>
+<dt>Member <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::extract_boundary_dofs</a>  (const <a class="el" href="classDoFHandler.html">DoFHandler&lt; dim, spacedim &gt;</a> &amp;dof_handler, const <a class="el" href="classComponentMask.html">ComponentMask</a> &amp;component_mask, <a class="el" href="classIndexSet.html">IndexSet</a> &amp;selected_dofs, const std::set&lt; types::boundary_id &gt; &amp;boundary_ids={})</dt>
+<dd><a class="anchor" id="_deprecated000047"></a>Use the previous function instead.  </dd>
 <dt>Member <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::extract_locally_active_dofs</a>  (const <a class="el" href="classDoFHandler.html">DoFHandler&lt; dim, spacedim &gt;</a> &amp;dof_handler, <a class="el" href="classIndexSet.html">IndexSet</a> &amp;dof_set)</dt>
-<dd><a class="anchor" id="_deprecated000050"></a>Use the previous function instead.  </dd>
+<dd><a class="anchor" id="_deprecated000048"></a>Use the previous function instead.  </dd>
 <dt>Member <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::extract_locally_active_level_dofs</a>  (const <a class="el" href="classDoFHandler.html">DoFHandler&lt; dim, spacedim &gt;</a> &amp;dof_handler, <a class="el" href="classIndexSet.html">IndexSet</a> &amp;dof_set, const unsigned int level)</dt>
-<dd><a class="anchor" id="_deprecated000051"></a>Use the previous function instead.  </dd>
+<dd><a class="anchor" id="_deprecated000049"></a>Use the previous function instead.  </dd>
 <dt>Member <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::extract_locally_relevant_dofs</a>  (const <a class="el" href="classDoFHandler.html">DoFHandler&lt; dim, spacedim &gt;</a> &amp;dof_handler, <a class="el" href="classIndexSet.html">IndexSet</a> &amp;dof_set)</dt>
-<dd><a class="anchor" id="_deprecated000052"></a>Use the previous function instead.  </dd>
+<dd><a class="anchor" id="_deprecated000050"></a>Use the previous function instead.  </dd>
 <dt>Member <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::extract_locally_relevant_level_dofs</a>  (const <a class="el" href="classDoFHandler.html">DoFHandler&lt; dim, spacedim &gt;</a> &amp;dof_handler, const unsigned int level, <a class="el" href="classIndexSet.html">IndexSet</a> &amp;dof_set)</dt>
-<dd><a class="anchor" id="_deprecated000053"></a>Use the previous function instead.  </dd>
+<dd><a class="anchor" id="_deprecated000051"></a>Use the previous function instead.  </dd>
 <dt>Member <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::get_active_fe_indices</a>  (const <a class="el" href="classDoFHandler.html">DoFHandler&lt; dim, spacedim &gt;</a> &amp;dof_handler, std::vector&lt; unsigned int &gt; &amp;active_fe_indices)</dt>
-<dd><a class="anchor" id="_deprecated000054"></a>Use <a class="el" href="classDoFHandler.html#href_anchor">DoFHandler::get_active_fe_indices()</a> that returns the result vector.  </dd>
-<dt>Member <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::map_dofs_to_support_points</a>  (const <a class="el" href="classMapping.html">Mapping&lt; dim, spacedim &gt;</a> &amp;mapping, const <a class="el" href="classDoFHandler.html">DoFHandler&lt; dim, spacedim &gt;</a> &amp;dof_handler, std::map&lt; <a class="el" href="namespacetypes.html#href_anchor">types::global_dof_index</a>, <a class="el" href="classPoint.html">Point&lt; spacedim &gt;</a> &gt; &amp;support_points, const <a class="el" href="classComponentMask.html">ComponentMask</a> &amp;mask=<a class="el" href="classComponentMask.html">ComponentMask()</a>)</dt>
-<dd><a class="anchor" id="_deprecated000055"></a>Use the function that returns the <code>std::map</code> instead.  </dd>
+<dd><a class="anchor" id="_deprecated000052"></a>Use <a class="el" href="classDoFHandler.html#href_anchor">DoFHandler::get_active_fe_indices()</a> that returns the result vector.  </dd>
 <dt>Member <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::map_dofs_to_support_points</a>  (const hp::MappingCollection&lt; dim, spacedim &gt; &amp;mapping, const <a class="el" href="classDoFHandler.html">DoFHandler&lt; dim, spacedim &gt;</a> &amp;dof_handler, std::map&lt; <a class="el" href="namespacetypes.html#href_anchor">types::global_dof_index</a>, <a class="el" href="classPoint.html">Point&lt; spacedim &gt;</a> &gt; &amp;support_points, const <a class="el" href="classComponentMask.html">ComponentMask</a> &amp;mask=<a class="el" href="classComponentMask.html">ComponentMask()</a>)</dt>
-<dd><a class="anchor" id="_deprecated000056"></a>Use the function that returns the <code>std::map</code> instead.  </dd>
-<dt>Member <a class="el" href="classFEEvaluation.html#href_anchor">FEEvaluation&lt; dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType &gt;::evaluate</a>  (const VectorizedArrayType *values_array, const bool evaluate_values, const bool evaluate_gradients, const bool evaluate_hessians=false)</dt>
-<dd><a class="anchor" id="_deprecated000141"></a>use <a class="el" href="classFEEvaluation.html#href_anchor">evaluate()</a> with the <a class="el" href="namespaceEvaluationFlags.html" title="The namespace for the EvaluationFlags enum.">EvaluationFlags</a> argument.  </dd>
+<dd><a class="anchor" id="_deprecated000054"></a>Use the function that returns the <code>std::map</code> instead.  </dd>
+<dt>Member <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::map_dofs_to_support_points</a>  (const <a class="el" href="classMapping.html">Mapping&lt; dim, spacedim &gt;</a> &amp;mapping, const <a class="el" href="classDoFHandler.html">DoFHandler&lt; dim, spacedim &gt;</a> &amp;dof_handler, std::map&lt; <a class="el" href="namespacetypes.html#href_anchor">types::global_dof_index</a>, <a class="el" href="classPoint.html">Point&lt; spacedim &gt;</a> &gt; &amp;support_points, const <a class="el" href="classComponentMask.html">ComponentMask</a> &amp;mask=<a class="el" href="classComponentMask.html">ComponentMask()</a>)</dt>
+<dd><a class="anchor" id="_deprecated000053"></a>Use the function that returns the <code>std::map</code> instead.  </dd>
 <dt>Member <a class="el" href="classFEEvaluation.html#href_anchor">FEEvaluation&lt; dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType &gt;::evaluate</a>  (const bool evaluate_values, const bool evaluate_gradients, const bool evaluate_hessians=false)</dt>
 <dd><a class="anchor" id="_deprecated000140"></a>use <a class="el" href="classFEEvaluation.html#href_anchor">evaluate()</a> with the <a class="el" href="namespaceEvaluationFlags.html" title="The namespace for the EvaluationFlags enum.">EvaluationFlags</a> argument.  </dd>
+<dt>Member <a class="el" href="classFEEvaluation.html#href_anchor">FEEvaluation&lt; dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType &gt;::evaluate</a>  (const VectorizedArrayType *values_array, const bool evaluate_values, const bool evaluate_gradients, const bool evaluate_hessians=false)</dt>
+<dd><a class="anchor" id="_deprecated000141"></a>use <a class="el" href="classFEEvaluation.html#href_anchor">evaluate()</a> with the <a class="el" href="namespaceEvaluationFlags.html" title="The namespace for the EvaluationFlags enum.">EvaluationFlags</a> argument.  </dd>
 <dt>Member <a class="el" href="classFEEvaluation.html#href_anchor">FEEvaluation&lt; dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType &gt;::gather_evaluate</a>  (const VectorType &amp;input_vector, const bool evaluate_values, const bool evaluate_gradients, const bool evaluate_hessians=false)</dt>
 <dd><a class="anchor" id="_deprecated000142"></a>Please use the <a class="el" href="classFEEvaluation.html#href_anchor">gather_evaluate()</a> function with the <a class="el" href="namespaceEvaluationFlags.html" title="The namespace for the EvaluationFlags enum.">EvaluationFlags</a> argument.  </dd>
-<dt>Member <a class="el" href="classFEEvaluation.html#href_anchor">FEEvaluation&lt; dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType &gt;::integrate</a>  (const bool integrate_values, const bool integrate_gradients, VectorizedArrayType *values_array)</dt>
-<dd><a class="anchor" id="_deprecated000144"></a>Please use the <a class="el" href="classFEEvaluation.html#href_anchor">integrate()</a> function with the <a class="el" href="namespaceEvaluationFlags.html" title="The namespace for the EvaluationFlags enum.">EvaluationFlags</a> argument.  </dd>
 <dt>Member <a class="el" href="classFEEvaluation.html#href_anchor">FEEvaluation&lt; dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType &gt;::integrate</a>  (const bool integrate_values, const bool integrate_gradients)</dt>
 <dd><a class="anchor" id="_deprecated000143"></a>Please use the <a class="el" href="classFEEvaluation.html#href_anchor">integrate()</a> function with the <a class="el" href="namespaceEvaluationFlags.html" title="The namespace for the EvaluationFlags enum.">EvaluationFlags</a> argument.  </dd>
+<dt>Member <a class="el" href="classFEEvaluation.html#href_anchor">FEEvaluation&lt; dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType &gt;::integrate</a>  (const bool integrate_values, const bool integrate_gradients, VectorizedArrayType *values_array)</dt>
+<dd><a class="anchor" id="_deprecated000144"></a>Please use the <a class="el" href="classFEEvaluation.html#href_anchor">integrate()</a> function with the <a class="el" href="namespaceEvaluationFlags.html" title="The namespace for the EvaluationFlags enum.">EvaluationFlags</a> argument.  </dd>
 <dt>Member <a class="el" href="classFEEvaluation.html#href_anchor">FEEvaluation&lt; dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType &gt;::integrate_scatter</a>  (const bool integrate_values, const bool integrate_gradients, VectorType &amp;output_vector)</dt>
 <dd><a class="anchor" id="_deprecated000145"></a>Please use the <a class="el" href="classFEEvaluation.html#href_anchor">integrate_scatter()</a> function with the <a class="el" href="namespaceEvaluationFlags.html" title="The namespace for the EvaluationFlags enum.">EvaluationFlags</a> argument.  </dd>
 <dt>Member <a class="el" href="classFEFaceEvaluation.html#href_anchor">FEFaceEvaluation&lt; dim, fe_degree, n_q_points_1d, n_components_, Number, VectorizedArrayType &gt;::evaluate</a>  (const bool evaluate_values, const bool evaluate_gradients)</dt>
@@ -192,17 +192,17 @@
 <dt>Member <a class="el" href="classFEInterfaceViews_1_1Vector.html#href_anchor">FEInterfaceViews::Vector&lt; dim, spacedim &gt;::jump_hessian</a>  (const unsigned int interface_dof_index, const unsigned int q_point) const</dt>
 <dd><a class="anchor" id="_deprecated000067"></a>Use the <a class="el" href="classFEInterfaceViews_1_1Vector.html#href_anchor">average_of_hessians()</a> function instead.  </dd>
 <dt>Struct <a class="el" href="structFEValuesViews_1_1Scalar_1_1OutputType.html">FEValuesViews::Scalar&lt; dim, spacedim &gt;::OutputType&lt; Number &gt;</a>  </dt>
-<dd><a class="anchor" id="_deprecated000081"></a>Use the types defined in the surrounding class instead.  </dd>
+<dd><a class="anchor" id="_deprecated000079"></a>Use the types defined in the surrounding class instead.  </dd>
 <dt>Struct <a class="el" href="structFEValuesViews_1_1SymmetricTensor_3_012_00_01dim_00_01spacedim_01_4_1_1OutputType.html">FEValuesViews::SymmetricTensor&lt; 2, dim, spacedim &gt;::OutputType&lt; Number &gt;</a>  </dt>
-<dd><a class="anchor" id="_deprecated000083"></a>Use the types defined in the surrounding class instead.  </dd>
+<dd><a class="anchor" id="_deprecated000081"></a>Use the types defined in the surrounding class instead.  </dd>
 <dt>Struct <a class="el" href="structFEValuesViews_1_1Tensor_3_012_00_01dim_00_01spacedim_01_4_1_1OutputType.html">FEValuesViews::Tensor&lt; 2, dim, spacedim &gt;::OutputType&lt; Number &gt;</a>  </dt>
-<dd><a class="anchor" id="_deprecated000084"></a>Use the types defined in the surrounding class instead.  </dd>
-<dt>Struct <a class="el" href="structFEValuesViews_1_1Vector_1_1OutputType.html">FEValuesViews::Vector&lt; dim, spacedim &gt;::OutputType&lt; Number &gt;</a>  </dt>
 <dd><a class="anchor" id="_deprecated000082"></a>Use the types defined in the surrounding class instead.  </dd>
+<dt>Struct <a class="el" href="structFEValuesViews_1_1Vector_1_1OutputType.html">FEValuesViews::Vector&lt; dim, spacedim &gt;::OutputType&lt; Number &gt;</a>  </dt>
+<dd><a class="anchor" id="_deprecated000080"></a>Use the types defined in the surrounding class instead.  </dd>
 <dt>Member <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement&lt; dim, spacedim &gt;::fill_fe_face_values</a>  (const typename <a class="el" href="group__Iterators.html#href_anchor">Triangulation&lt; dim, spacedim &gt;::cell_iterator</a> &amp;cell, const unsigned int face_no, const <a class="el" href="classQuadrature.html">Quadrature</a>&lt; dim - 1 &gt; &amp;quadrature, const <a class="el" href="classMapping.html">Mapping&lt; dim, spacedim &gt;</a> &amp;mapping, const typename Mapping&lt; dim, spacedim &gt;::InternalDataBase &amp;mapping_internal, const internal::FEValuesImplementation::MappingRelatedData&lt; dim, spacedim &gt; &amp;mapping_data, const <a class="el" href="classFiniteElement_1_1InternalDataBase.html">InternalDataBase</a> &amp;fe_internal, internal::FEValuesImplementation::FiniteElementRelatedData&lt; dim, spacedim &gt; &amp;output_data) const</dt>
-<dd><a class="anchor" id="_deprecated000047"></a>Use the version taking a <a class="el" href="classhp_1_1QCollection.html">hp::QCollection</a> argument.  </dd>
+<dd><a class="anchor" id="_deprecated000056"></a>Use the version taking a <a class="el" href="classhp_1_1QCollection.html">hp::QCollection</a> argument.  </dd>
 <dt>Member <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement&lt; dim, spacedim &gt;::get_face_data</a>  (const UpdateFlags update_flags, const <a class="el" href="classMapping.html">Mapping&lt; dim, spacedim &gt;</a> &amp;mapping, const <a class="el" href="classQuadrature.html">Quadrature</a>&lt; dim - 1 &gt; &amp;quadrature, internal::FEValuesImplementation::FiniteElementRelatedData&lt; dim, spacedim &gt; &amp;output_data) const</dt>
-<dd><a class="anchor" id="_deprecated000046"></a>Use the version taking a <a class="el" href="classhp_1_1QCollection.html">hp::QCollection</a> argument.  </dd>
+<dd><a class="anchor" id="_deprecated000055"></a>Use the version taking a <a class="el" href="classhp_1_1QCollection.html">hp::QCollection</a> argument.  </dd>
 <dt>Class <a class="el" href="classGridReordering.html">GridReordering&lt; dim, spacedim &gt;</a>  </dt>
 <dd><a class="anchor" id="_deprecated000086"></a>Use <a class="el" href="namespaceGridTools.html#href_anchor">GridTools::invert_all_negative_measure_cells()</a> or <a class="el" href="namespaceGridTools.html#href_anchor">GridTools::consistently_order_cells()</a> instead of the functions provided by this class. Usage of the old-style numbering is deprecated.  </dd>
 <dt>Member <a class="el" href="classGridReordering.html#href_anchor">GridReordering&lt; dim, spacedim &gt;::invert_all_cells_of_negative_grid</a>  (const std::vector&lt; <a class="el" href="classPoint.html">Point&lt; spacedim &gt;</a> &gt; &amp;all_vertices, std::vector&lt; CellData&lt; dim &gt; &gt; &amp;original_cells, const bool use_new_style_ordering=false)</dt>
@@ -210,11 +210,11 @@
 <dt>Member <a class="el" href="classGridReordering.html#href_anchor">GridReordering&lt; dim, spacedim &gt;::reorder_cells</a>  (std::vector&lt; CellData&lt; dim &gt; &gt; &amp;original_cells, const bool use_new_style_ordering=false)</dt>
 <dd><a class="anchor" id="_deprecated000087"></a>Use <a class="el" href="namespaceGridTools.html#href_anchor">GridTools::consistently_order_cells()</a> instead.  </dd>
 <dt>Member <a class="el" href="namespaceGridTools.html#href_anchor">GridTools::cell_measure</a>  (const std::vector&lt; Point&lt; dim &gt; &gt; &amp;all_vertices, const unsigned int(&amp;vertex_indices)[<a class="el" href="structGeometryInfo.html#href_anchor">GeometryInfo&lt; dim &gt;::vertices_per_cell</a>])</dt>
-<dd><a class="anchor" id="_deprecated000091"></a>Use the more general function which takes an <a class="el" href="classArrayView.html">ArrayView</a> instead.  </dd>
+<dd><a class="anchor" id="_deprecated000089"></a>Use the more general function which takes an <a class="el" href="classArrayView.html">ArrayView</a> instead.  </dd>
 <dt>Struct <a class="el" href="structGridTools_1_1CellDataTransferBuffer.html">GridTools::CellDataTransferBuffer&lt; dim, T &gt;</a>  </dt>
-<dd><a class="anchor" id="_deprecated000093"></a>The implementation in deal.II has been rewritten, making this class obsolete for use within deal.II. Use your own data structures instead.  </dd>
+<dd><a class="anchor" id="_deprecated000091"></a>The implementation in deal.II has been rewritten, making this class obsolete for use within deal.II. Use your own data structures instead.  </dd>
 <dt>Member <a class="el" href="namespaceGridTools.html#href_anchor">GridTools::rotate</a>  (const double angle, const unsigned int axis, Triangulation&lt; dim, 3 &gt; &amp;triangulation)</dt>
-<dd><a class="anchor" id="_deprecated000092"></a>Use the alternative with the unit vector instead.  </dd>
+<dd><a class="anchor" id="_deprecated000090"></a>Use the alternative with the unit vector instead.  </dd>
 <dt>Member <a class="el" href="template__constraints_8h.html#href_anchor">identity</a>  </dt>
 <dd><a class="anchor" id="_deprecated000025"></a>Use <code>std_cxx20::identity_type</code> instead.  </dd>
 <dt>Member <a class="el" href="classLinearAlgebra_1_1CUDAWrappers_1_1Vector.html#href_anchor">LinearAlgebra::CUDAWrappers::Vector&lt; Number &gt;::import</a>  (const ReadWriteVector&lt; Number &gt; &amp;V, <a class="el" href="structVectorOperation.html#href_anchor">VectorOperation::values</a> operation, std::shared_ptr&lt; const Utilities::MPI::CommunicationPatternBase &gt; communication_pattern={}) override</dt>
@@ -223,20 +223,20 @@
 <dd><a class="anchor" id="_deprecated000100"></a>Use <a class="el" href="classLinearAlgebra_1_1distributed_1_1BlockVector.html#href_anchor">import_elements()</a> instead.  </dd>
 <dt>Member <a class="el" href="classLinearAlgebra_1_1distributed_1_1BlockVector.html#href_anchor">LinearAlgebra::distributed::BlockVector&lt; Number &gt;::zero_out_ghosts</a>  () const</dt>
 <dd><a class="anchor" id="_deprecated000099"></a>Use <a class="el" href="classLinearAlgebra_1_1distributed_1_1BlockVector.html#href_anchor">zero_out_ghost_values()</a> instead.  </dd>
-<dt>Member <a class="el" href="classLinearAlgebra_1_1distributed_1_1Vector.html#href_anchor">LinearAlgebra::distributed::Vector&lt; Number, MemorySpace &gt;::import</a>  (const Vector&lt; Number, MemorySpace2 &gt; &amp;src, <a class="el" href="structVectorOperation.html#href_anchor">VectorOperation::values</a> operation)</dt>
-<dd><a class="anchor" id="_deprecated000102"></a>Use <a class="el" href="classLinearAlgebra_1_1distributed_1_1Vector.html#href_anchor">import_elements()</a> instead.  </dd>
 <dt>Member <a class="el" href="classLinearAlgebra_1_1distributed_1_1Vector.html#href_anchor">LinearAlgebra::distributed::Vector&lt; Number, MemorySpace &gt;::import</a>  (const LinearAlgebra::ReadWriteVector&lt; Number &gt; &amp;V, <a class="el" href="structVectorOperation.html#href_anchor">VectorOperation::values</a> operation, std::shared_ptr&lt; const Utilities::MPI::CommunicationPatternBase &gt; communication_pattern={}) override</dt>
 <dd><a class="anchor" id="_deprecated000103"></a>Use <a class="el" href="classLinearAlgebra_1_1distributed_1_1Vector.html#href_anchor">import_elements()</a> instead.  </dd>
+<dt>Member <a class="el" href="classLinearAlgebra_1_1distributed_1_1Vector.html#href_anchor">LinearAlgebra::distributed::Vector&lt; Number, MemorySpace &gt;::import</a>  (const Vector&lt; Number, MemorySpace2 &gt; &amp;src, <a class="el" href="structVectorOperation.html#href_anchor">VectorOperation::values</a> operation)</dt>
+<dd><a class="anchor" id="_deprecated000102"></a>Use <a class="el" href="classLinearAlgebra_1_1distributed_1_1Vector.html#href_anchor">import_elements()</a> instead.  </dd>
 <dt>Member <a class="el" href="classLinearAlgebra_1_1distributed_1_1Vector.html#href_anchor">LinearAlgebra::distributed::Vector&lt; Number, MemorySpace &gt;::local_size</a>  () const</dt>
 <dd><a class="anchor" id="_deprecated000104"></a>Use <a class="el" href="classLinearAlgebra_1_1distributed_1_1Vector.html#href_anchor">locally_owned_size()</a> instead.  </dd>
 <dt>Member <a class="el" href="classLinearAlgebra_1_1distributed_1_1Vector.html#href_anchor">LinearAlgebra::distributed::Vector&lt; Number, MemorySpace &gt;::zero_out_ghosts</a>  () const</dt>
 <dd><a class="anchor" id="_deprecated000101"></a>Use <a class="el" href="classLinearAlgebra_1_1distributed_1_1Vector.html#href_anchor">zero_out_ghost_values()</a> instead.  </dd>
 <dt>Member <a class="el" href="classLinearAlgebra_1_1EpetraWrappers_1_1Vector.html#href_anchor">LinearAlgebra::EpetraWrappers::Vector::import</a>  (const ReadWriteVector&lt; double &gt; &amp;V, <a class="el" href="structVectorOperation.html#href_anchor">VectorOperation::values</a> operation, std::shared_ptr&lt; const Utilities::MPI::CommunicationPatternBase &gt; communication_pattern={}) override</dt>
 <dd><a class="anchor" id="_deprecated000135"></a>Use <a class="el" href="classLinearAlgebra_1_1EpetraWrappers_1_1Vector.html#href_anchor">import_elements()</a> instead.  </dd>
-<dt>Member <a class="el" href="classLinearAlgebra_1_1ReadWriteVector.html#href_anchor">LinearAlgebra::ReadWriteVector&lt; Number &gt;::import</a>  (const ::Vector&lt; Number &gt; &amp;V, <a class="el" href="structVectorOperation.html#href_anchor">VectorOperation::values</a> operation, const std::shared_ptr&lt; const Utilities::MPI::CommunicationPatternBase &gt; &amp;communication_pattern={})</dt>
-<dd><a class="anchor" id="_deprecated000124"></a>Use <a class="el" href="classLinearAlgebra_1_1ReadWriteVector.html#href_anchor">import_elements()</a> instead.  </dd>
 <dt>Member <a class="el" href="classLinearAlgebra_1_1ReadWriteVector.html#href_anchor">LinearAlgebra::ReadWriteVector&lt; Number &gt;::import</a>  (const LinearAlgebra::Vector&lt; Number &gt; &amp;V, <a class="el" href="structVectorOperation.html#href_anchor">VectorOperation::values</a> operation, const std::shared_ptr&lt; const Utilities::MPI::CommunicationPatternBase &gt; &amp;communication_pattern={})</dt>
 <dd><a class="anchor" id="_deprecated000125"></a>Use <a class="el" href="classLinearAlgebra_1_1ReadWriteVector.html#href_anchor">import_elements()</a> instead.  </dd>
+<dt>Member <a class="el" href="classLinearAlgebra_1_1ReadWriteVector.html#href_anchor">LinearAlgebra::ReadWriteVector&lt; Number &gt;::import</a>  (const ::Vector&lt; Number &gt; &amp;V, <a class="el" href="structVectorOperation.html#href_anchor">VectorOperation::values</a> operation, const std::shared_ptr&lt; const Utilities::MPI::CommunicationPatternBase &gt; &amp;communication_pattern={})</dt>
+<dd><a class="anchor" id="_deprecated000124"></a>Use <a class="el" href="classLinearAlgebra_1_1ReadWriteVector.html#href_anchor">import_elements()</a> instead.  </dd>
 <dt>Member <a class="el" href="classLinearAlgebra_1_1ReadWriteVector.html#href_anchor">LinearAlgebra::ReadWriteVector&lt; Number &gt;::import</a>  (const distributed::Vector&lt; Number, MemorySpace &gt; &amp;V, <a class="el" href="structVectorOperation.html#href_anchor">VectorOperation::values</a> operation, const std::shared_ptr&lt; const Utilities::MPI::CommunicationPatternBase &gt; &amp;communication_pattern={})</dt>
 <dd><a class="anchor" id="_deprecated000126"></a>Use <a class="el" href="classLinearAlgebra_1_1ReadWriteVector.html#href_anchor">import_elements()</a> instead.  </dd>
 <dt>Member <a class="el" href="classLinearAlgebra_1_1ReadWriteVector.html#href_anchor">LinearAlgebra::ReadWriteVector&lt; Number &gt;::import</a>  (const <a class="el" href="classPETScWrappers_1_1MPI_1_1Vector.html">PETScWrappers::MPI::Vector</a> &amp;V, <a class="el" href="structVectorOperation.html#href_anchor">VectorOperation::values</a> operation, const std::shared_ptr&lt; const Utilities::MPI::CommunicationPatternBase &gt; &amp;communication_pattern={})</dt>
@@ -257,18 +257,18 @@
 <dd><a class="anchor" id="_deprecated000105"></a>Use <a class="el" href="classLinearAlgebra_1_1Vector.html#href_anchor">import_elements()</a> instead.  </dd>
 <dt>Member <a class="el" href="classLinearAlgebra_1_1VectorSpaceVector.html#href_anchor">LinearAlgebra::VectorSpaceVector&lt; Number &gt;::import</a>  (const ReadWriteVector&lt; Number &gt; &amp;V, <a class="el" href="structVectorOperation.html#href_anchor">VectorOperation::values</a> operation, std::shared_ptr&lt; const Utilities::MPI::CommunicationPatternBase &gt; communication_pattern={})=0</dt>
 <dd><a class="anchor" id="_deprecated000139"></a>Use <a class="el" href="classLinearAlgebra_1_1VectorSpaceVector.html#href_anchor">import_elements()</a> instead.  </dd>
+<dt>Member <a class="el" href="array__view_8h.html#href_anchor">make_array_view</a>  (Tensor&lt; rank, dim, Number &gt; &amp;tensor)</dt>
+<dd><a class="anchor" id="_deprecated000002"></a>This function suggests that the elements of a <a class="el" href="classTensor.html">Tensor</a> object are stored as a contiguous array, but this is not in fact true and one should not pretend that this so. As a consequence, this function is deprecated. </dd>
 <dt>Member <a class="el" href="array__view_8h.html#href_anchor">make_array_view</a>  (SymmetricTensor&lt; rank, dim, Number &gt; &amp;tensor)</dt>
 <dd><a class="anchor" id="_deprecated000004"></a>This function suggests that the elements of a <a class="el" href="classSymmetricTensor.html">SymmetricTensor</a> object are stored as a contiguous array, but this is not in fact true and one should not pretend that this so. As a consequence, this function is deprecated. </dd>
 <dt>Member <a class="el" href="array__view_8h.html#href_anchor">make_array_view</a>  (const SymmetricTensor&lt; rank, dim, Number &gt; &amp;tensor)</dt>
 <dd><a class="anchor" id="_deprecated000003"></a>This function suggests that the elements of a <a class="el" href="classSymmetricTensor.html">SymmetricTensor</a> object are stored as a contiguous array, but this is not in fact true and one should not pretend that this so. As a consequence, this function is deprecated. </dd>
 <dt>Member <a class="el" href="array__view_8h.html#href_anchor">make_array_view</a>  (const Tensor&lt; rank, dim, Number &gt; &amp;tensor)</dt>
 <dd><a class="anchor" id="_deprecated000001"></a>This function suggests that the elements of a <a class="el" href="classTensor.html">Tensor</a> object are stored as a contiguous array, but this is not in fact true and one should not pretend that this so. As a consequence, this function is deprecated. </dd>
-<dt>Member <a class="el" href="array__view_8h.html#href_anchor">make_array_view</a>  (Tensor&lt; rank, dim, Number &gt; &amp;tensor)</dt>
-<dd><a class="anchor" id="_deprecated000002"></a>This function suggests that the elements of a <a class="el" href="classTensor.html">Tensor</a> object are stored as a contiguous array, but this is not in fact true and one should not pretend that this so. As a consequence, this function is deprecated. </dd>
 <dt>Member <a class="el" href="classMapping.html#href_anchor">Mapping&lt; dim, spacedim &gt;::fill_fe_face_values</a>  (const typename <a class="el" href="group__Iterators.html#href_anchor">Triangulation&lt; dim, spacedim &gt;::cell_iterator</a> &amp;cell, const unsigned int face_no, const <a class="el" href="classQuadrature.html">Quadrature</a>&lt; dim - 1 &gt; &amp;quadrature, const typename Mapping&lt; dim, spacedim &gt;::InternalDataBase &amp;internal_data, internal::FEValuesImplementation::MappingRelatedData&lt; dim, spacedim &gt; &amp;output_data) const</dt>
-<dd><a class="anchor" id="_deprecated000080"></a>Use the version taking a <a class="el" href="classhp_1_1QCollection.html">hp::QCollection</a> argument.  </dd>
+<dd><a class="anchor" id="_deprecated000084"></a>Use the version taking a <a class="el" href="classhp_1_1QCollection.html">hp::QCollection</a> argument.  </dd>
 <dt>Member <a class="el" href="classMapping.html#href_anchor">Mapping&lt; dim, spacedim &gt;::get_face_data</a>  (const UpdateFlags update_flags, const <a class="el" href="classQuadrature.html">Quadrature</a>&lt; dim - 1 &gt; &amp;quadrature) const</dt>
-<dd><a class="anchor" id="_deprecated000079"></a>Use the version taking a <a class="el" href="classhp_1_1QCollection.html">hp::QCollection</a> argument.  </dd>
+<dd><a class="anchor" id="_deprecated000083"></a>Use the version taking a <a class="el" href="classhp_1_1QCollection.html">hp::QCollection</a> argument.  </dd>
 <dt>Member <a class="el" href="classMappingQCache.html#href_anchor">MappingQCache&lt; dim, spacedim &gt;::initialize</a>  (const <a class="el" href="classTriangulation.html">Triangulation&lt; dim, spacedim &gt;</a> &amp;triangulation, const MappingQ&lt; dim, spacedim &gt; &amp;mapping)</dt>
 <dd><a class="anchor" id="_deprecated000085"></a>Use <a class="el" href="classMappingQCache.html#href_anchor">initialize()</a> version above instead.  </dd>
 <dt>Member <a class="el" href="classparallel_1_1distributed_1_1Triangulation.html#href_anchor">parallel::distributed::Triangulation&lt; dim, spacedim &gt;::load</a>  (const std::string &amp;filename, const bool autopartition) override</dt>
@@ -328,21 +328,21 @@
 <dt>Member <a class="el" href="namespacePhysics_1_1Transformations_1_1Rotations.html#href_anchor">Physics::Transformations::Rotations::rotation_matrix_3d</a>  (const Point&lt; 3, Number &gt; &amp;axis, const Number &amp;angle)</dt>
 <dd><a class="anchor" id="_deprecated000156"></a>Use the variant with a <a class="el" href="classTensor.html">Tensor</a> as an axis.  </dd>
 <dt>Member <a class="el" href="classReferenceCell.html#href_anchor">ReferenceCell::compute_orientation</a>  (const std::array&lt; T, N &gt; &amp;vertices_0, const std::array&lt; T, N &gt; &amp;vertices_1) const</dt>
-<dd><a class="anchor" id="_deprecated000089"></a>Use <a class="el" href="classReferenceCell.html#href_anchor">get_combined_orientation()</a> instead.  </dd>
+<dd><a class="anchor" id="_deprecated000092"></a>Use <a class="el" href="classReferenceCell.html#href_anchor">get_combined_orientation()</a> instead.  </dd>
 <dt>Member <a class="el" href="classReferenceCell.html#href_anchor">ReferenceCell::permute_according_orientation</a>  (const std::array&lt; T, N &gt; &amp;vertices, const unsigned int orientation) const</dt>
-<dd><a class="anchor" id="_deprecated000090"></a>Use <a class="el" href="classReferenceCell.html#href_anchor">permute_by_combined_orientation()</a> instead.  </dd>
+<dd><a class="anchor" id="_deprecated000093"></a>Use <a class="el" href="classReferenceCell.html#href_anchor">permute_by_combined_orientation()</a> instead.  </dd>
 <dt>Class <a class="el" href="classSLEPcWrappers_1_1TransformationSpectrumFolding.html">SLEPcWrappers::TransformationSpectrumFolding</a>  </dt>
 <dd><a class="anchor" id="_deprecated000133"></a>Since deal.II requires PETSc 3.7 or newer this class no longer does anything. </dd>
 <dt>Member <a class="el" href="namespaceSparsityTools.html#href_anchor">SparsityTools::distribute_sparsity_pattern</a>  (<a class="el" href="classBlockDynamicSparsityPattern.html">BlockDynamicSparsityPattern</a> &amp;dsp, const std::vector&lt; IndexSet &gt; &amp;owned_set_per_cpu, const MPI_Comm mpi_comm, const <a class="el" href="classIndexSet.html">IndexSet</a> &amp;myrange)</dt>
 <dd><a class="anchor" id="_deprecated000134"></a>Use the <a class="el" href="namespaceSparsityTools.html#href_anchor">distribute_sparsity_pattern()</a> with a single index set for the present MPI process only.  </dd>
 <dt>Member <a class="el" href="classSUNDIALS_1_1IDA.html#href_anchor">SUNDIALS::IDA&lt; VectorType &gt;::solve_jacobian_system</a>  )</dt>
-<dd><a class="anchor" id="_deprecated000158"></a>Use <a class="el" href="classSUNDIALS_1_1IDA.html#href_anchor">solve_with_jacobian()</a> instead which also uses a numerical tolerance.  </dd>
+<dd><a class="anchor" id="_deprecated000157"></a>Use <a class="el" href="classSUNDIALS_1_1IDA.html#href_anchor">solve_with_jacobian()</a> instead which also uses a numerical tolerance.  </dd>
 <dt>Member <a class="el" href="classSUNDIALS_1_1KINSOL.html#href_anchor">SUNDIALS::KINSOL&lt; VectorType &gt;::solve_jacobian_system</a>  )</dt>
-<dd><a class="anchor" id="_deprecated000157"></a>Versions of <a class="el" href="namespaceSUNDIALS.html">SUNDIALS</a> after 4.0 no longer provide all of the information necessary for this callback (see below). Use the <code>solve_with_jacobian</code> callback described below. </dd>
-<dt>Member <a class="el" href="classSymmetricTensor.html#href_anchor">SymmetricTensor&lt; rank_, dim, Number &gt;::begin_raw</a>  () const</dt>
-<dd><a class="anchor" id="_deprecated000022"></a>This function suggests that the elements of a <a class="el" href="classSymmetricTensor.html">SymmetricTensor</a> object are stored as a contiguous array, but this is not in fact true and one should not pretend that this so. As a consequence, this function is deprecated.  </dd>
+<dd><a class="anchor" id="_deprecated000158"></a>Versions of <a class="el" href="namespaceSUNDIALS.html">SUNDIALS</a> after 4.0 no longer provide all of the information necessary for this callback (see below). Use the <code>solve_with_jacobian</code> callback described below. </dd>
 <dt>Member <a class="el" href="classSymmetricTensor.html#href_anchor">SymmetricTensor&lt; rank_, dim, Number &gt;::begin_raw</a>  ()</dt>
 <dd><a class="anchor" id="_deprecated000021"></a>This function suggests that the elements of a <a class="el" href="classSymmetricTensor.html">SymmetricTensor</a> object are stored as a contiguous array, but this is not in fact true and one should not pretend that this so. As a consequence, this function is deprecated.  </dd>
+<dt>Member <a class="el" href="classSymmetricTensor.html#href_anchor">SymmetricTensor&lt; rank_, dim, Number &gt;::begin_raw</a>  () const</dt>
+<dd><a class="anchor" id="_deprecated000022"></a>This function suggests that the elements of a <a class="el" href="classSymmetricTensor.html">SymmetricTensor</a> object are stored as a contiguous array, but this is not in fact true and one should not pretend that this so. As a consequence, this function is deprecated.  </dd>
 <dt>Member <a class="el" href="classSymmetricTensor.html#href_anchor">SymmetricTensor&lt; rank_, dim, Number &gt;::end_raw</a>  () const</dt>
 <dd><a class="anchor" id="_deprecated000024"></a>This function suggests that the elements of a <a class="el" href="classSymmetricTensor.html">SymmetricTensor</a> object are stored as a contiguous array, but this is not in fact true and one should not pretend that this so. As a consequence, this function is deprecated.  </dd>
 <dt>Member <a class="el" href="classSymmetricTensor.html#href_anchor">SymmetricTensor&lt; rank_, dim, Number &gt;::end_raw</a>  ()</dt>
@@ -351,22 +351,22 @@
 <dd><a class="anchor" id="_deprecated000027"></a>This function suggests that the elements of a <a class="el" href="classTensor.html">Tensor</a> object are stored as a contiguous array, but this is not in fact true and one should not pretend that this so. As a consequence, this function is deprecated.  </dd>
 <dt>Member <a class="el" href="classTensor_3_010_00_01dim_00_01Number_01_4.html#href_anchor">Tensor&lt; 0, dim, Number &gt;::begin_raw</a>  ()</dt>
 <dd><a class="anchor" id="_deprecated000026"></a>This function suggests that the elements of a <a class="el" href="classTensor.html">Tensor</a> object are stored as a contiguous array, but this is not in fact true and one should not pretend that this so. As a consequence, this function is deprecated.  </dd>
-<dt>Member <a class="el" href="classTensor_3_010_00_01dim_00_01Number_01_4.html#href_anchor">Tensor&lt; 0, dim, Number &gt;::end_raw</a>  () const</dt>
-<dd><a class="anchor" id="_deprecated000029"></a>This function suggests that the elements of a <a class="el" href="classTensor.html">Tensor</a> object are stored as a contiguous array, but this is not in fact true and one should not pretend that this so. As a consequence, this function is deprecated.  </dd>
 <dt>Member <a class="el" href="classTensor_3_010_00_01dim_00_01Number_01_4.html#href_anchor">Tensor&lt; 0, dim, Number &gt;::end_raw</a>  ()</dt>
 <dd><a class="anchor" id="_deprecated000028"></a>This function suggests that the elements of a <a class="el" href="classTensor.html">Tensor</a> object are stored as a contiguous array, but this is not in fact true and one should not pretend that this so. As a consequence, this function is deprecated.  </dd>
+<dt>Member <a class="el" href="classTensor_3_010_00_01dim_00_01Number_01_4.html#href_anchor">Tensor&lt; 0, dim, Number &gt;::end_raw</a>  () const</dt>
+<dd><a class="anchor" id="_deprecated000029"></a>This function suggests that the elements of a <a class="el" href="classTensor.html">Tensor</a> object are stored as a contiguous array, but this is not in fact true and one should not pretend that this so. As a consequence, this function is deprecated.  </dd>
 <dt>Member <a class="el" href="classTensor.html#href_anchor">Tensor&lt; rank_, dim, Number &gt;::unroll</a>  (Vector&lt; OtherNumber &gt; &amp;result) const</dt>
 <dd><a class="anchor" id="_deprecated000030"></a>Use the more general function that takes a pair of iterators instead.  </dd>
 <dt>Member <a class="el" href="group__threads.html#href_anchor">Threads::new_thread</a>  (RT(C::*fun_ptr)(Args...) const, <a class="el" href="namespacestd__cxx20.html#href_anchor">std_cxx20::type_identity_t&lt; const C &gt;</a> &amp;c, <a class="el" href="namespacestd__cxx20.html#href_anchor">std_cxx20::type_identity_t&lt; Args &gt;</a>... args)</dt>
 <dd><a class="anchor" id="_deprecated000036"></a>Use std::thread or std::jthread instead. </dd>
 <dt>Member <a class="el" href="group__threads.html#href_anchor">Threads::new_thread</a>  (RT(C::*fun_ptr)(Args...), <a class="el" href="namespacestd__cxx20.html#href_anchor">std_cxx20::type_identity_t&lt; C &gt;</a> &amp;c, <a class="el" href="namespacestd__cxx20.html#href_anchor">std_cxx20::type_identity_t&lt; Args &gt;</a>... args)</dt>
 <dd><a class="anchor" id="_deprecated000035"></a>Use std::thread or std::jthread instead. </dd>
-<dt>Member <a class="el" href="group__threads.html#href_anchor">Threads::new_thread</a>  (RT(*fun_ptr)(Args...), <a class="el" href="namespacestd__cxx20.html#href_anchor">std_cxx20::type_identity_t&lt; Args &gt;</a>... args)</dt>
-<dd><a class="anchor" id="_deprecated000034"></a>Use std::thread or std::jthread instead. </dd>
-<dt>Member <a class="el" href="group__CPP11.html#href_anchor">Threads::new_thread</a>  (FunctionObjectType function_object) -&gt; Thread&lt; decltype(function_object())&gt;</dt>
-<dd><a class="anchor" id="_deprecated000033"></a>Use std::thread or std::jthread instead. </dd>
 <dt>Member <a class="el" href="group__threads.html#href_anchor">Threads::new_thread</a>  (const std::function&lt; RT()&gt; &amp;function)</dt>
 <dd><a class="anchor" id="_deprecated000032"></a>Use std::thread or std::jthread instead. </dd>
+<dt>Member <a class="el" href="group__CPP11.html#href_anchor">Threads::new_thread</a>  (FunctionObjectType function_object) -&gt; Thread&lt; decltype(function_object())&gt;</dt>
+<dd><a class="anchor" id="_deprecated000033"></a>Use std::thread or std::jthread instead. </dd>
+<dt>Member <a class="el" href="group__threads.html#href_anchor">Threads::new_thread</a>  (RT(*fun_ptr)(Args...), <a class="el" href="namespacestd__cxx20.html#href_anchor">std_cxx20::type_identity_t&lt; Args &gt;</a>... args)</dt>
+<dd><a class="anchor" id="_deprecated000034"></a>Use std::thread or std::jthread instead. </dd>
 <dt>Class <a class="el" href="classThreads_1_1Thread.html">Threads::Thread&lt; RT &gt;</a>  </dt>
 <dd><a class="anchor" id="_deprecated000031"></a>Use std::thread or std::jthread instead. </dd>
 <dt>Class <a class="el" href="classThreads_1_1ThreadGroup.html">Threads::ThreadGroup&lt; RT &gt;</a>  </dt>
@@ -376,9 +376,9 @@
 <dt>Member <a class="el" href="classTriaAccessor_3_010_00_01dim_00_01spacedim_01_4.html#href_anchor">TriaAccessor&lt; 0, dim, spacedim &gt;::number_of_children</a>  ()</dt>
 <dd><a class="anchor" id="_deprecated000096"></a>Use <a class="el" href="classTriaAccessor_3_010_00_01dim_00_01spacedim_01_4.html#href_anchor">n_active_descendants()</a> instead.  </dd>
 <dt>Member <a class="el" href="classTriaAccessor.html#href_anchor">TriaAccessor&lt; structdim, dim, spacedim &gt;::number_of_children</a>  () const</dt>
/usr/share/doc/packages/dealii/doxygen/deal.II/derivative__form_8h.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/derivative__form_8h.html	2024-03-17 21:57:40.207214313 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/derivative__form_8h.html	2024-03-17 21:57:40.211214336 +0000
@@ -145,21 +145,21 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>One of the uses of <a class="el" href="classDerivativeForm.html">DerivativeForm</a> is to apply it as a linear transformation. This function returns <picture><source srcset="form_387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \mathbf F(\mathbf x) \Delta \mathbf x$" src="form_387.png"/></picture>, which approximates the change in <picture><source srcset="form_388_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F(\mathbf x)$" src="form_388.png"/></picture> when <picture><source srcset="form_216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_216.png"/></picture> is changed by the amount <picture><source srcset="form_389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta \mathbf x$" src="form_389.png"/></picture>  </p><p class="formulaDsp">
-<picture><source srcset="form_390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>One of the uses of <a class="el" href="classDerivativeForm.html">DerivativeForm</a> is to apply it as a linear transformation. This function returns <picture><source srcset="form_393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \mathbf F(\mathbf x) \Delta \mathbf x$" src="form_393.png"/></picture>, which approximates the change in <picture><source srcset="form_394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F(\mathbf x)$" src="form_394.png"/></picture> when <picture><source srcset="form_190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_190.png"/></picture> is changed by the amount <picture><source srcset="form_395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta \mathbf x$" src="form_395.png"/></picture>  </p><p class="formulaDsp">
+<picture><source srcset="form_396_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \nabla \mathbf F(\mathbf x) \; \Delta \mathbf x
   \approx
   \mathbf F(\mathbf x + \Delta \mathbf x) - \mathbf F(\mathbf x).
-\]" src="form_390.png"/></picture>
+\]" src="form_396.png"/></picture>
 </p>
 <p> The transformation corresponds to  </p><p class="formulaDsp">
-<picture><source srcset="form_391_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   [\text{result}]_{i_1,\dots,i_k} = i\sum_{j}
   \left[\nabla \mathbf F(\mathbf x)\right]_{i_1,\dots,i_k, j}
   \Delta x_j
-\]" src="form_391.png"/></picture>
+\]" src="form_397.png"/></picture>
 </p>
-<p> in index notation and corresponds to <picture><source srcset="form_392_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\Delta \mathbf x] [\nabla \mathbf F(\mathbf x)]^T$" src="form_392.png"/></picture> in matrix notation. </p>
+<p> in index notation and corresponds to <picture><source srcset="form_398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\Delta \mathbf x] [\nabla \mathbf F(\mathbf x)]^T$" src="form_398.png"/></picture> in matrix notation. </p>
 
 <p class="definition">Definition at line <a class="el" href="derivative__form_8h_source.html#href_anchor">454</a> of file <a class="el" href="derivative__form_8h_source.html">derivative_form.h</a>.</p>
 
@@ -189,7 +189,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Similar to the previous <a class="el" href="#href_anchor">apply_transformation()</a>. Each row of the result corresponds to one of the rows of <code>D_X</code> transformed by <code>grad_F</code>, equivalent to <picture><source srcset="form_393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{D\_X} \, \mathrm{grad\_F}^T$" src="form_393.png"/></picture> in matrix notation. </p>
+<p>Similar to the previous <a class="el" href="#href_anchor">apply_transformation()</a>. Each row of the result corresponds to one of the rows of <code>D_X</code> transformed by <code>grad_F</code>, equivalent to <picture><source srcset="form_399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{D\_X} \, \mathrm{grad\_F}^T$" src="form_399.png"/></picture> in matrix notation. </p>
 
 <p class="definition">Definition at line <a class="el" href="derivative__form_8h_source.html#href_anchor">479</a> of file <a class="el" href="derivative__form_8h_source.html">derivative_form.h</a>.</p>
 
@@ -219,7 +219,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Similar to the previous <a class="el" href="#href_anchor">apply_transformation()</a>, specialized for the case <code>dim == spacedim</code> where we can return a rank-2 tensor instead of the more general <code><a class="el" href="classDerivativeForm.html">DerivativeForm</a></code>. Each row of the result corresponds to one of the rows of <code>D_X</code> transformed by <code>grad_F</code>, equivalent to <picture><source srcset="form_393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{D\_X} \, \mathrm{grad\_F}^T$" src="form_393.png"/></picture> in matrix notation. </p>
+<p>Similar to the previous <a class="el" href="#href_anchor">apply_transformation()</a>, specialized for the case <code>dim == spacedim</code> where we can return a rank-2 tensor instead of the more general <code><a class="el" href="classDerivativeForm.html">DerivativeForm</a></code>. Each row of the result corresponds to one of the rows of <code>D_X</code> transformed by <code>grad_F</code>, equivalent to <picture><source srcset="form_399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{D\_X} \, \mathrm{grad\_F}^T$" src="form_399.png"/></picture> in matrix notation. </p>
 
 <p class="definition">Definition at line <a class="el" href="derivative__form_8h_source.html#href_anchor">505</a> of file <a class="el" href="derivative__form_8h_source.html">derivative_form.h</a>.</p>
 
@@ -279,11 +279,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Similar to the previous <a class="el" href="#href_anchor">apply_transformation()</a>. In matrix notation, it computes <picture><source srcset="form_394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DF2 \, DF1^{T}$" src="form_394.png"/></picture>. Moreover, the result of this operation <picture><source srcset="form_395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_395.png"/></picture> can be interpreted as a metric tensor in <picture><source srcset="form_396_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^\text{spacedim}$" src="form_396.png"/></picture> which corresponds to the Euclidean metric tensor in <picture><source srcset="form_106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^\text{dim}$" src="form_106.png"/></picture>. For every pair of vectors <picture><source srcset="form_397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u, \mathbf v \in {\mathbb R}^\text{spacedim}$" src="form_397.png"/></picture>, we have:  </p><p class="formulaDsp">
-<picture><source srcset="form_398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Similar to the previous <a class="el" href="#href_anchor">apply_transformation()</a>. In matrix notation, it computes <picture><source srcset="form_400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DF2 \, DF1^{T}$" src="form_400.png"/></picture>. Moreover, the result of this operation <picture><source srcset="form_401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_401.png"/></picture> can be interpreted as a metric tensor in <picture><source srcset="form_402_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^\text{spacedim}$" src="form_402.png"/></picture> which corresponds to the Euclidean metric tensor in <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^\text{dim}$" src="form_99.png"/></picture>. For every pair of vectors <picture><source srcset="form_403_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u, \mathbf v \in {\mathbb R}^\text{spacedim}$" src="form_403.png"/></picture>, we have:  </p><p class="formulaDsp">
+<picture><source srcset="form_404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf u \cdot \mathbf A \mathbf v =
   \text{DF2}^{-1}(\mathbf u) \cdot \text{DF1}^{-1}(\mathbf v)
-\]" src="form_398.png"/></picture>
+\]" src="form_404.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="derivative__form_8h_source.html#href_anchor">565</a> of file <a class="el" href="derivative__form_8h_source.html">derivative_form.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/doxygen_crawl.html differs (HTML document, ASCII text)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/doxygen_crawl.html	2024-03-17 21:57:40.259214633 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/doxygen_crawl.html	2024-03-17 21:57:40.263214658 +0000
@@ -446,8 +446,8 @@
 <a href="mapping__q__cache_8h_source.html"/>
 <a href="mapping__q__eulerian_8h_source.html"/>
 <a href="mapping__q__generic_8h_source.html"/>
-<a href="mapping__related__data_8h_source.html"/>
 <a href="mapping__q__internal_8h_source.html"/>
+<a href="mapping__related__data_8h_source.html"/>
 <a href="cell__id_8h_source.html"/>
 <a href="cell__id__translator_8h_source.html"/>
 <a href="composition__manifold_8h_source.html"/>
@@ -613,8 +613,8 @@
 <a href="constraint__info_8h_source.html"/>
 <a href="cuda__fe__evaluation_8h_source.html"/>
 <a href="cuda__hanging__nodes__internal_8h_source.html"/>
-<a href="cuda__tensor__product__kernels_8h_source.html"/>
 <a href="cuda__matrix__free_8h_source.html"/>
+<a href="cuda__tensor__product__kernels_8h_source.html"/>
 <a href="evaluation__flags_8h_source.html"/>
 <a href="evaluation__kernels_8h_source.html"/>
 <a href="evaluation__kernels__hanging__nodes_8h_source.html"/>
@@ -734,8 +734,8 @@
 <a href="particle__iterator_8h_source.html"/>
 <a href="base_2partitioner_8h_source.html"/>
 <a href="particles_2partitioner_8h_source.html"/>
-<a href="kinematics_8h_source.html"/>
 <a href="property__pool_8h_source.html"/>
+<a href="kinematics_8h_source.html"/>
 <a href="standard__tensors_8h_source.html"/>
 <a href="notation_8h_source.html"/>
 <a href="transformations_8h_source.html"/>
@@ -899,8 +899,8 @@
 <a href="fe__q__hierarchical_8cc_source.html"/>
 <a href="fe__q__iso__q1_8cc_source.html"/>
 <a href="fe__rannacher__turek_8cc_source.html"/>
-<a href="fe__raviart__thomas__nodal_8cc_source.html"/>
 <a href="fe__raviart__thomas_8cc_source.html"/>
+<a href="fe__raviart__thomas__nodal_8cc_source.html"/>
 <a href="fe__rt__bubbles_8cc_source.html"/>
 <a href="fe__series_8cc_source.html"/>
 <a href="fe__series__fourier_8cc_source.html"/>
@@ -966,8 +966,8 @@
 <a href="block__sparsity__pattern_8cc_source.html"/>
 <a href="block__vector_8cc_source.html"/>
 <a href="chunk__sparse__matrix_8cc_source.html"/>
-<a href="cuda__kernels_8cc_source.html"/>
 <a href="chunk__sparsity__pattern_8cc_source.html"/>
+<a href="cuda__kernels_8cc_source.html"/>
 <a href="cuda__precondition_8cc_source.html"/>
 <a href="cuda__solver__direct_8cc_source.html"/>
 <a href="cuda__sparse__matrix_8cc_source.html"/>
@@ -1168,16 +1168,16 @@
 <a href="step-23_8h.html"/>
 <a href="step-24_8h.html"/>
 <a href="step-25_8h.html"/>
+<a href="step-26_8h.html"/>
 <a href="step-27_8h.html"/>
 <a href="step-28_8h.html"/>
 <a href="step-29_8h.html"/>
 <a href="step-3_8h.html"/>
 <a href="step-30_8h.html"/>
-<a href="step-32_8h.html"/>
 <a href="step-31_8h.html"/>
+<a href="step-32_8h.html"/>
 <a href="step-33_8h.html"/>
 <a href="step-34_8h.html"/>
-<a href="step-26_8h.html"/>
 <a href="step-35_8h.html"/>
 <a href="step-36_8h.html"/>
 <a href="step-37_8h.html"/>
@@ -1228,8 +1228,8 @@
 <a href="step-79_8h.html"/>
 <a href="step-8_8h.html"/>
 <a href="step-81_8h.html"/>
-<a href="step-85_8h.html"/>
 <a href="step-82_8h.html"/>
+<a href="step-85_8h.html"/>
 <a href="step-9_8h.html"/>
 <a href="tutorial_8h.html"/>
 <a href="changes_8h.html"/>
@@ -1334,8 +1334,8 @@
 <a href="8_82_81-vs-8_83_80_8h.html"/>
 <a href="8_83_80-vs-8_84_80_8h.html"/>
 <a href="8_84_80-vs-8_84_81_8h.html"/>
-<a href="8_84_82-vs-8_85_80_8h.html"/>
 <a href="8_84_81-vs-8_84_82_8h.html"/>
+<a href="8_84_82-vs-8_85_80_8h.html"/>
 <a href="8_85_80-vs-9_80_80_8h.html"/>
 <a href="9_80_80-vs-9_80_81_8h.html"/>
 <a href="9_80_81-vs-9_81_80_8h.html"/>
@@ -1425,8 +1425,8 @@
 <a href="polynomials__barycentric_8h.html"/>
 <a href="polynomials__bdm_8h.html"/>
 <a href="polynomials__bernardi__raugel_8h.html"/>
-<a href="polynomials__hermite_8h.html"/>
 <a href="polynomials__bernstein_8h.html"/>
+<a href="polynomials__hermite_8h.html"/>
 <a href="polynomials__integrated__legendre__sz_8h.html"/>
 <a href="polynomials__nedelec_8h.html"/>
 <a href="polynomials__p_8h.html"/>
@@ -1478,8 +1478,8 @@
 <a href="types_8h.html"/>
 <a href="undefine__macros_8h.html"/>
 <a href="vector__slice_8h.html"/>
-<a href="work__stream_8h.html"/>
 <a href="vectorization_8h.html"/>
+<a href="work__stream_8h.html"/>
 <a href="base_2bounding__box_8h.html"/>
 <a href="boost__adaptors_2bounding__box_8h.html"/>
 <a href="base_2point_8h.html"/>
@@ -1492,8 +1492,8 @@
 <a href="triangulation_8h.html"/>
 <a href="ad_8h.html"/>
 <a href="ad__drivers_8h.html"/>
-<a href="ad__number__traits_8h.html"/>
 <a href="ad__helpers_8h.html"/>
+<a href="ad__number__traits_8h.html"/>
 <a href="ad__number__types_8h.html"/>
 <a href="adolc__math_8h.html"/>
 <a href="adolc__number__types_8h.html"/>
@@ -1518,8 +1518,8 @@
 <a href="p4est__wrappers_8h.html"/>
 <a href="repartitioning__policy__tools_8h.html"/>
 <a href="shared__tria_8h.html"/>
-<a href="block__info_8h.html"/>
 <a href="tria__base_8h.html"/>
+<a href="block__info_8h.html"/>
 <a href="dof__accessor_8h.html"/>
 <a href="dof__faces_8h.html"/>
 <a href="dof__handler_8h.html"/>
@@ -1584,8 +1584,8 @@
 <a href="mapping__q__cache_8h.html"/>
 <a href="mapping__q__eulerian_8h.html"/>
 <a href="mapping__q__generic_8h.html"/>
-<a href="mapping__related__data_8h.html"/>
 <a href="mapping__q__internal_8h.html"/>
+<a href="mapping__related__data_8h.html"/>
 <a href="cell__id_8h.html"/>
 <a href="cell__id__translator_8h.html"/>
 <a href="composition__manifold_8h.html"/>
@@ -1666,8 +1666,8 @@
 <a href="la__vector_8h.html"/>
 <a href="lapack__full__matrix_8h.html"/>
 <a href="lapack__support_8h.html"/>
-<a href="linear__operator_8h.html"/>
 <a href="lapack__templates_8h.html"/>
+<a href="linear__operator_8h.html"/>
 <a href="linear__operator__tools_8h.html"/>
 <a href="matrix__block_8h.html"/>
 <a href="matrix__iterator_8h.html"/>
@@ -1679,8 +1679,8 @@
 <a href="petsc__block__vector_8h.html"/>
 <a href="petsc__communication__pattern_8h.html"/>
 <a href="petsc__compatibility_8h.html"/>
-<a href="petsc__matrix__base_8h.html"/>
 <a href="petsc__full__matrix_8h.html"/>
+<a href="petsc__matrix__base_8h.html"/>
 <a href="petsc__matrix__free_8h.html"/>
 <a href="petsc__parallel__block__sparse__matrix_8h.html"/>
 <a href="petsc__parallel__block__vector_8h.html"/>
@@ -1768,8 +1768,8 @@
 <a href="mapping__data__on__the__fly_8h.html"/>
 <a href="mapping__info__storage_8h.html"/>
 <a href="matrix__free_8h.html"/>
-<a href="shape__info_8h.html"/>
 <a href="operators_8h.html"/>
+<a href="shape__info_8h.html"/>
 <a href="task__info_8h.html"/>
 <a href="tensor__product__kernels_8h.html"/>
 <a href="tools_8h.html"/>
@@ -1835,8 +1835,8 @@
 <a href="fe__field__function_8h.html"/>
 <a href="histogram_8h.html"/>
 <a href="history_8h.html"/>
-<a href="matrix__tools_8h.html"/>
 <a href="matrix__creator_8h.html"/>
+<a href="matrix__tools_8h.html"/>
 <a href="nonlinear_8h.html"/>
 <a href="point__value__history_8h.html"/>
 <a href="rtree_8h.html"/>
@@ -1864,8 +1864,8 @@
 <a href="vector__adaptor_8h.html"/>
 <a href="solver__bfgs_8h.html"/>
 <a href="numerics_2data__out_8h.html"/>
-<a href="generators_8h.html"/>
 <a href="particles_2data__out_8h.html"/>
+<a href="generators_8h.html"/>
 <a href="particle_8h.html"/>
 <a href="particle__accessor_8h.html"/>
 <a href="particle__handler_8h.html"/>
@@ -1975,8 +1975,8 @@
 <a href="vectorization_8cc.html"/>
 <a href="intersections_8cc.html"/>
 <a href="surface__mesh_8cc.html"/>
-<a href="ad__helpers_8cc.html"/>
 <a href="ad__drivers_8cc.html"/>
+<a href="ad__helpers_8cc.html"/>
 <a href="adolc__number__types_8cc.html"/>
 <a href="sacado__number__types_8cc.html"/>
/usr/share/doc/packages/dealii/doxygen/deal.II/grid__tools_8h_source.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/grid__tools_8h_source.html	2024-03-17 21:57:40.403215523 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/grid__tools_8h_source.html	2024-03-17 21:57:40.411215572 +0000
@@ -1021,8 +1021,8 @@
 <div class="line"><a id="l03211" name="l03211"></a><span class="lineno"> 3211</span>  <a class="code hl_define" href="config_8h.html#href_anchor">DEAL_II_CXX20_REQUIRES</a>(<a class="code hl_concept" href="conceptconcepts_1_1is__triangulation__or__dof__handler.html">concepts::is_triangulation_or_dof_handler&lt;MeshType&gt;</a>)</div>
 <div class="line"><a id="l03212" name="l03212"></a><span class="lineno"> 3212</span>  <span class="keywordtype">void</span> <a class="code hl_function" href="namespaceGridTools.html#href_anchor">collect_periodic_faces</a>(</div>
 <div class="line"><a id="l03213" name="l03213"></a><span class="lineno"> 3213</span>    <span class="keyword">const</span> MeshType &amp;         mesh,</div>
-<div class="line"><a id="l03214" name="l03214"></a><span class="lineno"> 3214</span>    <span class="keyword">const</span> <a class="code hl_class" href="classunsigned_01int.html">types::boundary_id</a> b_id1,</div>
-<div class="line"><a id="l03215" name="l03215"></a><span class="lineno"> 3215</span>    <span class="keyword">const</span> <a class="code hl_class" href="classunsigned_01int.html">types::boundary_id</a> b_id2,</div>
+<div class="line"><a id="l03214" name="l03214"></a><span class="lineno"> 3214</span>    <span class="keyword">const</span> <a class="code hl_typedef" href="namespacetypes.html#href_anchor">types::boundary_id</a> b_id1,</div>
+<div class="line"><a id="l03215" name="l03215"></a><span class="lineno"> 3215</span>    <span class="keyword">const</span> <a class="code hl_typedef" href="namespacetypes.html#href_anchor">types::boundary_id</a> b_id2,</div>
 <div class="line"><a id="l03216" name="l03216"></a><span class="lineno"> 3216</span>    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>       direction,</div>
 <div class="line"><a id="l03217" name="l03217"></a><span class="lineno"> 3217</span>    std::vector&lt;<a class="code hl_struct" href="structGridTools_1_1PeriodicFacePair.html">PeriodicFacePair&lt;typename MeshType::cell_iterator&gt;</a>&gt;</div>
 <div class="line"><a id="l03218" name="l03218"></a><span class="lineno"> 3218</span>      &amp;                                         matched_pairs,</div>
@@ -2596,6 +2596,7 @@
 <div class="ttc" id="anamespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div><div class="ttdoc">STL namespace.</div></div>
 <div class="ttc" id="anamespacestd_html_ae348f4ef7dd5887ba9c50b03a842950a"><div class="ttname"><a href="namespacestd.html#href_anchor">std::abs</a></div><div class="ttdeci">::VectorizedArray&lt; Number, width &gt; abs(const ::VectorizedArray&lt; Number, width &gt; &amp;)</div><div class="ttdef"><b>Definition</b> <a href="vectorization_8h_source.html#href_anchor">vectorization.h:6008</a></div></div>
 <div class="ttc" id="anamespacetypes_html"><div class="ttname"><a href="namespacetypes.html">types</a></div><div class="ttdef"><b>Definition</b> <a href="types_8h_source.html#href_anchor">types.h:33</a></div></div>
+<div class="ttc" id="anamespacetypes_html_a10c23e1699231bd1fac0ebdd1890095d"><div class="ttname"><a href="namespacetypes.html#href_anchor">types::boundary_id</a></div><div class="ttdeci">unsigned int boundary_id</div><div class="ttdef"><b>Definition</b> <a href="types_8h_source.html#href_anchor">types.h:141</a></div></div>
 <div class="ttc" id="anamespacetypes_html_a198fcb9cfd43905f5c4f8c6ad7397330"><div class="ttname"><a href="namespacetypes.html#href_anchor">types::subdomain_id</a></div><div class="ttdeci">unsigned int subdomain_id</div><div class="ttdef"><b>Definition</b> <a href="types_8h_source.html#href_anchor">types.h:44</a></div></div>
 <div class="ttc" id="anamespacetypes_html_a83963f61f227516480be27a60c507a58"><div class="ttname"><a href="namespacetypes.html#href_anchor">types::global_dof_index</a></div><div class="ttdeci">unsigned int global_dof_index</div><div class="ttdef"><b>Definition</b> <a href="types_8h_source.html#href_anchor">types.h:82</a></div></div>
 <div class="ttc" id="aoptional_8h_html"><div class="ttname"><a href="optional_8h.html">optional.h</a></div></div>
/usr/share/doc/packages/dealii/doxygen/deal.II/group__CPP11.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/group__CPP11.html	2024-03-17 21:57:40.459215868 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/group__CPP11.html	2024-03-17 21:57:40.467215918 +0000
@@ -177,7 +177,7 @@
 </div><!-- fragment --><p> The macro <a class="el" href="config_8h.html#href_anchor">DEAL_II_CONSTEXPR</a> expands to <code>constexpr</code> if the compiler supports enough <code>constexpr</code> features (such as loops). If the compiler does not then this macro expands to nothing.</p>
 <p><a class="el" href="namespaceFunctions.html">Functions</a> declared as <code>constexpr</code> can be evaluated at compile time. Hence code like </p><div class="fragment"><div class="line"><span class="keyword">constexpr</span> <span class="keywordtype">double</span> det_A = <a class="code hl_function" href="symmetric__tensor_8h.html#href_anchor">determinant</a>(A);</div>
 <div class="ttc" id="asymmetric__tensor_8h_html_a041d56f5d878527b2a9d274c47a6f037"><div class="ttname"><a href="symmetric__tensor_8h.html#href_anchor">determinant</a></div><div class="ttdeci">DEAL_II_HOST constexpr Number determinant(const SymmetricTensor&lt; 2, dim, Number &gt; &amp;)</div><div class="ttdef"><b>Definition</b> <a href="symmetric__tensor_8h_source.html#href_anchor">symmetric_tensor.h:2800</a></div></div>
-</div><!-- fragment --><p> assuming <code>A</code> is declared with the <code>constexpr</code> specifier, will typically result in compile-time constants. This example shows the performance gains of using <code>constexpr</code> because here we performed an operation with <picture><source srcset="form_0_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(\text{dim}^3)$" src="form_0.png"/></picture> complexity during compile time, avoiding any runtime cost. </p>
+</div><!-- fragment --><p> assuming <code>A</code> is declared with the <code>constexpr</code> specifier, will typically result in compile-time constants. This example shows the performance gains of using <code>constexpr</code> because here we performed an operation with <picture><source srcset="form_34_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(\text{dim}^3)$" src="form_34.png"/></picture> complexity during compile time, avoiding any runtime cost. </p>
 <h2 class="groupheader">Function Documentation</h2>
 <a id="gaec59eec63fe5999c595cd0980f998a5a" name="gaec59eec63fe5999c595cd0980f998a5a"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#href_anchor">&#9670;&#160;</a></span>new_thread()</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/group__Concepts.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/group__Concepts.html	2024-03-17 21:57:40.491216066 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/group__Concepts.html	2024-03-17 21:57:40.495216091 +0000
@@ -176,7 +176,7 @@
 <div class="line">  <span class="keyword">template</span> &lt;<span class="keyword">typename</span> VectorType&gt;</div>
 <div class="line">  <span class="keyword">virtual</span> <span class="keywordtype">void</span> Tstep(VectorType &amp;u, <span class="keyword">const</span> VectorType &amp;v) <span class="keyword">const</span> =0;</div>
 <div class="line">};</div>
-</div><!-- fragment --><p> where these two member functions perform one step (or the transpose of such a step) of the smoothing scheme. In other words, the operations performed by these functions are <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u = u - P^{-1} (A u - v)$" src="form_1.png"/></picture> and <picture><source srcset="form_2_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u = u - P^{-T} (A u - v)$" src="form_2.png"/></picture>. </p>
+</div><!-- fragment --><p> where these two member functions perform one step (or the transpose of such a step) of the smoothing scheme. In other words, the operations performed by these functions are <picture><source srcset="form_35_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u = u - P^{-1} (A u - v)$" src="form_35.png"/></picture> and <picture><source srcset="form_36_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u = u - P^{-T} (A u - v)$" src="form_36.png"/></picture>. </p>
 <p class="enddd"></p>
 </dd>
 <dt class="concepts"><a class="anchor" id="ConceptSparsityPatternType"></a><b>SparsityPatternType</b> </dt>
/usr/share/doc/packages/dealii/doxygen/deal.II/group__LAOperators.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/group__LAOperators.html	2024-03-17 21:57:40.851218290 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/group__LAOperators.html	2024-03-17 21:57:40.855218314 +0000
@@ -324,7 +324,7 @@
 <div class="line">std::function&lt;void(Domain &amp;, <span class="keyword">const</span> Range &amp;)&gt; Tvmult;</div>
 <div class="line">std::function&lt;void(Domain &amp;, <span class="keyword">const</span> Range &amp;)&gt; Tvmult_add;</div>
 </div><!-- fragment --><p>Thus, such an object can be used as a matrix object in all <a class="el" href="step_21.html#href_anchor">iterative solver</a> classes, either as a matrix object, or as <a class="el" href="group__Preconditioners.html">preconditioner</a>.</p>
-<p>The big advantage of the <a class="el" href="classLinearOperator.html">LinearOperator</a> class is that it provides syntactic sugar for complex matrix-vector operations. As an example consider the operation <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(A+k\,B)\,C$" src="form_94.png"/></picture>, where <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture>, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> and <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> denote (possibly different) <a class="el" href="classSparseMatrix.html">SparseMatrix</a> objects. In order to construct a <a class="el" href="classLinearOperator.html">LinearOperator</a> <code>op</code> that performs above computation when applied on a vector, one can write: </p><div class="fragment"><div class="line"><span class="preprocessor">#href_anchor"code" href="linear__operator__tools_8h.html">deal.II/lac/linear_operator_tools.h</a>&gt;</span></div>
+<p>The big advantage of the <a class="el" href="classLinearOperator.html">LinearOperator</a> class is that it provides syntactic sugar for complex matrix-vector operations. As an example consider the operation <picture><source srcset="form_201_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(A+k\,B)\,C$" src="form_201.png"/></picture>, where <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture>, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> and <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> denote (possibly different) <a class="el" href="classSparseMatrix.html">SparseMatrix</a> objects. In order to construct a <a class="el" href="classLinearOperator.html">LinearOperator</a> <code>op</code> that performs above computation when applied on a vector, one can write: </p><div class="fragment"><div class="line"><span class="preprocessor">#href_anchor"code" href="linear__operator__tools_8h.html">deal.II/lac/linear_operator_tools.h</a>&gt;</span></div>
 <div class="line"> </div>
 <div class="line"><a class="code hl_class" href="classSparseMatrix.html">::SparseMatrix&lt;double&gt;</a> A, B, C;</div>
 <div class="line"><span class="keywordtype">double</span> k;</div>
@@ -376,7 +376,7 @@
 <div class="line">result += b;</div>
 <div class="line">result -= c;</div>
 <div class="line">result += d;</div>
-</div><!-- fragment --><p> that avoids any intermediate storage. As a second example (involving a <a class="el" href="classLinearOperator.html">LinearOperator</a> object) consider the computation of a residual <picture><source srcset="form_96_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b-Ax$" src="form_96.png"/></picture>:</p>
+</div><!-- fragment --><p> that avoids any intermediate storage. As a second example (involving a <a class="el" href="classLinearOperator.html">LinearOperator</a> object) consider the computation of a residual <picture><source srcset="form_202_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b-Ax$" src="form_202.png"/></picture>:</p>
 <div class="fragment"><div class="line"><a class="code hl_class" href="classSparseMatrix.html">::SparseMatrix&lt;double&gt;</a> A;</div>
 <div class="line"><a class="code hl_class" href="classVector.html">::Vector&lt;double&gt;</a> b, x;</div>
 <div class="line"><span class="comment">// ..</span></div>
@@ -1455,7 +1455,7 @@
 <p>Return a <a class="el" href="classLinearOperator.html">LinearOperator</a> that performs the operations associated with the Schur complement. There are two additional helper functions, <a class="el" href="#href_anchor">condense_schur_rhs()</a> and <a class="el" href="#href_anchor">postprocess_schur_solution()</a>, that are likely necessary to be used in order to perform any useful tasks in linear algebra with this operator.</p>
 <p>We construct the definition of the Schur complement in the following way:</p>
 <p>Consider a general system of linear equations that can be decomposed into two major sets of equations:  </p><p class="formulaDsp">
-<picture><source srcset="form_1781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_1852_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \mathbf{K}\mathbf{d} = \mathbf{f}
 \quad \Rightarrow\quad
 \left(\begin{array}{cc}
@@ -1468,60 +1468,60 @@
 \left(\begin{array}{cc}
    f \\ g
 \end{array}\right),
-\end{eqnarray*}" src="form_1781.png"/></picture>
+\end{eqnarray*}" src="form_1852.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1782_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A,B,C,D $" src="form_1782.png"/></picture> represent general subblocks of the matrix <picture><source srcset="form_1783_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf{K} $" src="form_1783.png"/></picture> and, similarly, general subvectors of <picture><source srcset="form_1784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf{d},\mathbf{f} $" src="form_1784.png"/></picture> are given by <picture><source srcset="form_1785_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ x,y,f,g $" src="form_1785.png"/></picture> .</p>
+<p> where <picture><source srcset="form_1853_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A,B,C,D $" src="form_1853.png"/></picture> represent general subblocks of the matrix <picture><source srcset="form_1854_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf{K} $" src="form_1854.png"/></picture> and, similarly, general subvectors of <picture><source srcset="form_1855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf{d},\mathbf{f} $" src="form_1855.png"/></picture> are given by <picture><source srcset="form_1856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ x,y,f,g $" src="form_1856.png"/></picture> .</p>
 <p>This is equivalent to the following two statements:  </p><p class="formulaDsp">
-<picture><source srcset="form_1786_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_1857_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (1) \quad Ax + By &amp;=&amp; f \\
   (2) \quad Cx + Dy &amp;=&amp; g \quad .
-\end{eqnarray*}" src="form_1786.png"/></picture>
+\end{eqnarray*}" src="form_1857.png"/></picture>
 </p>
-<p>Assuming that <picture><source srcset="form_1787_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A,D $" src="form_1787.png"/></picture> are both square and invertible, we could then perform one of two possible substitutions,  </p><p class="formulaDsp">
-<picture><source srcset="form_1788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>Assuming that <picture><source srcset="form_1858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A,D $" src="form_1858.png"/></picture> are both square and invertible, we could then perform one of two possible substitutions,  </p><p class="formulaDsp">
+<picture><source srcset="form_1859_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (3) \quad x &amp;=&amp; A^{-1}(f - By) \quad \text{from} \quad (1) \\
   (4) \quad y &amp;=&amp; D^{-1}(g - Cx) \quad \text{from} \quad (2) ,
-\end{eqnarray*}" src="form_1788.png"/></picture>
+\end{eqnarray*}" src="form_1859.png"/></picture>
 </p>
 <p> which amount to performing block Gaussian elimination on this system of equations.</p>
 <p>For the purpose of the current implementation, we choose to substitute (3) into (2)  </p><p class="formulaDsp">
-<picture><source srcset="form_1789_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_1860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   C \: A^{-1}(f - By) + Dy &amp;=&amp; g \\
   -C \: A^{-1} \: By + Dy &amp;=&amp; g - C \: A^{-1} \: f \quad .
-\end{eqnarray*}" src="form_1789.png"/></picture>
+\end{eqnarray*}" src="form_1860.png"/></picture>
 </p>
 <p> This leads to the result  </p><p class="formulaDsp">
-<picture><source srcset="form_1790_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (5) \quad (D - C\: A^{-1} \:B)y  = g - C \: A^{-1} f
       \quad \Rightarrow \quad Sy = g'
-\]" src="form_1790.png"/></picture>
+\]" src="form_1861.png"/></picture>
 </p>
-<p> with <picture><source srcset="form_1791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S = (D - C\: A^{-1} \:B) $" src="form_1791.png"/></picture> being the Schur complement and the modified right-hand side vector <picture><source srcset="form_1792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ g' = g - C \: A^{-1} f $" src="form_1792.png"/></picture> arising from the condensation step. Note that for this choice of <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1793.png"/></picture>, submatrix <picture><source srcset="form_1794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1794.png"/></picture> need not be invertible and may thus be the null matrix. Ideally <picture><source srcset="form_1795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A $" src="form_1795.png"/></picture> should be well-conditioned.</p>
-<p>So for any arbitrary vector <picture><source srcset="form_1796_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ a $" src="form_1796.png"/></picture>, the Schur complement performs the following operation:  </p><p class="formulaDsp">
-<picture><source srcset="form_1797_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> with <picture><source srcset="form_1862_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S = (D - C\: A^{-1} \:B) $" src="form_1862.png"/></picture> being the Schur complement and the modified right-hand side vector <picture><source srcset="form_1863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ g' = g - C \: A^{-1} f $" src="form_1863.png"/></picture> arising from the condensation step. Note that for this choice of <picture><source srcset="form_1864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1864.png"/></picture>, submatrix <picture><source srcset="form_1865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1865.png"/></picture> need not be invertible and may thus be the null matrix. Ideally <picture><source srcset="form_1866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A $" src="form_1866.png"/></picture> should be well-conditioned.</p>
+<p>So for any arbitrary vector <picture><source srcset="form_1867_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ a $" src="form_1867.png"/></picture>, the Schur complement performs the following operation:  </p><p class="formulaDsp">
+<picture><source srcset="form_1868_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (6) \quad Sa = (D - C \: A^{-1} \: B)a
-\]" src="form_1797.png"/></picture>
+\]" src="form_1868.png"/></picture>
 </p>
 <p>A typical set of steps needed the solve a linear system (1),(2) would be:</p><ol type="1">
 <li>Define the inverse matrix <code>A_inv</code> (using <a class="el" href="#href_anchor">inverse_operator()</a>).</li>
-<li>Define the Schur complement <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1793.png"/></picture> (using <a class="el" href="#href_anchor">schur_complement()</a>).</li>
-<li>Define iterative inverse matrix <picture><source srcset="form_1798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1798.png"/></picture> such that (6) holds. It is necessary to use a solver with a preconditioner to compute the approximate inverse operation of <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1793.png"/></picture> since we never compute <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1793.png"/></picture> directly, but rather the result of its operation. To achieve this, one may again use the <a class="el" href="#href_anchor">inverse_operator()</a> in conjunction with the Schur complement that we've just constructed. Observe that the both <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1793.png"/></picture> and its preconditioner operate over the same space as <picture><source srcset="form_1794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1794.png"/></picture>.</li>
+<li>Define the Schur complement <picture><source srcset="form_1864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1864.png"/></picture> (using <a class="el" href="#href_anchor">schur_complement()</a>).</li>
+<li>Define iterative inverse matrix <picture><source srcset="form_1869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1869.png"/></picture> such that (6) holds. It is necessary to use a solver with a preconditioner to compute the approximate inverse operation of <picture><source srcset="form_1864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1864.png"/></picture> since we never compute <picture><source srcset="form_1864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1864.png"/></picture> directly, but rather the result of its operation. To achieve this, one may again use the <a class="el" href="#href_anchor">inverse_operator()</a> in conjunction with the Schur complement that we've just constructed. Observe that the both <picture><source srcset="form_1864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1864.png"/></picture> and its preconditioner operate over the same space as <picture><source srcset="form_1865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1865.png"/></picture>.</li>
 <li>Perform pre-processing step on the RHS of (5) using <a class="el" href="#href_anchor">condense_schur_rhs()</a>:  <p class="formulaDsp">
-<picture><source srcset="form_1799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1870_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
      g' = g - C \: A^{-1} \: f
-   \]" src="form_1799.png"/></picture>
+   \]" src="form_1870.png"/></picture>
 </p>
 </li>
-<li>Solve for <picture><source srcset="form_1800_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ y $" src="form_1800.png"/></picture> in (5):  <p class="formulaDsp">
-<picture><source srcset="form_1801_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<li>Solve for <picture><source srcset="form_1871_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ y $" src="form_1871.png"/></picture> in (5):  <p class="formulaDsp">
+<picture><source srcset="form_1872_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
      y =  S^{-1} g'
-   \]" src="form_1801.png"/></picture>
+   \]" src="form_1872.png"/></picture>
 </p>
 </li>
 <li>Perform the post-processing step from (3) using <a class="el" href="#href_anchor">postprocess_schur_solution()</a>:  <p class="formulaDsp">
-<picture><source srcset="form_1802_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1873_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
      x =  A^{-1} (f - By)
-   \]" src="form_1802.png"/></picture>
+   \]" src="form_1873.png"/></picture>
 </p>
 </li>
 </ol>
@@ -1567,10 +1567,10 @@
 <div class="ttc" id="agroup__LAOperators_html_ga87e38fbde431397c069a88692bd24ae7"><div class="ttname"><a href="#href_anchor">inverse_operator</a></div><div class="ttdeci">LinearOperator&lt; Domain, Range, Payload &gt; inverse_operator(const LinearOperator&lt; Range, Domain, Payload &gt; &amp;op, Solver &amp;solver, const Preconditioner &amp;preconditioner)</div><div class="ttdef"><b>Definition</b> <a href="linear__operator_8h_source.html#href_anchor">linear_operator.h:701</a></div></div>
 <div class="ttc" id="agroup__LAOperators_html_gab965c40b54990bbcbc129a1cd218ee21"><div class="ttname"><a href="#href_anchor">postprocess_schur_solution</a></div><div class="ttdeci">PackagedOperation&lt; Domain_1 &gt; postprocess_schur_solution(const LinearOperator&lt; Range_1, Domain_1, Payload &gt; &amp;A_inv, const LinearOperator&lt; Range_1, Domain_2, Payload &gt; &amp;B, const Domain_2 &amp;y, const Range_1 &amp;f)</div><div class="ttdef"><b>Definition</b> <a href="schur__complement_8h_source.html#href_anchor">schur_complement.h:336</a></div></div>
 <div class="ttc" id="aschur__complement_8h_html"><div class="ttname"><a href="schur__complement_8h.html">schur_complement.h</a></div></div>
-</div><!-- fragment --><p>In the above example, the preconditioner for <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1793.png"/></picture> was defined as the preconditioner for <picture><source srcset="form_1794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1794.png"/></picture>, which is valid since they operate on the same space. However, if <picture><source srcset="form_1794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1794.png"/></picture> and <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1793.png"/></picture> are too dissimilar, then this may lead to a large number of solver iterations as <picture><source srcset="form_1803_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \text{prec}(D) $" src="form_1803.png"/></picture> is not a good approximation for <picture><source srcset="form_1798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1798.png"/></picture>.</p>
-<p>A better preconditioner in such a case would be one that provides a more representative approximation for <picture><source srcset="form_1798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1798.png"/></picture>. One approach is shown in <a class="el" href="step_22.html">step-22</a>, where <picture><source srcset="form_1794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1794.png"/></picture> is the null matrix and the preconditioner for <picture><source srcset="form_1804_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1}
-$" src="form_1804.png"/></picture> is derived from the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> over this space.</p>
-<p>From another viewpoint, a similar result can be achieved by first constructing an object that represents an approximation for <picture><source srcset="form_1793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1793.png"/></picture> wherein expensive operation, namely <picture><source srcset="form_1805_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A^{-1} $" src="form_1805.png"/></picture>, is approximated. Thereafter we construct the approximate inverse operator <picture><source srcset="form_1806_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \tilde{S}^{-1} $" src="form_1806.png"/></picture> which is then used as the preconditioner for computing <picture><source srcset="form_1798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1798.png"/></picture>. </p><div class="fragment"><div class="line"><span class="comment">// Construction of approximate inverse of Schur complement</span></div>
+</div><!-- fragment --><p>In the above example, the preconditioner for <picture><source srcset="form_1864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1864.png"/></picture> was defined as the preconditioner for <picture><source srcset="form_1865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1865.png"/></picture>, which is valid since they operate on the same space. However, if <picture><source srcset="form_1865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1865.png"/></picture> and <picture><source srcset="form_1864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1864.png"/></picture> are too dissimilar, then this may lead to a large number of solver iterations as <picture><source srcset="form_1874_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \text{prec}(D) $" src="form_1874.png"/></picture> is not a good approximation for <picture><source srcset="form_1869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1869.png"/></picture>.</p>
+<p>A better preconditioner in such a case would be one that provides a more representative approximation for <picture><source srcset="form_1869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1869.png"/></picture>. One approach is shown in <a class="el" href="step_22.html">step-22</a>, where <picture><source srcset="form_1865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ D $" src="form_1865.png"/></picture> is the null matrix and the preconditioner for <picture><source srcset="form_1875_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1}
+$" src="form_1875.png"/></picture> is derived from the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> over this space.</p>
+<p>From another viewpoint, a similar result can be achieved by first constructing an object that represents an approximation for <picture><source srcset="form_1864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S $" src="form_1864.png"/></picture> wherein expensive operation, namely <picture><source srcset="form_1876_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A^{-1} $" src="form_1876.png"/></picture>, is approximated. Thereafter we construct the approximate inverse operator <picture><source srcset="form_1877_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \tilde{S}^{-1} $" src="form_1877.png"/></picture> which is then used as the preconditioner for computing <picture><source srcset="form_1869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1869.png"/></picture>. </p><div class="fragment"><div class="line"><span class="comment">// Construction of approximate inverse of Schur complement</span></div>
 <div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> A_inv_approx = <a class="code hl_function" href="#href_anchor">linear_operator</a>(preconditioner_A);</div>
 <div class="line"><span class="keyword">const</span> <span class="keyword">auto</span> S_approx = <a class="code hl_function" href="#href_anchor">schur_complement</a>(A_inv_approx,B,C,D);</div>
 <div class="line"> </div>
@@ -1593,8 +1593,8 @@
 <div class="line"><span class="comment">// Solve for y</span></div>
 <div class="line">y = S_inv * rhs;</div>
 <div class="line">x = <a class="code hl_function" href="#href_anchor">postprocess_schur_solution</a> (A_inv,B,y,f);</div>
-</div><!-- fragment --><p> Note that due to the construction of <code>S_inv_approx</code> and subsequently <code>S_inv</code>, there are a pair of nested iterative solvers which could collectively consume a lot of resources. Therefore care should be taken in the choices leading to the construction of the iterative inverse_operators. One might consider the use of a <a class="el" href="classIterationNumberControl.html">IterationNumberControl</a> (or a similar mechanism) to limit the number of inner solver iterations. This controls the accuracy of the approximate inverse operation <picture><source srcset="form_1806_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \tilde{S}^{-1} $" src="form_1806.png"/></picture> which acts only as the preconditioner for <picture><source srcset="form_1798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1798.png"/></picture>. Furthermore, the preconditioner to <picture><source srcset="form_1806_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \tilde{S}^{-1} $" src="form_1806.png"/></picture>, which in this example is <picture><source srcset="form_1807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$
-\text{prec}(D) $" src="form_1807.png"/></picture>, should ideally be computationally inexpensive.</p>
+</div><!-- fragment --><p> Note that due to the construction of <code>S_inv_approx</code> and subsequently <code>S_inv</code>, there are a pair of nested iterative solvers which could collectively consume a lot of resources. Therefore care should be taken in the choices leading to the construction of the iterative inverse_operators. One might consider the use of a <a class="el" href="classIterationNumberControl.html">IterationNumberControl</a> (or a similar mechanism) to limit the number of inner solver iterations. This controls the accuracy of the approximate inverse operation <picture><source srcset="form_1877_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \tilde{S}^{-1} $" src="form_1877.png"/></picture> which acts only as the preconditioner for <picture><source srcset="form_1869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ S^{-1} $" src="form_1869.png"/></picture>. Furthermore, the preconditioner to <picture><source srcset="form_1877_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \tilde{S}^{-1} $" src="form_1877.png"/></picture>, which in this example is <picture><source srcset="form_1878_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$
+\text{prec}(D) $" src="form_1878.png"/></picture>, should ideally be computationally inexpensive.</p>
 <p>However, if an iterative solver based on <a class="el" href="classIterationNumberControl.html">IterationNumberControl</a> is used as a preconditioner then the preconditioning operation is not a linear operation. Here a flexible solver like <a class="el" href="classSolverFGMRES.html">SolverFGMRES</a> (flexible GMRES) is best employed as an outer solver in order to deal with the variable behavior of the preconditioner. Otherwise the iterative solver can stagnate somewhere near the tolerance of the preconditioner or generally behave erratically. Alternatively, using a <a class="el" href="classReductionControl.html">ReductionControl</a> would ensure that the preconditioner always solves to the same tolerance, thereby rendering its behavior constant.</p>
 <p>Further examples of this functionality can be found in the test-suite, such as <code>tests/lac/schur_complement_01.cc</code> . The solution of a multi- component problem (namely <a class="el" href="step_22.html">step-22</a>) using the schur_complement can be found in <code>tests/lac/schur_complement_03.cc</code> .</p>
 <dl class="section see"><dt>See also</dt><dd><a class="el" href="DEALGlossary.html#href_anchor">Block (linear algebra)</a> </dd></dl>
@@ -1631,15 +1631,15 @@
           <td></td>
           <td class="paramtype">const Range_2 &amp;</td>          <td class="paramname"><span class="paramname"><em>g</em></span>&#href_anchor"memdoc">
 <p>For the system of equations  </p><p class="formulaDsp">
-<picture><source srcset="form_1808_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_1879_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   Ax + By &amp;=&amp; f \\
   Cx + Dy &amp;=&amp; g \quad ,
-\end{eqnarray*}" src="form_1808.png"/></picture>
+\end{eqnarray*}" src="form_1879.png"/></picture>
 </p>
 <p> this operation performs the pre-processing (condensation) step on the RHS subvector <code>g</code> so that the Schur complement can be used to solve this system of equations. More specifically, it produces an object that represents the condensed form of the subvector <code>g</code>, namely  </p><p class="formulaDsp">
-<picture><source srcset="form_1809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1880_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   g' = g - C \: A^{-1} \: f
-\]" src="form_1809.png"/></picture>
+\]" src="form_1880.png"/></picture>
 </p>
 <dl class="section see"><dt>See also</dt><dd><a class="el" href="DEALGlossary.html#href_anchor">Block (linear algebra)</a> </dd></dl>
 
@@ -1675,15 +1675,15 @@
           <td></td>
           <td class="paramtype">const Range_1 &amp;</td>          <td class="paramname"><span class="paramname"><em>f</em></span>&#href_anchor"memdoc">
 <p>For the system of equations  </p><p class="formulaDsp">
-<picture><source srcset="form_1808_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_1879_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   Ax + By &amp;=&amp; f \\
   Cx + Dy &amp;=&amp; g \quad ,
-\end{eqnarray*}" src="form_1808.png"/></picture>
+\end{eqnarray*}" src="form_1879.png"/></picture>
 </p>
 <p> this operation performs the post-processing step of the Schur complement to solve for the second subvector <code>x</code> once subvector <code>y</code> is known, with the result that  </p><p class="formulaDsp">
-<picture><source srcset="form_1810_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   x =  A^{-1}(f - By)
-\]" src="form_1810.png"/></picture>
+\]" src="form_1881.png"/></picture>
 </p>
 <dl class="section see"><dt>See also</dt><dd><a class="el" href="DEALGlossary.html#href_anchor">Block (linear algebra)</a> </dd></dl>
 
@@ -3052,7 +3052,7 @@
 <p>Return a <a class="el" href="classLinearOperator.html">LinearOperator</a> that performs the operations associated with the Schur complement. There are two additional helper functions, <a class="el" href="#href_anchor">condense_schur_rhs()</a> and <a class="el" href="#href_anchor">postprocess_schur_solution()</a>, that are likely necessary to be used in order to perform any useful tasks in linear algebra with this operator.</p>
 <p>We construct the definition of the Schur complement in the following way:</p>
 <p>Consider a general system of linear equations that can be decomposed into two major sets of equations:  </p><p class="formulaDsp">
-<picture><source srcset="form_1781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_1852_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \mathbf{K}\mathbf{d} = \mathbf{f}
 \quad \Rightarrow\quad
 \left(\begin{array}{cc}
@@ -3065,60 +3065,60 @@
 \left(\begin{array}{cc}
    f \\ g
 \end{array}\right),
-\end{eqnarray*}" src="form_1781.png"/></picture>
+\end{eqnarray*}" src="form_1852.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1782_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A,B,C,D $" src="form_1782.png"/></picture> represent general subblocks of the matrix <picture><source srcset="form_1783_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf{K} $" src="form_1783.png"/></picture> and, similarly, general subvectors of <picture><source srcset="form_1784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf{d},\mathbf{f} $" src="form_1784.png"/></picture> are given by <picture><source srcset="form_1785_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ x,y,f,g $" src="form_1785.png"/></picture> .</p>
+<p> where <picture><source srcset="form_1853_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ A,B,C,D $" src="form_1853.png"/></picture> represent general subblocks of the matrix <picture><source srcset="form_1854_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf{K} $" src="form_1854.png"/></picture> and, similarly, general subvectors of <picture><source srcset="form_1855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf{d},\mathbf{f} $" src="form_1855.png"/></picture> are given by <picture><source srcset="form_1856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ x,y,f,g $" src="form_1856.png"/></picture> .</p>
 <p>This is equivalent to the following two statements:  </p><p class="formulaDsp">
-<picture><source srcset="form_1786_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
/usr/share/doc/packages/dealii/doxygen/deal.II/group__UpdateFlags.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/group__UpdateFlags.html	2024-03-17 21:57:40.887218512 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/group__UpdateFlags.html	2024-03-17 21:57:40.891218537 +0000
@@ -124,7 +124,7 @@
     w_q,
   \]" src="form_272.png"/></picture>
 </p>
- where <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> indicates the index of the quadrature point, <picture><source srcset="form_273_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\bf x}_q$" src="form_273.png"/></picture> its location on the reference cell, and <picture><source srcset="form_274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_q$" src="form_274.png"/></picture> its weight.</li>
+ where <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> indicates the index of the quadrature point, <picture><source srcset="form_273_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\bf x}_q$" src="form_273.png"/></picture> its location on the reference cell, and <picture><source srcset="form_274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_q$" src="form_274.png"/></picture> its weight.</li>
 </ul>
 <p>In order to evaluate such an expression in an application code, we have to access three different kinds of objects: a quadrature object that describes locations <picture><source srcset="form_273_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\bf x}_q$" src="form_273.png"/></picture> and weights <picture><source srcset="form_274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_q$" src="form_274.png"/></picture> of quadrature points on the reference cell; a finite element object that describes the gradients <picture><source srcset="form_275_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat\nabla \varphi_i(\hat{\bf x}_q)$" src="form_275.png"/></picture> of shape functions on the unit cell; and a mapping object that provides the Jacobian as well as its determinant. Dealing with all these objects would be cumbersome and error prone.</p>
 <p>On the other hand, these three kinds of objects almost always appear together, and it is in fact very rare for deal.II application codes to do anything with quadrature, finite element, or mapping objects besides using them together. For this reason, deal.II uses the <a class="el" href="classFEValues.html">FEValues</a> abstraction combining information on the shape functions, the geometry of the actual mesh cell and a quadrature rule on a reference cell. Upon construction it takes one object of each of the three mentioned categories. Later, it can be "re-initialized" for a concrete grid cell and then provides mapped quadrature points and weights, mapped shape function values and derivatives as well as some properties of the transformation from the reference cell to the actual mesh cell.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/group__auto__symb__diff.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/group__auto__symb__diff.html	2024-03-17 21:57:40.931218784 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/group__auto__symb__diff.html	2024-03-17 21:57:40.935218808 +0000
@@ -103,7 +103,7 @@
 <tr class="separator:"><td class="memSeparator" colspan="2">&#href_anchor"memitem:namespaceDifferentiation_1_1SD" id="r_namespaceDifferentiation_1_1SD"><td class="memItemLeft" align="right" valign="top">namespace &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceDifferentiation_1_1SD.html">Differentiation::SD</a></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#href_anchor"details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <p>A module dedicated to the implementation of functions and classes that relate to automatic and symbolic differentiation. </p>
-<p>Below we provide a very brief introduction as to what automatic and symbolic differentiation are, what variations of these computational/numerical schemes exist, and how they are integrated within deal.II's framework. The purpose of all of these schemes is to automatically compute the derivative of functions, or approximations of it, in cases where one does not want to compute them by hand. Common examples are situations in the finite element context is where one wants to solve a nonlinear problem that is given by requiring that some residual <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u,\nabla u)=0$" src="form_3.png"/></picture> where <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> is a complicated function that needs to be differentiated to apply Newton's method; and situations where one is given a parameter dependent problem <picture><source srcset="form_5_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal A}(q,u,\nabla u) = f$" src="form_5.png"/></picture> and wants to form derivatives with regards to the parameters <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>, for example to optimize an output functional with regards to <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>, or for a sensitivity analysis with regards to <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>. One should think of <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> as design parameters: say, the width or shape of a wing, the stiffness coefficients of a material chosen to build an object, the power sent to a device, the chemical composition of the gases sent to a burner. In all of these cases, one should think of <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> and <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cal A$" src="form_7.png"/></picture> as <em>complicated</em> and cumbersome to differentiate &ndash; at least when doing it by hand. A relatively simple case of a nonlinear problem that already highlights the tedium of computing derivatives by hand is shown in <a class="el" href="step_15.html">step-15</a>. However, in reality, one might, for example, think about problems such as chemically reactive flows where the fluid equations have coefficients such as the density and viscosity that depend strongly and nonlinearly on the chemical composition, temperature, and pressure of the fluid at each point; and where the chemical species react with each other based on reaction coefficients that also depend nonlinearly and in complicated ways on the chemical composition, temperature, and pressure. In many cases, the exact formulas for all of these coefficients can take several lines to write out, may include exponentials and (harmonic or geometric) averages of several nonlinear terms, and/or may contain table lookup of and interpolation between data points. Just getting these terms right is difficult enough; computing derivatives of these terms is impractical in most applications and, in reality, impossible to get right. Higher derivatives are even more impossible to do without computer aid. Automatic or symbolic differentiation is a way out of this: One only has to implement the function that computes these coefficients in terms of their inputs only once, and gets the (correct!) derivatives without further coding effort (though at a non-negligible computational cost either at run time, compile time, or both).</p>
+<p>Below we provide a very brief introduction as to what automatic and symbolic differentiation are, what variations of these computational/numerical schemes exist, and how they are integrated within deal.II's framework. The purpose of all of these schemes is to automatically compute the derivative of functions, or approximations of it, in cases where one does not want to compute them by hand. Common examples are situations in the finite element context is where one wants to solve a nonlinear problem that is given by requiring that some residual <picture><source srcset="form_0_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u,\nabla u)=0$" src="form_0.png"/></picture> where <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> is a complicated function that needs to be differentiated to apply Newton's method; and situations where one is given a parameter dependent problem <picture><source srcset="form_2_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal A}(q,u,\nabla u) = f$" src="form_2.png"/></picture> and wants to form derivatives with regards to the parameters <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>, for example to optimize an output functional with regards to <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>, or for a sensitivity analysis with regards to <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>. One should think of <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> as design parameters: say, the width or shape of a wing, the stiffness coefficients of a material chosen to build an object, the power sent to a device, the chemical composition of the gases sent to a burner. In all of these cases, one should think of <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> and <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cal A$" src="form_4.png"/></picture> as <em>complicated</em> and cumbersome to differentiate &ndash; at least when doing it by hand. A relatively simple case of a nonlinear problem that already highlights the tedium of computing derivatives by hand is shown in <a class="el" href="step_15.html">step-15</a>. However, in reality, one might, for example, think about problems such as chemically reactive flows where the fluid equations have coefficients such as the density and viscosity that depend strongly and nonlinearly on the chemical composition, temperature, and pressure of the fluid at each point; and where the chemical species react with each other based on reaction coefficients that also depend nonlinearly and in complicated ways on the chemical composition, temperature, and pressure. In many cases, the exact formulas for all of these coefficients can take several lines to write out, may include exponentials and (harmonic or geometric) averages of several nonlinear terms, and/or may contain table lookup of and interpolation between data points. Just getting these terms right is difficult enough; computing derivatives of these terms is impractical in most applications and, in reality, impossible to get right. Higher derivatives are even more impossible to do without computer aid. Automatic or symbolic differentiation is a way out of this: One only has to implement the function that computes these coefficients in terms of their inputs only once, and gets the (correct!) derivatives without further coding effort (though at a non-negligible computational cost either at run time, compile time, or both).</p>
 <h1><a class="anchor" id="auto_diff_1"></a>
 Automatic differentiation</h1>
 <p><a href="https://en.wikipedia.org/wiki/Automatic_differentiation">Automatic differentiation </a> (commonly also referred to as algorithmic differentiation), is a numerical method that can be used to "automatically" compute the first, and perhaps higher-order, derivatives of function(s) with respect to one or more input variables. Although this comes at a certain computational cost, the benefits to using such a tool may be significant. When used correctly the derivatives of often complicated functions can be computed to a very high accuracy. Although the exact accuracy achievable by these frameworks largely depends on their underlying mathematical formulation, some implementations compute with a precision on the order of machine accuracy. Note that this is different to classical numerical differentiation (using, for example, a finite difference approximation of a function by evaluating it at different points), which has an accuracy that depends on both the perturbation size as well as the chosen finite-difference scheme; the error of these methods is measurably larger than well-formulated automatic differentiation approaches.</p>
@@ -151,38 +151,38 @@
 <li><em>reverse-mode</em> (or <em>reverse accumulation</em>) auto-differentiation.</li>
 </ul>
 <p>As a point of interest, the <em>optimal Jacobian accumulation</em>, which performs a minimal set of computations, lies somewhere between these two limiting cases. Its computation for a general composite function remains an open problem in graph theory.</p>
-<p>With the aid of the diagram below (it and some of the listed details courtesy of this <a href="https://en.wikipedia.org/wiki/Automatic_differentiation">Wikipedia article</a>), let us think about the representation of the calculation of the function <picture><source srcset="form_8_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f (\mathbf{x}) = \sin (x_{1}) + x_{1} x_{2}$" src="form_8.png"/></picture> and its derivatives:</p>
-<div class="twocolumn" style="width: 80%"> <div class="parent"> <div class="img" align="center"> <img src="https://upload.wikimedia.org/wikipedia/commons/a/a4/ForwardAccumulationAutomaticDifferentiation.png" alt="Forward mode automatic differentiation" width="400" class="inline"/> </div> <div class="text" align="center"> Forward mode automatic differentiation </div> </div> <div class="parent"> <div class="img" align="center"> <img src="https://upload.wikimedia.org/wikipedia/commons/a/a0/ReverseaccumulationAD.png" alt="Reverse mode automatic differentiation" width="400" class="inline"/> </div> <div class="text" align="center"> Reverse mode automatic differentiation </div> </div> </div><p>Specifically, we will briefly describe what forward and reverse auto-differentiation are. Note that in the diagram, along the edges of the graph in text are the directional derivative of function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture> with respect to the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>-th variable, represented by the notation <picture><source srcset="form_11_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dot{w} = \dfrac{d w}{d x_{i}}$" src="form_11.png"/></picture>. The specific computations used to render the function value and its directional derivatives for this example are tabulated in the <a href="https://en.wikipedia.org/wiki/Automatic_differentiation">source article</a>. For a second illustrative example, we refer the interested reader to <a href="http://www.columbia.edu/~ahd2125/post/2015/12/5/">this article</a>.</p>
-<p>Consider first that any composite function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>, here represented as having two independent variables, can be dissected into a composition of its elementary functions  </p><p class="formulaDsp">
-<picture><source srcset="form_13_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>With the aid of the diagram below (it and some of the listed details courtesy of this <a href="https://en.wikipedia.org/wiki/Automatic_differentiation">Wikipedia article</a>), let us think about the representation of the calculation of the function <picture><source srcset="form_5_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f (\mathbf{x}) = \sin (x_{1}) + x_{1} x_{2}$" src="form_5.png"/></picture> and its derivatives:</p>
+<div class="twocolumn" style="width: 80%"> <div class="parent"> <div class="img" align="center"> <img src="https://upload.wikimedia.org/wikipedia/commons/a/a4/ForwardAccumulationAutomaticDifferentiation.png" alt="Forward mode automatic differentiation" width="400" class="inline"/> </div> <div class="text" align="center"> Forward mode automatic differentiation </div> </div> <div class="parent"> <div class="img" align="center"> <img src="https://upload.wikimedia.org/wikipedia/commons/a/a0/ReverseaccumulationAD.png" alt="Reverse mode automatic differentiation" width="400" class="inline"/> </div> <div class="text" align="center"> Reverse mode automatic differentiation </div> </div> </div><p>Specifically, we will briefly describe what forward and reverse auto-differentiation are. Note that in the diagram, along the edges of the graph in text are the directional derivative of function <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture> with respect to the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>-th variable, represented by the notation <picture><source srcset="form_8_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dot{w} = \dfrac{d w}{d x_{i}}$" src="form_8.png"/></picture>. The specific computations used to render the function value and its directional derivatives for this example are tabulated in the <a href="https://en.wikipedia.org/wiki/Automatic_differentiation">source article</a>. For a second illustrative example, we refer the interested reader to <a href="http://www.columbia.edu/~ahd2125/post/2015/12/5/">this article</a>.</p>
+<p>Consider first that any composite function <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>, here represented as having two independent variables, can be dissected into a composition of its elementary functions  </p><p class="formulaDsp">
+<picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   f (\mathbf{x})
   = f_{0} \circ f_{1} \circ f_{2} \circ \ldots \circ f_{n} (\mathbf{x})
   \quad .
-\]" src="form_13.png"/></picture>
+\]" src="form_10.png"/></picture>
 </p>
-<p> As was previously mentioned, if each of the primitive operations <picture><source srcset="form_14_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_{n}$" src="form_14.png"/></picture> is smooth and differentiable, then the chain-rule can be universally employed to compute the total derivative of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture>, namely <picture><source srcset="form_16_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f(x)}{d \mathbf{x}}$" src="form_16.png"/></picture>. What distinguishes the "forward" from the "reverse" mode is how the chain-rule is evaluated, but ultimately both compute the total derivative  </p><p class="formulaDsp">
-<picture><source srcset="form_17_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> As was previously mentioned, if each of the primitive operations <picture><source srcset="form_11_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_{n}$" src="form_11.png"/></picture> is smooth and differentiable, then the chain-rule can be universally employed to compute the total derivative of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture>, namely <picture><source srcset="form_13_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f(x)}{d \mathbf{x}}$" src="form_13.png"/></picture>. What distinguishes the "forward" from the "reverse" mode is how the chain-rule is evaluated, but ultimately both compute the total derivative  </p><p class="formulaDsp">
+<picture><source srcset="form_14_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \dfrac{d f (\mathbf{x})}{d \mathbf{x}}
   = \dfrac{d f_{0}}{d f_{1}} \dfrac{d f_{1}}{d f_{2}} \dfrac{d f_{2}}{d f_{3}} \ldots \dfrac{d f_{n} (\mathbf{x})}{d \mathbf{x}}
   \quad .
-\]" src="form_17.png"/></picture>
+\]" src="form_14.png"/></picture>
 </p>
-<p>In forward-mode, the chain-rule is computed naturally from the "inside out". The independent variables are therefore fixed, and each sub-function <picture><source srcset="form_18_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f'_{i} \vert_{f'_{i+1}}$" src="form_18.png"/></picture> is computed recursively and its result returned as inputs to the parent function. Encapsulating and fixing the order of operations using parentheses, this means that we compute  </p><p class="formulaDsp">
-<picture><source srcset="form_19_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>In forward-mode, the chain-rule is computed naturally from the "inside out". The independent variables are therefore fixed, and each sub-function <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f'_{i} \vert_{f'_{i+1}}$" src="form_15.png"/></picture> is computed recursively and its result returned as inputs to the parent function. Encapsulating and fixing the order of operations using parentheses, this means that we compute  </p><p class="formulaDsp">
+<picture><source srcset="form_16_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \dfrac{d f (\mathbf{x})}{d \mathbf{x}}
   = \dfrac{d f_{0}}{d f_{1}} \left( \dfrac{d f_{1}}{d f_{2}} \left(\dfrac{d f_{2}}{d f_{3}} \left(\ldots \left( \dfrac{d f_{n} (\mathbf{x})}{d \mathbf{x}} \right)\right)\right)\right)
   \quad .
-\]" src="form_19.png"/></picture>
+\]" src="form_16.png"/></picture>
 </p>
 <p> The computational complexity of a forward-sweep is proportional to that of the input function. However, for each directional derivative that is to be computed one sweep of the computational graph is required.</p>
 <p>In reverse-mode, the chain-rule is computed somewhat unnaturally from the "outside in". The values of the dependent variables first get computed and fixed, and then the preceding differential operations are evaluated and multiplied in succession with the previous results from left to right. Again, if we encapsulate and fix the order of operations using parentheses, this implies that the reverse calculation is performed by  </p><p class="formulaDsp">
-<picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_17_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \dfrac{d f (\mathbf{x})}{d \mathbf{x}}
   = \left( \left( \left( \left( \left( \dfrac{d f_{0}}{d f_{1}} \right) \dfrac{d f_{1}}{d f_{2}} \right) \dfrac{d f_{2}}{d f_{3}} \right) \ldots \right) \dfrac{d f_{n} (\mathbf{x})}{d \mathbf{x}} \right)
   \quad .
-\]" src="form_20.png"/></picture>
+\]" src="form_17.png"/></picture>
 </p>
-<p> The intermediate values <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f_{i-1}}{d f_{i}}$" src="form_21.png"/></picture> are known as <em>adjoints</em>, which must be computed and stored as the computational graph is traversed. However, for each dependent scalar function one sweep of the computational graph renders all directional derivatives at once.</p>
+<p> The intermediate values <picture><source srcset="form_18_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f_{i-1}}{d f_{i}}$" src="form_18.png"/></picture> are known as <em>adjoints</em>, which must be computed and stored as the computational graph is traversed. However, for each dependent scalar function one sweep of the computational graph renders all directional derivatives at once.</p>
 <p>Overall, the efficiency of each mode is determined by the number of independent (input) variables and dependent (output) variables. If the outputs greatly exceed the inputs in number, then forward-mode can be shown to be more efficient than reverse-mode. The converse is true when the number of input variables greatly exceeds that of the output variables. This point may be used to help inform which number type is most suitable for which set of operations are to be performed using automatic differentiation. For example, in many applications for which second derivatives are to be computed it is appropriate to combine both reverse- and forward-modes. The former would then typically be used to calculate the first derivatives, and the latter the second derivatives.</p>
 <h2><a class="anchor" id="auto_diff_1_1"></a>
 Supported automatic differentiation libraries</h2>
@@ -330,7 +330,7 @@
 <h1><a class="anchor" id="symb_diff_1"></a>
 Symbolic expressions and differentiation</h1>
 <p><a href="https://en.wikipedia.org/wiki/Symbolic_differentiation">Symbolic differentiation</a> is, in terms of its design and usage, quite different to automatic differentiation. Underlying any symbolic library is a computer algebra system (CAS) that implements a language and collection of algorithms to manipulate symbolic (or "string-like") expressions. This is most similar, from a philosophical point of view, to how algebraic operations would be performed by hand.</p>
-<p>To help better distinguish between symbolic differentiation and numerical methods like automatic differentiation, let's consider a very simple example. Suppose that the function <picture><source srcset="form_33_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x,y) = [2x+1]^{y}$" src="form_33.png"/></picture>, where <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> and <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> are variables that are independent of one another. By applying the chain-rule, the derivatives of this function are simply <picture><source srcset="form_35_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f(x,y)}{d x} = 2y[2x+1]^{y-1}$" src="form_35.png"/></picture> and <picture><source srcset="form_38_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f(x,y)}{d y} = [2x+1]^{y} \ln(2x+1)$" src="form_38.png"/></picture>. These are exactly the results that you get from a CAS after defining the symbolic variables <code>x</code> and <code>y</code>, defining the symbolic expression <code>f = pow(2x+1, y)</code> and computing the derivatives <code>diff(f, x)</code> and <code>diff(f, y)</code>. At this point there is no assumption of what <code>x</code> and <code>y</code> represent; they may later be interpreted as plain (scalar) numbers, complex numbers, or something else for which the power and natural logarithm functions are well defined. Obviously this means that there is also no assumption about which point to evaluate either the expression or its derivatives. One could readily take the expression for <picture><source srcset="form_42_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f(x, y)}{d x}$" src="form_42.png"/></picture> and evaluate it at <picture><source srcset="form_43_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=1, y=2.5$" src="form_43.png"/></picture> and then later, with no recomputation of the derivative expression itself, evaluate it at <picture><source srcset="form_45_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=3.25, y=-6$" src="form_45.png"/></picture>. In fact, the interpretation of any symbolic variable or expression, and the inter-dependencies between variables, may be defined or redefined at any point during their manipulation; this leads to a degree of flexibility in computations that cannot be matched by auto-differentiation. For example, one could perform the permanent substitution <picture><source srcset="form_46_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(x) = \dfrac{d f(x, y)}{d x} \vert_{y=1}$" src="form_46.png"/></picture> and then recompute <picture><source srcset="form_47_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(x)$" src="form_47.png"/></picture> for several different values of <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>. One could also post-factum express an interdependency between <code>x</code> and <code>y</code>, such as <picture><source srcset="form_49_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y \rightarrow y(x) := 2x$" src="form_49.png"/></picture>. For such a case, this means that the initially computed derivatives <picture><source srcset="form_50_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f(x, y)}{d x} \rightarrow \dfrac{\partial f(x, y(x))}{\partial x} = 2y(x) [2x+1]^{y(x)-1} = 4x[2x+1]^{2x-1}$" src="form_50.png"/></picture> and <picture><source srcset="form_51_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f(x, y)}{d y} \rightarrow \dfrac{\partial f(x, y(x))}{\partial y} = [2x+1]^{y(x)} \ln(2x+1) = [2x+1]^{2x} \ln(2x+1)$" src="form_51.png"/></picture> truly represent partial derivatives rather than total derivatives. Of course, if such an inter-dependency was explicitly defined before the derivatives <picture><source srcset="form_52_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f(x, y(x))}{d x}$" src="form_52.png"/></picture> and <picture><source srcset="form_53_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f(x, y(x))}{d y}$" src="form_53.png"/></picture> are computed, then this could correspond to the total derivative (which is the only result that auto-differentiation is able to achieve for this example).</p>
+<p>To help better distinguish between symbolic differentiation and numerical methods like automatic differentiation, let's consider a very simple example. Suppose that the function <picture><source srcset="form_19_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x,y) = [2x+1]^{y}$" src="form_19.png"/></picture>, where <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> and <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> are variables that are independent of one another. By applying the chain-rule, the derivatives of this function are simply <picture><source srcset="form_22_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f(x,y)}{d x} = 2y[2x+1]^{y-1}$" src="form_22.png"/></picture> and <picture><source srcset="form_23_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f(x,y)}{d y} = [2x+1]^{y} \ln(2x+1)$" src="form_23.png"/></picture>. These are exactly the results that you get from a CAS after defining the symbolic variables <code>x</code> and <code>y</code>, defining the symbolic expression <code>f = pow(2x+1, y)</code> and computing the derivatives <code>diff(f, x)</code> and <code>diff(f, y)</code>. At this point there is no assumption of what <code>x</code> and <code>y</code> represent; they may later be interpreted as plain (scalar) numbers, complex numbers, or something else for which the power and natural logarithm functions are well defined. Obviously this means that there is also no assumption about which point to evaluate either the expression or its derivatives. One could readily take the expression for <picture><source srcset="form_24_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f(x, y)}{d x}$" src="form_24.png"/></picture> and evaluate it at <picture><source srcset="form_25_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=1, y=2.5$" src="form_25.png"/></picture> and then later, with no recomputation of the derivative expression itself, evaluate it at <picture><source srcset="form_26_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=3.25, y=-6$" src="form_26.png"/></picture>. In fact, the interpretation of any symbolic variable or expression, and the inter-dependencies between variables, may be defined or redefined at any point during their manipulation; this leads to a degree of flexibility in computations that cannot be matched by auto-differentiation. For example, one could perform the permanent substitution <picture><source srcset="form_27_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(x) = \dfrac{d f(x, y)}{d x} \vert_{y=1}$" src="form_27.png"/></picture> and then recompute <picture><source srcset="form_28_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(x)$" src="form_28.png"/></picture> for several different values of <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>. One could also post-factum express an interdependency between <code>x</code> and <code>y</code>, such as <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y \rightarrow y(x) := 2x$" src="form_29.png"/></picture>. For such a case, this means that the initially computed derivatives <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f(x, y)}{d x} \rightarrow \dfrac{\partial f(x, y(x))}{\partial x} = 2y(x) [2x+1]^{y(x)-1} = 4x[2x+1]^{2x-1}$" src="form_30.png"/></picture> and <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f(x, y)}{d y} \rightarrow \dfrac{\partial f(x, y(x))}{\partial y} = [2x+1]^{y(x)} \ln(2x+1) = [2x+1]^{2x} \ln(2x+1)$" src="form_31.png"/></picture> truly represent partial derivatives rather than total derivatives. Of course, if such an inter-dependency was explicitly defined before the derivatives <picture><source srcset="form_32_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f(x, y(x))}{d x}$" src="form_32.png"/></picture> and <picture><source srcset="form_33_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dfrac{d f(x, y(x))}{d y}$" src="form_33.png"/></picture> are computed, then this could correspond to the total derivative (which is the only result that auto-differentiation is able to achieve for this example).</p>
 <p>Due to the sophisticated CAS that forms the foundation of symbolic operations, the types of manipulations are not necessarily restricted to differentiation alone, but rather may span a spectrum of manipulations relevant to discrete differential calculus, topics in pure mathematics, and more. The documentation for the <a href="https://www.sympy.org/en/index.html">SymPy</a> library gives plenty of examples that highlight what a fully-fledged CAS is capable of. Through the <a class="el" href="classDifferentiation_1_1SD_1_1Expression.html">Differentiation::SD::Expression</a> class, and the associated functions in the <a class="el" href="namespaceDifferentiation_1_1SD.html">Differentiation::SD</a> namespace, we provide a wrapper to the high-performance <a href="https://github.com/symengine/symengine">SymEngine</a> symbolic manipulation library that has enriched operator overloading and a consistent interface that makes it easy and "natural" to use. In fact, this class can be used as a "drop-in" replacement for arithmetic types in many situations, transforming the operations from being numeric to symbolic in nature; this is made especially easy when classes are templated on the underlying number type. Being focused on numerical simulation of PDEs, the functionality of the CAS that is exposed within deal.II focuses on symbolic expression creation, manipulation, and differentiation.</p>
 <p>The convenience wrappers to SymEngine functionality are primarily focused on manipulations that solely involve dictionary-based (i.e., something reminiscent of "string-based") operations. Although SymEngine performs these operations in an efficient manner, they are still known to be computationally expensive, especially when the operations are performed on large expressions. It should therefore be expected that the performance of the parts of code that perform differentiation, symbolic substitution, etc., <b>may</b> be a limiting factor when using this in production code. deal.II therefore provides an interface to accelerate the evaluation of lengthy symbolic expression through the <code>BatchOptimizer</code> class (itself often leveraging functionality provided by SymEngine). In particular, the <code>BatchOptimizer</code> simultaneously optimizes a collection of symbolic expressions using methods such as common subexpression elimination (CSE), as well as by generating high performance code-paths to evaluate these expressions through the use of a custom-generated <code>std::function</code> or by compiling the expression using the LLVM JIT compiler. The usage of the <a class="el" href="classDifferentiation_1_1SD_1_1BatchOptimizer.html">Differentiation::SD::BatchOptimizer</a> class is exemplified in <a class="el" href="step_71.html">step-71</a>.</p>
 <p>As a final note, it is important to recognize the remaining major deficiencies in deal.II's current implementation of the interface to the supported symbolic library. The level of functionality currently implemented effectively limits the use of symbolic algebra to the traditional use case (i.e. scalar and tensor algebra, as might be useful to define constitutive relations or complex functions for application as boundary conditions or source terms). In fact, <a class="el" href="step_71.html">step-71</a> demonstrates how it can be used to implement challenging constitutive models. In the future we will also implement classes to assist in performing assembly operations in the same spirit as that which has been done in the <a class="el" href="namespaceDifferentiation_1_1AD.html">Differentiation::AD</a> namespace.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/group__constraints.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/group__constraints.html	2024-03-17 21:57:41.015219302 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/group__constraints.html	2024-03-17 21:57:41.011219279 +0000
@@ -206,22 +206,22 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <p>This module deals with constraints on degrees of freedom. The central class to deal with constraints is the <a class="el" href="classAffineConstraints.html">AffineConstraints</a> class.</p>
 <p>Constraints typically come from several sources, for example:</p><ul>
-<li>If you have Dirichlet-type boundary conditions, <picture><source srcset="form_22_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u|_{\partial\Omega}=g$" src="form_22.png"/></picture>, one usually enforces them by requiring that degrees of freedom on the boundary have particular values, for example <picture><source srcset="form_23_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_{12}=42$" src="form_23.png"/></picture> if the boundary condition <picture><source srcset="form_24_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(\mathbf x)$" src="form_24.png"/></picture> requires that the finite element solution <picture><source srcset="form_25_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)$" src="form_25.png"/></picture> at the location of degree of freedom 12 has the value 42. Such constraints are generated by those versions of the <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::interpolate_boundary_values</a> function that take a <a class="el" href="classAffineConstraints.html">AffineConstraints</a> argument (though there are also other ways of dealing with Dirichlet conditions, using <a class="el" href="namespaceMatrixTools.html#href_anchor">MatrixTools::apply_boundary_values</a>, see for example <a class="el" href="step_3.html">step-3</a> and <a class="el" href="step_4.html">step-4</a>).</li>
-<li>If you have boundary conditions that set a certain part of the solution's value, for example no normal flux, <picture><source srcset="form_26_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n \cdot
-  \mathbf u=0$" src="form_26.png"/></picture> (as happens in flow problems and is handled by the <a class="el" href="#href_anchor">VectorTools::compute_no_normal_flux_constraints</a> function) or prescribed tangential components, <picture><source srcset="form_27_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}\times\mathbf{u}=
-  \mathbf{n}\times\mathbf{f}$" src="form_27.png"/></picture> (as happens in electromagnetic problems and is handled by the VectorTools::project_boundary_values_curl_conforming function). For the former case, imagine for example that we are at at vertex where the normal vector has the form <picture><source srcset="form_28_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 1{\sqrt{14}}
-  (1,2,3)^T$" src="form_28.png"/></picture> and that the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>-, <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>- and <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>-components of the flow field at this vertex are associated with degrees of freedom 12, 28, and 40. Then the no-normal-flux condition means that we need to have the condition <picture><source srcset="form_32_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 1{\sqrt{14}} (x_{12}+2x_{28}+3x_{40})=0$" src="form_32.png"/></picture>. The prescribed tangential component leads to similar constraints though there is often something on the right hand side.</li>
+<li>If you have Dirichlet-type boundary conditions, <picture><source srcset="form_37_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u|_{\partial\Omega}=g$" src="form_37.png"/></picture>, one usually enforces them by requiring that degrees of freedom on the boundary have particular values, for example <picture><source srcset="form_38_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_{12}=42$" src="form_38.png"/></picture> if the boundary condition <picture><source srcset="form_39_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(\mathbf x)$" src="form_39.png"/></picture> requires that the finite element solution <picture><source srcset="form_40_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)$" src="form_40.png"/></picture> at the location of degree of freedom 12 has the value 42. Such constraints are generated by those versions of the <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::interpolate_boundary_values</a> function that take a <a class="el" href="classAffineConstraints.html">AffineConstraints</a> argument (though there are also other ways of dealing with Dirichlet conditions, using <a class="el" href="namespaceMatrixTools.html#href_anchor">MatrixTools::apply_boundary_values</a>, see for example <a class="el" href="step_3.html">step-3</a> and <a class="el" href="step_4.html">step-4</a>).</li>
+<li>If you have boundary conditions that set a certain part of the solution's value, for example no normal flux, <picture><source srcset="form_41_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n \cdot
+  \mathbf u=0$" src="form_41.png"/></picture> (as happens in flow problems and is handled by the <a class="el" href="#href_anchor">VectorTools::compute_no_normal_flux_constraints</a> function) or prescribed tangential components, <picture><source srcset="form_42_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}\times\mathbf{u}=
+  \mathbf{n}\times\mathbf{f}$" src="form_42.png"/></picture> (as happens in electromagnetic problems and is handled by the VectorTools::project_boundary_values_curl_conforming function). For the former case, imagine for example that we are at at vertex where the normal vector has the form <picture><source srcset="form_43_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 1{\sqrt{14}}
+  (1,2,3)^T$" src="form_43.png"/></picture> and that the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>-, <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>- and <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>-components of the flow field at this vertex are associated with degrees of freedom 12, 28, and 40. Then the no-normal-flux condition means that we need to have the condition <picture><source srcset="form_45_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 1{\sqrt{14}} (x_{12}+2x_{28}+3x_{40})=0$" src="form_45.png"/></picture>. The prescribed tangential component leads to similar constraints though there is often something on the right hand side.</li>
 <li>If you have hanging node constraints, for example in a mesh like this: <div class="image">
 <img src="hanging_nodes.png" alt=""/>
 </div>
- Let's assume the bottom right one of the two red degrees of freedom is <picture><source srcset="form_34_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_{12}$" src="form_34.png"/></picture> and that the two yellow neighbors on its left and right are <picture><source srcset="form_36_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_{28}$" src="form_36.png"/></picture> and <picture><source srcset="form_37_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_{40}$" src="form_37.png"/></picture>. Then, requiring that the finite element function be continuous is equivalent to requiring that <picture><source srcset="form_39_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_{12}=
-  \frac 12 (x_{28}+x_{40})$" src="form_39.png"/></picture>. A similar situation occurs in the context of hp-adaptive finite element methods. For example, when using Q1 and Q2 elements (i.e. using <a class="el" href="classFE__Q.html">FE_Q(1)</a> and <a class="el" href="classFE__Q.html">FE_Q(2)</a>) on the two marked cells of the mesh <div class="image">
+ Let's assume the bottom right one of the two red degrees of freedom is <picture><source srcset="form_46_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_{12}$" src="form_46.png"/></picture> and that the two yellow neighbors on its left and right are <picture><source srcset="form_47_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_{28}$" src="form_47.png"/></picture> and <picture><source srcset="form_48_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_{40}$" src="form_48.png"/></picture>. Then, requiring that the finite element function be continuous is equivalent to requiring that <picture><source srcset="form_49_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_{12}=
+  \frac 12 (x_{28}+x_{40})$" src="form_49.png"/></picture>. A similar situation occurs in the context of hp-adaptive finite element methods. For example, when using Q1 and Q2 elements (i.e. using <a class="el" href="classFE__Q.html">FE_Q(1)</a> and <a class="el" href="classFE__Q.html">FE_Q(2)</a>) on the two marked cells of the mesh <div class="image">
 <img src="hp-refinement-simple.png" alt=""/>
 </div>
- there are three constraints: first <picture><source srcset="form_40_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_2=\frac 12 x_0 + \frac 12 x_1$" src="form_40.png"/></picture>, then <picture><source srcset="form_41_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_4=\frac 14 x_0 + \frac 34 x_1$" src="form_41.png"/></picture>, and finally the identity <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_3=x_1$" src="form_44.png"/></picture>. Similar constraints occur as hanging nodes even if all cells used the same finite elements. In all of these cases, you would use the <a class="el" href="#href_anchor">DoFTools::make_hanging_node_constraints</a> function to compute such constraints.</li>
+ there are three constraints: first <picture><source srcset="form_50_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_2=\frac 12 x_0 + \frac 12 x_1$" src="form_50.png"/></picture>, then <picture><source srcset="form_51_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_4=\frac 14 x_0 + \frac 34 x_1$" src="form_51.png"/></picture>, and finally the identity <picture><source srcset="form_52_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_3=x_1$" src="form_52.png"/></picture>. Similar constraints occur as hanging nodes even if all cells used the same finite elements. In all of these cases, you would use the <a class="el" href="#href_anchor">DoFTools::make_hanging_node_constraints</a> function to compute such constraints.</li>
 <li>Other linear constraints, for example when you try to impose a certain average value for a problem that would otherwise not have a unique solution. An example of this is given in the <a class="el" href="step_11.html">step-11</a> tutorial program.</li>
 </ul>
-<p>In all of these examples, constraints on degrees of freedom are linear and possibly inhomogeneous. In other words, they always have the form <picture><source srcset="form_48_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_{i_1} = \sum_{j=2}^M a_{i_j} x_{i_j} + b_i$" src="form_48.png"/></picture>. The deal.II class that deals with storing and using these constraints is <a class="el" href="classAffineConstraints.html">AffineConstraints</a>.</p>
+<p>In all of these examples, constraints on degrees of freedom are linear and possibly inhomogeneous. In other words, they always have the form <picture><source srcset="form_53_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_{i_1} = \sum_{j=2}^M a_{i_j} x_{i_j} + b_i$" src="form_53.png"/></picture>. The deal.II class that deals with storing and using these constraints is <a class="el" href="classAffineConstraints.html">AffineConstraints</a>.</p>
 <h3>Eliminating constraints</h3>
 <p>When building the global system matrix and the right hand sides, one can build them without taking care of the constraints, i.e. by simply looping over cells and adding the local contributions to the global matrix and right hand side objects. In order to do actual calculations, you have to 'condense' the linear system: eliminate constrained degrees of freedom and distribute the appropriate values to the unconstrained dofs. This changes the sparsity pattern of the sparse matrices used in finite element calculations and is thus a quite expensive operation. The general scheme of things is then that you build your system, you eliminate (condense) away constrained nodes using the <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::condense()</a> functions, then you solve the remaining system, and finally you compute the values of constrained nodes from the values of the unconstrained ones using the <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::distribute()</a> function. Note that the <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::condense()</a> function is applied to matrix and right hand side of the linear system, while the <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::distribute()</a> function is applied to the solution vector.</p>
 <p>This scheme of first building a linear system and then eliminating constrained degrees of freedom is inefficient, and a bottleneck if there are many constraints and matrices are full, i.e. especially for 3d and/or higher order or hp-finite elements. Furthermore, it is impossible to implement for parallel computations where a process may not have access to elements of the matrix. We therefore offer a second way of building linear systems, using the <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::add_entries_local_to_global()</a> and <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::distribute_local_to_global()</a> functions discussed below. The resulting linear systems are equivalent to those one gets after calling the <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::condense()</a> functions.</p>
@@ -284,7 +284,7 @@
 <p>There are situations where degrees of freedom are constrained in more than one way, and sometimes in conflicting ways. Consider, for example the following situation: </p><div class="image">
 <img src="conflicting_constraints.png" alt=""/>
 </div>
-<p> Here, degree of freedom <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture> marked in blue is a hanging node. If we used trilinear finite elements, i.e. <a class="el" href="classFE__Q.html">FE_Q(1)</a>, then it would carry the constraint <picture><source srcset="form_64_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0=\frac 12 (x_{1}+x_{2})$" src="form_64.png"/></picture>. On the other hand, it is at the boundary, and if we have imposed boundary conditions <picture><source srcset="form_22_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u|_{\partial\Omega}=g$" src="form_22.png"/></picture> then we will have the constraint <picture><source srcset="form_65_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0=g_0$" src="form_65.png"/></picture> where <picture><source srcset="form_66_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_0$" src="form_66.png"/></picture> is the value of the boundary function <picture><source srcset="form_24_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(\mathbf x)$" src="form_24.png"/></picture> at the location of this degree of freedom.</p>
+<p> Here, degree of freedom <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture> marked in blue is a hanging node. If we used trilinear finite elements, i.e. <a class="el" href="classFE__Q.html">FE_Q(1)</a>, then it would carry the constraint <picture><source srcset="form_64_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0=\frac 12 (x_{1}+x_{2})$" src="form_64.png"/></picture>. On the other hand, it is at the boundary, and if we have imposed boundary conditions <picture><source srcset="form_37_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u|_{\partial\Omega}=g$" src="form_37.png"/></picture> then we will have the constraint <picture><source srcset="form_65_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0=g_0$" src="form_65.png"/></picture> where <picture><source srcset="form_66_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_0$" src="form_66.png"/></picture> is the value of the boundary function <picture><source srcset="form_39_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(\mathbf x)$" src="form_39.png"/></picture> at the location of this degree of freedom.</p>
 <p>So, which one will win? Or maybe: which one <em>should</em> win? There is no good answer to this question:</p><ul>
 <li>If the hanging node constraint is the one that is ultimately enforced, then the resulting solution does not satisfy boundary conditions any more for general boundary functions <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture>.</li>
 <li>If it had been done the other way around, the solution would not satisfy hanging node constraints at this point and consequently would not satisfy the regularity properties of the element chosen (e.g. would not be continuous despite using a <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> element).</li>
@@ -303,7 +303,7 @@
 \]" src="form_70.png"/></picture>
 </p>
 <p> instead [1] (M. S. Shephard. Linear multipoint constraints applied via transformation as part of a direct stiffness assembly process. <em>International Journal for Numerical Methods in Engineering</em> 20(11):2107-2112, 1985).</p>
-<p>Here, <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is a given (unconstrained) system matrix for which we only assume that we can apply it to a vector but can not necessarily access individual matrix entries. <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> is the corresponding right hand side of a system of linear equations <picture><source srcset="form_73_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A\,x=b$" src="form_73.png"/></picture>. The matrix <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> describes the homogeneous part of the linear constraints stored in an <a class="el" href="classAffineConstraints.html">AffineConstraints</a> object and the vector <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> is the vector of corresponding inhomogeneities. More precisely, the <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::distribute()</a> operation applied on a vector <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> is the operation  </p><p class="formulaDsp">
+<p>Here, <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is a given (unconstrained) system matrix for which we only assume that we can apply it to a vector but can not necessarily access individual matrix entries. <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> is the corresponding right hand side of a system of linear equations <picture><source srcset="form_73_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A\,x=b$" src="form_73.png"/></picture>. The matrix <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> describes the homogeneous part of the linear constraints stored in an <a class="el" href="classAffineConstraints.html">AffineConstraints</a> object and the vector <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> is the vector of corresponding inhomogeneities. More precisely, the <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::distribute()</a> operation applied on a vector <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> is the operation  </p><p class="formulaDsp">
 <picture><source srcset="form_76_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  x \leftarrow C\,x+k.
 \]" src="form_76.png"/></picture>
@@ -370,7 +370,7 @@
       </table>
 </div><div class="memdoc">
 <p>Compute which entries of a matrix built on the given <code>dof_handler</code> may possibly be nonzero, and create a sparsity pattern object that represents these nonzero locations.</p>
-<p>This function computes the possible positions of non-zero entries in the global system matrix by <em>simulating</em> which entries one would write to during the actual assembly of a matrix. For this, the function assumes that each finite element basis function is non-zero on a cell only if its degree of freedom is associated with the interior, a face, an edge or a vertex of this cell. As a result, a matrix entry <picture><source srcset="form_794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij}$" src="form_794.png"/></picture> that is computed from two basis functions <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> and <picture><source srcset="form_1017_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j$" src="form_1017.png"/></picture> with (global) indices <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> (for example, using a bilinear form <picture><source srcset="form_1018_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij}=a(\varphi_i,\varphi_j)$" src="form_1018.png"/></picture>) can be non-zero only if these shape functions correspond to degrees of freedom that are defined on at least one common cell. Therefore, this function just loops over all cells, figures out the global indices of all degrees of freedom, and presumes that all matrix entries that couple any of these indices will result in a nonzero matrix entry. These will then be added to the sparsity pattern. As this process of generating the sparsity pattern does not take into account the equation to be solved later on, the resulting sparsity pattern is symmetric.</p>
+<p>This function computes the possible positions of non-zero entries in the global system matrix by <em>simulating</em> which entries one would write to during the actual assembly of a matrix. For this, the function assumes that each finite element basis function is non-zero on a cell only if its degree of freedom is associated with the interior, a face, an edge or a vertex of this cell. As a result, a matrix entry <picture><source srcset="form_794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij}$" src="form_794.png"/></picture> that is computed from two basis functions <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> and <picture><source srcset="form_971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j$" src="form_971.png"/></picture> with (global) indices <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> (for example, using a bilinear form <picture><source srcset="form_972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij}=a(\varphi_i,\varphi_j)$" src="form_972.png"/></picture>) can be non-zero only if these shape functions correspond to degrees of freedom that are defined on at least one common cell. Therefore, this function just loops over all cells, figures out the global indices of all degrees of freedom, and presumes that all matrix entries that couple any of these indices will result in a nonzero matrix entry. These will then be added to the sparsity pattern. As this process of generating the sparsity pattern does not take into account the equation to be solved later on, the resulting sparsity pattern is symmetric.</p>
 <p>This algorithm makes no distinction between shape functions on each cell, i.e., it simply couples all degrees of freedom on a cell with all other degrees of freedom on a cell. This is often the case, and always a safe assumption. However, if you know something about the structure of your operator and that it does not couple certain shape functions with certain test functions, then you can get a sparser sparsity pattern by calling a variant of the current function described below that allows to specify which vector components couple with which other vector components.</p>
 <p>The method described above lives on the assumption that coupling between degrees of freedom only happens if shape functions overlap on at least one cell. This is the case with most usual finite element formulations involving conforming elements. However, for formulations such as the Discontinuous Galerkin finite element method, the bilinear form contains terms on interfaces between cells that couple shape functions that live on one cell with shape functions that live on a neighboring cell. The current function would not see these couplings, and would consequently not allocate entries in the sparsity pattern. You would then get into trouble during matrix assembly because you try to write into matrix entries for which no space has been allocated in the sparsity pattern. This can be avoided by calling the <a class="el" href="#href_anchor">DoFTools::make_flux_sparsity_pattern()</a> function instead, which takes into account coupling between degrees of freedom on neighboring cells.</p>
 <p>There are other situations where bilinear forms contain non-local terms, for example in treating integral equations. These require different methods for building the sparsity patterns that depend on the exact formulation of the problem. You will have to do this yourself then.</p>
@@ -436,13 +436,13 @@
 <p>This function is a simple variation on the previous <a class="el" href="#href_anchor">make_sparsity_pattern()</a> function (see there for a description of all of the common arguments), but it provides functionality for vector finite elements that allows to be more specific about which variables couple in which equation.</p>
 <p>For example, if you wanted to solve the Stokes equations,</p>
 <p class="formulaDsp">
-<picture><source srcset="form_1019_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_973_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 -\Delta \mathbf u + \nabla p &amp;= 0,\\ \text{div}\ u &amp;= 0
-\end{align*}" src="form_1019.png"/></picture>
+\end{align*}" src="form_973.png"/></picture>
 </p>
-<p>in two space dimensions, using stable Q2/Q1 mixed elements (using the <a class="el" href="classFESystem.html">FESystem</a> class), then you don't want all degrees of freedom to couple in each equation. More specifically, in the first equation, only <picture><source srcset="form_1020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_x$" src="form_1020.png"/></picture> and <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> appear; in the second equation, only <picture><source srcset="form_1021_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_y$" src="form_1021.png"/></picture> and <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> appear; and in the third equation, only <picture><source srcset="form_1020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_x$" src="form_1020.png"/></picture> and <picture><source srcset="form_1021_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_y$" src="form_1021.png"/></picture> appear. (Note that this discussion only talks about vector components of the solution variable and the different equation, and has nothing to do with degrees of freedom, or in fact with any kind of discretization.) We can describe this by the following pattern of "couplings":</p>
+<p>in two space dimensions, using stable Q2/Q1 mixed elements (using the <a class="el" href="classFESystem.html">FESystem</a> class), then you don't want all degrees of freedom to couple in each equation. More specifically, in the first equation, only <picture><source srcset="form_974_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_x$" src="form_974.png"/></picture> and <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> appear; in the second equation, only <picture><source srcset="form_975_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_y$" src="form_975.png"/></picture> and <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> appear; and in the third equation, only <picture><source srcset="form_974_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_x$" src="form_974.png"/></picture> and <picture><source srcset="form_975_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_y$" src="form_975.png"/></picture> appear. (Note that this discussion only talks about vector components of the solution variable and the different equation, and has nothing to do with degrees of freedom, or in fact with any kind of discretization.) We can describe this by the following pattern of "couplings":</p>
 <p class="formulaDsp">
-<picture><source srcset="form_1022_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_976_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \left[
 \begin{array}{ccc}
   1 &amp; 0 &amp; 1 \\
@@ -450,7 +450,7 @@
   1 &amp; 1 &amp; 0
 \end{array}
 \right]
-\]" src="form_1022.png"/></picture>
+\]" src="form_976.png"/></picture>
 </p>
 <p>where "1" indicates that two variables (i.e., vector components of the <a class="el" href="classFESystem.html">FESystem</a>) couple in the respective equation, and a "0" means no coupling. These zeros imply that upon discretization via a standard finite element formulation, we will not write entries into the matrix that, for example, couple pressure test functions with pressure shape functions (and similar for the other zeros above). It is then a waste to allocate memory for these entries in the matrix and the sparsity pattern, and you can avoid this by creating a mask such as the one above that describes this to the (current) function that computes the sparsity pattern. As stated above, the mask shown above refers to components of the composed <a class="el" href="classFESystem.html">FESystem</a>, rather than to degrees of freedom or shape functions.</p>
 <p>This function is designed to accept a coupling pattern, like the one shown above, through the <code>couplings</code> parameter, which contains values of type <a class="el" href="namespaceDoFTools.html#href_anchor">Coupling</a>. It builds the matrix structure just like the previous function, but does not create matrix elements if not specified by the coupling pattern. If the couplings are symmetric, then so will be the resulting sparsity pattern.</p>
@@ -757,9 +757,9 @@
 <div class="ttc" id="agroup__constraints_html_ga814d426ef355ed315bb57cea21a7630a"><div class="ttname"><a href="#href_anchor">distribute_constraints_linear_operator</a></div><div class="ttdeci">LinearOperator&lt; Range, Domain, Payload &gt; distribute_constraints_linear_operator(const AffineConstraints&lt; typename Range::value_type &gt; &amp;constraints, const LinearOperator&lt; Range, Domain, Payload &gt; &amp;exemplar)</div><div class="ttdef"><b>Definition</b> <a href="constrained__linear__operator_8h_source.html#href_anchor">constrained_linear_operator.h:65</a></div></div>
 </div><!-- fragment --><p> and <code>Id_c</code> is the projection to the subspace consisting of all vector entries associated with constrained degrees of freedom.</p>
 <p>This <a class="el" href="classLinearOperator.html">LinearOperator</a> object is used together with <a class="el" href="#href_anchor">constrained_right_hand_side()</a> to build up the following modified system of linear equations:  </p><p class="formulaDsp">
-<picture><source srcset="form_1612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (C^T A C + Id_c) x = C^T (b - A\,k)
-\]" src="form_1612.png"/></picture>
+\]" src="form_1616.png"/></picture>
 </p>
 <p> with a given (unconstrained) system matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture>, right hand side <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture>, and linear constraints <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> with inhomogeneities <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>.</p>
 <p>A detailed explanation of this approach is given in the <a class="el" href="group__constraints.html">Constraints on degrees of freedom</a> module.</p>
@@ -795,9 +795,9 @@
 </div><!-- fragment --><p> with </p><div class="fragment"><div class="line">C = <a class="code hl_function" href="#href_anchor">distribute_constraints_linear_operator</a>(constraints, linop);</div>
 <div class="line">Ct = <a class="code hl_function" href="group__LAOperators.html#href_anchor">transpose_operator</a>(C);</div>
 </div><!-- fragment --><p>This <a class="el" href="classLinearOperator.html">LinearOperator</a> object is used together with <a class="el" href="#href_anchor">constrained_right_hand_side()</a> to build up the following modified system of linear equations:  </p><p class="formulaDsp">
-<picture><source srcset="form_1612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (C^T A C + Id_c) x = C^T (b - A\,k)
-\]" src="form_1612.png"/></picture>
+\]" src="form_1616.png"/></picture>
 </p>
 <p> with a given (unconstrained) system matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture>, right hand side <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture>, and linear constraints <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> with inhomogeneities <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>.</p>
 <p>A detailed explanation of this approach is given in the <a class="el" href="group__constraints.html">Constraints on degrees of freedom</a> module.</p>
@@ -1155,27 +1155,27 @@
 <p>This function is an updated version of the project_boundary_values_curl_conforming function. The intention is to fix a problem when using the previous function in conjunction with non- rectangular geometries (i.e. elements with non-rectangular faces). The L2-projection method used has been taken from the paper "Electromagnetic
 scattering simulation using an H (curl) conforming hp-finite element
 method in three dimensions" by PD Ledger, K Morgan and O Hassan ( Int. J. Num. Meth. Fluids, Volume 53, Issue 8, pages 1267-1296).</p>
-<p>This function will compute constraints that correspond to Dirichlet boundary conditions of the form <picture><source srcset="form_2235_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{n}\times\vec{E}=\vec{n}\times\vec{F}$" src="form_2235.png"/></picture> i.e. the tangential components of <picture><source srcset="form_2236_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{E}$" src="form_2236.png"/></picture> and <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> shall coincide.</p>
+<p>This function will compute constraints that correspond to Dirichlet boundary conditions of the form <picture><source srcset="form_2284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{n}\times\vec{E}=\vec{n}\times\vec{F}$" src="form_2284.png"/></picture> i.e. the tangential components of <picture><source srcset="form_2285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{E}$" src="form_2285.png"/></picture> and <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> shall coincide.</p>
 <h4>Computing constraints</h4>
 <p>To compute the constraints we use a projection method based upon the paper mentioned above. In 2d this is done in a single stage for the edge- based shape functions, regardless of the order of the finite element. In 3d this is done in two stages, edges first and then faces.</p>
-<p>For each cell, each edge, <picture><source srcset="form_2237_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e$" src="form_2237.png"/></picture>, is projected by solving the linear system <picture><source srcset="form_57_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=b$" src="form_57.png"/></picture> where <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> is the vector of constraints on degrees of freedom on the edge and</p>
-<p><picture><source srcset="form_2238_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij} = \int_{e} (\vec{s}_{i}\cdot\vec{t})(\vec{s}_{j}\cdot\vec{t}) dS$" src="form_2238.png"/></picture></p>
-<p><picture><source srcset="form_2239_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_{i} = \int_{e} (\vec{s}_{i}\cdot\vec{t})(\vec{F}\cdot\vec{t}) dS$" src="form_2239.png"/></picture></p>
-<p>with <picture><source srcset="form_2240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{s}_{i}$" src="form_2240.png"/></picture> the <picture><source srcset="form_2241_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i^{th}$" src="form_2241.png"/></picture> shape function and <picture><source srcset="form_2242_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{t}$" src="form_2242.png"/></picture> the tangent vector.</p>
-<p>Once all edge constraints, <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>, have been computed, we may compute the face constraints in a similar fashion, taking into account the residuals from the edges.</p>
-<p>For each face on the cell, <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture>, we solve the linear system <picture><source srcset="form_2243_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$By=c$" src="form_2243.png"/></picture> where <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> is the vector of constraints on degrees of freedom on the face and</p>
-<p><picture><source srcset="form_2244_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B_{ij} = \int_{f} (\vec{n} \times \vec{s}_{i}) \cdot (\vec{n} \times
-\vec{s}_{j}) dS$" src="form_2244.png"/></picture></p>
-<p><picture><source srcset="form_2245_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_{i} = \int_{f} (\vec{n} \times \vec{r}) \cdot (\vec{n} \times
-\vec{s}_i) dS$" src="form_2245.png"/></picture></p>
-<p>and <picture><source srcset="form_2246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{r} = \vec{F} - \sum_{e \in f} \sum{i \in e} x_{i}\vec{s}_i$" src="form_2246.png"/></picture>, the edge residual.</p>
-<p>The resulting constraints are then given in the solutions <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> and <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>.</p>
+<p>For each cell, each edge, <picture><source srcset="form_2286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e$" src="form_2286.png"/></picture>, is projected by solving the linear system <picture><source srcset="form_57_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=b$" src="form_57.png"/></picture> where <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> is the vector of constraints on degrees of freedom on the edge and</p>
+<p><picture><source srcset="form_2287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij} = \int_{e} (\vec{s}_{i}\cdot\vec{t})(\vec{s}_{j}\cdot\vec{t}) dS$" src="form_2287.png"/></picture></p>
+<p><picture><source srcset="form_2288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_{i} = \int_{e} (\vec{s}_{i}\cdot\vec{t})(\vec{F}\cdot\vec{t}) dS$" src="form_2288.png"/></picture></p>
+<p>with <picture><source srcset="form_2289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{s}_{i}$" src="form_2289.png"/></picture> the <picture><source srcset="form_2290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i^{th}$" src="form_2290.png"/></picture> shape function and <picture><source srcset="form_2291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{t}$" src="form_2291.png"/></picture> the tangent vector.</p>
+<p>Once all edge constraints, <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>, have been computed, we may compute the face constraints in a similar fashion, taking into account the residuals from the edges.</p>
+<p>For each face on the cell, <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture>, we solve the linear system <picture><source srcset="form_2292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$By=c$" src="form_2292.png"/></picture> where <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> is the vector of constraints on degrees of freedom on the face and</p>
+<p><picture><source srcset="form_2293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B_{ij} = \int_{f} (\vec{n} \times \vec{s}_{i}) \cdot (\vec{n} \times
+\vec{s}_{j}) dS$" src="form_2293.png"/></picture></p>
+<p><picture><source srcset="form_2294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_{i} = \int_{f} (\vec{n} \times \vec{r}) \cdot (\vec{n} \times
+\vec{s}_i) dS$" src="form_2294.png"/></picture></p>
+<p>and <picture><source srcset="form_2295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{r} = \vec{F} - \sum_{e \in f} \sum{i \in e} x_{i}\vec{s}_i$" src="form_2295.png"/></picture>, the edge residual.</p>
+<p>The resulting constraints are then given in the solutions <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> and <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>.</p>
 <p>If the <a class="el" href="classAffineConstraints.html">AffineConstraints</a> <code>constraints</code> contained values or other constraints before, the new ones are added or the old ones overwritten, if a node of the boundary part to be used was already in the list of constraints. This is handled by using inhomogeneous constraints. Please note that when combining adaptive meshes and this kind of constraints, the Dirichlet conditions should be set first, and then completed by hanging node constraints, in order to make sure that the discretization remains consistent. See the discussion on conflicting constraints in the module on <a class="el" href="group__constraints.html">Constraints on degrees of freedom</a>.</p>
 <h4>Arguments to this function</h4>
 <p>This function is explicitly for use with <a class="el" href="classFE__Nedelec.html">FE_Nedelec</a> elements, or with <a class="el" href="classFESystem.html">FESystem</a> elements which contain <a class="el" href="classFE__Nedelec.html">FE_Nedelec</a> elements. It will throw an exception if called with any other finite element. The user must ensure that <a class="el" href="classFESystem.html">FESystem</a> elements are correctly setup when using this function as this check not possible in this case.</p>
-<p>The second argument of this function denotes the first vector component of the finite element which corresponds to the vector function that you wish to constrain. For example, if we are solving Maxwell's equations in 3d and have components <picture><source srcset="form_2247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(E_x,E_y,E_z,B_x,B_y,B_z)$" src="form_2247.png"/></picture> and we want the boundary conditions <picture><source srcset="form_2248_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{n}\times\vec{B}=\vec{n}\times\vec{f}$" src="form_2248.png"/></picture>, then <code>first_vector_component</code> would be 3. The <code>boundary_function</code> must return 6 components in this example, with the first 3 corresponding to <picture><source srcset="form_2236_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{E}$" src="form_2236.png"/></picture> and the second 3 corresponding to <picture><source srcset="form_2249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{B}$" src="form_2249.png"/></picture>. Vectors are implicitly assumed to have exactly <code>dim</code> components that are ordered in the same way as we usually order the coordinate directions, i.e. <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>-, <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>-, and finally <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>-component.</p>
+<p>The second argument of this function denotes the first vector component of the finite element which corresponds to the vector function that you wish to constrain. For example, if we are solving Maxwell's equations in 3d and have components <picture><source srcset="form_2296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(E_x,E_y,E_z,B_x,B_y,B_z)$" src="form_2296.png"/></picture> and we want the boundary conditions <picture><source srcset="form_2297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{n}\times\vec{B}=\vec{n}\times\vec{f}$" src="form_2297.png"/></picture>, then <code>first_vector_component</code> would be 3. The <code>boundary_function</code> must return 6 components in this example, with the first 3 corresponding to <picture><source srcset="form_2285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{E}$" src="form_2285.png"/></picture> and the second 3 corresponding to <picture><source srcset="form_2298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{B}$" src="form_2298.png"/></picture>. Vectors are implicitly assumed to have exactly <code>dim</code> components that are ordered in the same way as we usually order the coordinate directions, i.e. <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>-, <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>-, and finally <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>-component.</p>
 <p>The parameter <code>boundary_component</code> corresponds to the number <code>boundary_id</code> of the face. <a class="el" href="namespacenumbers.html#href_anchor">numbers::internal_face_boundary_id</a> is an illegal value, since it is reserved for interior faces.</p>
-<p>The last argument is denoted to compute the normal vector <picture><source srcset="form_2233_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{n}$" src="form_2233.png"/></picture> at the boundary points.</p>
+<p>The last argument is denoted to compute the normal vector <picture><source srcset="form_2282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{n}$" src="form_2282.png"/></picture> at the boundary points.</p>
 <dl class="section see"><dt>See also</dt><dd><a class="el" href="DEALGlossary.html#href_anchor">Glossary entry on boundary indicators</a> </dd></dl>
 
 </div>
@@ -1258,11 +1258,11 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classMapping.html">Mapping</a>&lt; dim &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>mapping</em></span>&#href_anchor"memdoc">
-<p>Compute constraints that correspond to boundary conditions of the form <picture><source srcset="form_2250_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{n}^T\vec{u}=\vec{n}^T\vec{f}$" src="form_2250.png"/></picture>, i.e. the normal components of the solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> and a given <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> shall coincide. The function <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> is given by <code>boundary_function</code> and the resulting constraints are added to <code>constraints</code> for faces with boundary indicator <code>boundary_component</code>.</p>
+<p>Compute constraints that correspond to boundary conditions of the form <picture><source srcset="form_2299_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{n}^T\vec{u}=\vec{n}^T\vec{f}$" src="form_2299.png"/></picture>, i.e. the normal components of the solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> and a given <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> shall coincide. The function <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> is given by <code>boundary_function</code> and the resulting constraints are added to <code>constraints</code> for faces with boundary indicator <code>boundary_component</code>.</p>
 <p>This function is explicitly written to use with the <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> elements. Thus it throws an exception, if it is called with other finite elements.</p>
 <p>If the <a class="el" href="classAffineConstraints.html">AffineConstraints</a> object <code>constraints</code> contained values or other constraints before, the new ones are added or the old ones overwritten, if a node of the boundary part to be used was already in the list of constraints. This is handled by using inhomogeneous constraints. Please note that when combining adaptive meshes and this kind of constraints, the Dirichlet conditions should be set first, and then completed by hanging node constraints, in order to make sure that the discretization remains consistent. See the discussion on conflicting constraints in the module on <a class="el" href="group__constraints.html">Constraints on degrees of freedom</a>.</p>
-<p>The argument <code>first_vector_component</code> denotes the first vector component in the finite element that corresponds to the vector function <picture><source srcset="form_2251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{u}$" src="form_2251.png"/></picture> that you want to constrain. Vectors are implicitly assumed to have exactly <code>dim</code> components that are ordered in the same way as we usually order the coordinate directions, i.e., <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>-, <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>-, and finally <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>-component.</p>
-<p>The parameter <code>boundary_component</code> corresponds to the <code>boundary_id</code> of the faces where the boundary conditions are applied. <a class="el" href="namespacenumbers.html#href_anchor">numbers::internal_face_boundary_id</a> is an illegal value, since it is reserved for interior faces. The <code>mapping</code> is used to compute the normal vector <picture><source srcset="form_2233_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{n}$" src="form_2233.png"/></picture> at the boundary points.</p>
+<p>The argument <code>first_vector_component</code> denotes the first vector component in the finite element that corresponds to the vector function <picture><source srcset="form_2300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{u}$" src="form_2300.png"/></picture> that you want to constrain. Vectors are implicitly assumed to have exactly <code>dim</code> components that are ordered in the same way as we usually order the coordinate directions, i.e., <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>-, <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>-, and finally <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>-component.</p>
+<p>The parameter <code>boundary_component</code> corresponds to the <code>boundary_id</code> of the faces where the boundary conditions are applied. <a class="el" href="namespacenumbers.html#href_anchor">numbers::internal_face_boundary_id</a> is an illegal value, since it is reserved for interior faces. The <code>mapping</code> is used to compute the normal vector <picture><source srcset="form_2282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec{n}$" src="form_2282.png"/></picture> at the boundary points.</p>
 <h4>Computing constraints</h4>
 <p>To compute the constraints we use interpolation operator proposed in Brezzi, Fortin (Mixed and Hybrid Finite Element Methods, Springer, 1991) on every face located at the boundary.</p>
 <dl class="section see"><dt>See also</dt><dd><a class="el" href="DEALGlossary.html#href_anchor">Glossary entry on boundary indicators</a> </dd></dl>
@@ -1351,16 +1351,16 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>This function computes the constraints that correspond to boundary conditions of the form <picture><source srcset="form_2300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec u \cdot \vec n=\vec u_\Gamma \cdot \vec n$" src="form_2300.png"/></picture>, i.e., normal flux constraints where <picture><source srcset="form_2301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec u$" src="form_2301.png"/></picture> is a vector-valued solution variable and <picture><source srcset="form_2302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec u_\Gamma$" src="form_2302.png"/></picture> is a prescribed vector field whose normal component we want to be equal to the normal component of the solution. This function can also be used on level meshes in the multigrid method if <code>refinement_edge_indices</code> and <code>level</code> are provided, and the former can be obtained by <a class="el" href="classMGConstrainedDoFs.html#href_anchor">MGConstrainedDoFs::get_refinement_edge_indices()</a>. These conditions have exactly the form handled by the <a class="el" href="classAffineConstraints.html">AffineConstraints</a> class, in that they relate a <em>linear combination</em> of boundary degrees of freedom to a corresponding value (the inhomogeneity of the constraint). Consequently, the current function creates a list of constraints that are written into an <a class="el" href="classAffineConstraints.html">AffineConstraints</a> container. This object may already have some content, for example from hanging node constraints, that remains untouched. These constraints have to be applied to the linear system like any other such constraints, i.e., you have to condense the linear system with the constraints before solving, and you have to distribute the solution vector afterwards.</p>
-<p>This function treats a more general case than <a class="el" href="#href_anchor">VectorTools::compute_no_normal_flux_constraints()</a> (which can only handle the case where <picture><source srcset="form_2303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec u_\Gamma \cdot \vec n = 0$" src="form_2303.png"/></picture>, and is used in <a class="el" href="step_31.html">step-31</a> and <a class="el" href="step_32.html">step-32</a>). However, because everything that would apply to that function also applies as a special case to the current function, the following discussion is relevant to both.</p>
+<p>This function computes the constraints that correspond to boundary conditions of the form <picture><source srcset="form_2349_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec u \cdot \vec n=\vec u_\Gamma \cdot \vec n$" src="form_2349.png"/></picture>, i.e., normal flux constraints where <picture><source srcset="form_2350_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec u$" src="form_2350.png"/></picture> is a vector-valued solution variable and <picture><source srcset="form_2351_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec u_\Gamma$" src="form_2351.png"/></picture> is a prescribed vector field whose normal component we want to be equal to the normal component of the solution. This function can also be used on level meshes in the multigrid method if <code>refinement_edge_indices</code> and <code>level</code> are provided, and the former can be obtained by <a class="el" href="classMGConstrainedDoFs.html#href_anchor">MGConstrainedDoFs::get_refinement_edge_indices()</a>. These conditions have exactly the form handled by the <a class="el" href="classAffineConstraints.html">AffineConstraints</a> class, in that they relate a <em>linear combination</em> of boundary degrees of freedom to a corresponding value (the inhomogeneity of the constraint). Consequently, the current function creates a list of constraints that are written into an <a class="el" href="classAffineConstraints.html">AffineConstraints</a> container. This object may already have some content, for example from hanging node constraints, that remains untouched. These constraints have to be applied to the linear system like any other such constraints, i.e., you have to condense the linear system with the constraints before solving, and you have to distribute the solution vector afterwards.</p>
+<p>This function treats a more general case than <a class="el" href="#href_anchor">VectorTools::compute_no_normal_flux_constraints()</a> (which can only handle the case where <picture><source srcset="form_2352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec u_\Gamma \cdot \vec n = 0$" src="form_2352.png"/></picture>, and is used in <a class="el" href="step_31.html">step-31</a> and <a class="el" href="step_32.html">step-32</a>). However, because everything that would apply to that function also applies as a special case to the current function, the following discussion is relevant to both.</p>
 <dl class="section note"><dt>Note</dt><dd>This function doesn't make much sense in 1d, so it throws an exception if <code>dim</code> equals one.</dd></dl>
 <h4>Arguments to this function</h4>
-<p>The second argument of this function denotes the first vector component in the finite element that corresponds to the vector function that you want to constrain. For example, if we were solving a Stokes equation in 2d and the finite element had components <picture><source srcset="form_2134_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v,p)$" src="form_2134.png"/></picture>, then <code>first_vector_component</code> needs to be zero if you intend to constraint the vector <picture><source srcset="form_2304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v)^T \cdot \vec n = \vec u_\Gamma \cdot \vec n$" src="form_2304.png"/></picture>. On the other hand, if we solved the Maxwell equations in 3d and the finite element has components <picture><source srcset="form_2247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(E_x,E_y,E_z,B_x,B_y,B_z)$" src="form_2247.png"/></picture> and we want the boundary condition <picture><source srcset="form_2305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec
-B\cdot \vec n=\vec B_\Gamma\cdot \vec n$" src="form_2305.png"/></picture>, then <code>first_vector_component</code> would be 3. Vectors are implicitly assumed to have exactly <code>dim</code> components that are ordered in the same way as we usually order the coordinate directions, i.e. <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>-, <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>-, and finally <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>-component. The function assumes, but can't check, that the vector components in the range <code>[first_vector_component,first_vector_component+dim)</code> come from the same base finite element. For example, in the Stokes example above, it would not make sense to use a <code><a class="el" href="classFESystem.html">FESystem</a>&lt;dim&gt;(<a class="el" href="classFE__Q.html">FE_Q</a>&lt;dim&gt;(2), 1, <a class="el" href="classFE__Q.html">FE_Q</a>&lt;dim&gt;(1), dim)</code> (note that the first velocity vector component is a <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> element, whereas all the other ones are <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements) as there would be points on the boundary where the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>-velocity is defined but no corresponding <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>- or <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>-velocities.</p>
+<p>The second argument of this function denotes the first vector component in the finite element that corresponds to the vector function that you want to constrain. For example, if we were solving a Stokes equation in 2d and the finite element had components <picture><source srcset="form_2152_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v,p)$" src="form_2152.png"/></picture>, then <code>first_vector_component</code> needs to be zero if you intend to constraint the vector <picture><source srcset="form_2353_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v)^T \cdot \vec n = \vec u_\Gamma \cdot \vec n$" src="form_2353.png"/></picture>. On the other hand, if we solved the Maxwell equations in 3d and the finite element has components <picture><source srcset="form_2296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(E_x,E_y,E_z,B_x,B_y,B_z)$" src="form_2296.png"/></picture> and we want the boundary condition <picture><source srcset="form_2354_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec
+B\cdot \vec n=\vec B_\Gamma\cdot \vec n$" src="form_2354.png"/></picture>, then <code>first_vector_component</code> would be 3. Vectors are implicitly assumed to have exactly <code>dim</code> components that are ordered in the same way as we usually order the coordinate directions, i.e. <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>-, <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>-, and finally <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>-component. The function assumes, but can't check, that the vector components in the range <code>[first_vector_component,first_vector_component+dim)</code> come from the same base finite element. For example, in the Stokes example above, it would not make sense to use a <code><a class="el" href="classFESystem.html">FESystem</a>&lt;dim&gt;(<a class="el" href="classFE__Q.html">FE_Q</a>&lt;dim&gt;(2), 1, <a class="el" href="classFE__Q.html">FE_Q</a>&lt;dim&gt;(1), dim)</code> (note that the first velocity vector component is a <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> element, whereas all the other ones are <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements) as there would be points on the boundary where the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>-velocity is defined but no corresponding <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>- or <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>-velocities.</p>
 <p>The third argument denotes the set of boundary indicators on which the boundary condition is to be enforced. Note that, as explained below, this is one of the few functions where it makes a difference where we call the function multiple times with only one boundary indicator, or whether we call the function once with the whole set of boundary indicators at once.</p>
-<p>Argument four (<code>function_map</code>) describes the boundary function <picture><source srcset="form_2306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec
-u_\Gamma$" src="form_2306.png"/></picture> for each boundary id. The function <code>function_map[id]</code> is used on boundary with id <code>id</code> taken from the set <code>boundary_ids</code>. Each function in <code>function_map</code> is expected to have <code>dim</code> components, which are used independent of <code>first_vector_component</code>.</p>
-<p>The mapping argument is used to compute the boundary points at which the function needs to request the normal vector <picture><source srcset="form_2307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec n$" src="form_2307.png"/></picture> from the boundary description.</p>
+<p>Argument four (<code>function_map</code>) describes the boundary function <picture><source srcset="form_2355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec
+u_\Gamma$" src="form_2355.png"/></picture> for each boundary id. The function <code>function_map[id]</code> is used on boundary with id <code>id</code> taken from the set <code>boundary_ids</code>. Each function in <code>function_map</code> is expected to have <code>dim</code> components, which are used independent of <code>first_vector_component</code>.</p>
+<p>The mapping argument is used to compute the boundary points at which the function needs to request the normal vector <picture><source srcset="form_2356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec n$" src="form_2356.png"/></picture> from the boundary description.</p>
 <dl class="section note"><dt>Note</dt><dd>When combining adaptively refined meshes with hanging node constraints and boundary conditions like from the current function within one <a class="el" href="classAffineConstraints.html">AffineConstraints</a> object, the hanging node constraints should always be set first, and then the boundary conditions since boundary conditions are not set in the second operation on degrees of freedom that are already constrained. This makes sure that the discretization remains conforming as is needed. See the discussion on conflicting constraints in the module on <a class="el" href="group__constraints.html">Constraints on degrees of freedom</a>.</dd></dl>
 <h4>Computing constraints in 2d</h4>
 <p>Computing these constraints requires some smarts. The main question revolves around the question what the normal vector is. Consider the following situation:</p>
@@ -1368,23 +1368,23 @@
 <div class="image">
 <img src="no_normal_flux_1.png" alt=""/>
 </div>
- <p>Here, we have two cells that use a bilinear mapping (i.e., <a class="el" href="classMappingQ.html">MappingQ(1)</a>). Consequently, for each of the cells, the normal vector is perpendicular to the straight edge. If the two edges at the top and right are meant to approximate a curved boundary (as indicated by the dashed line), then neither of the two computed normal vectors are equal to the exact normal vector (though they approximate it as the mesh is refined further). What is worse, if we constrain <picture><source srcset="form_2308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec u \cdot \vec n=
-\vec u_\Gamma \cdot \vec n$" src="form_2308.png"/></picture> at the common vertex with the normal vector from both cells, then we constrain the vector <picture><source srcset="form_2301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec u$" src="form_2301.png"/></picture> with respect to two linearly independent vectors; consequently, the constraint would be <picture><source srcset="form_2309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vec u=\vec u_\Gamma$" src="form_2309.png"/></picture> at this point (i.e. <em>all</em> components of the vector), which is not what we wanted.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/group__feaccess.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/group__feaccess.html	2024-03-17 21:57:41.055219550 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/group__feaccess.html	2024-03-17 21:57:41.051219525 +0000
@@ -226,7 +226,7 @@
 </td></tr>
 <tr><td class="fieldname"><a id="ggaa94b67d2fdcc390690c523f28019e52fad5c9ff886b9615349a5d04a6c782df4a" name="ggaa94b67d2fdcc390690c523f28019e52fad5c9ff886b9615349a5d04a6c782df4a"></a>update_quadrature_points&#href_anchor"fielddoc"><p>Transformed quadrature points. </p>
 <p>Compute the quadrature points location in real cell coordinates.</p>
-<p><a class="el" href="classFEValues.html">FEValues</a> objects take the quadrature point locations on the reference cell as an argument of the constructor (via the <a class="el" href="classQuadrature.html">Quadrature</a> object). For most finite elements, knowing the location of quadrature points on the reference cell is all that is necessary to evaluate shape functions, evaluate the mapping, and other things. On the other hand, if you want to evaluate a right hand side function <picture><source srcset="form_1225_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x_q)$" src="form_1225.png"/></picture> at quadrature point locations <picture><source srcset="form_718_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_q$" src="form_718.png"/></picture> on the real cell, you need to pass this flag to the <a class="el" href="classFEValues.html">FEValues</a> constructor to make sure you can later access them.</p>
+<p><a class="el" href="classFEValues.html">FEValues</a> objects take the quadrature point locations on the reference cell as an argument of the constructor (via the <a class="el" href="classQuadrature.html">Quadrature</a> object). For most finite elements, knowing the location of quadrature points on the reference cell is all that is necessary to evaluate shape functions, evaluate the mapping, and other things. On the other hand, if you want to evaluate a right hand side function <picture><source srcset="form_1235_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x_q)$" src="form_1235.png"/></picture> at quadrature point locations <picture><source srcset="form_718_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_q$" src="form_718.png"/></picture> on the real cell, you need to pass this flag to the <a class="el" href="classFEValues.html">FEValues</a> constructor to make sure you can later access them.</p>
 <p>There are contexts other than <a class="el" href="classFEValues.html">FEValues</a> (and related classes) that take update flags. An example is the <a class="el" href="classDataPostprocessor.html">DataPostprocessor</a> class (and derived classes). In these cases, the <code>update_quadrature_points</code> flag is generally understood to update the location of "evaluation
 points", i.e., the physical locations of the points at which the solution is evaluated. As a consequence, the flag is misnamed in these contexts: No quadrature (i.e., computation of integrals) is involved, and consequently what is being updated is, in the context of <a class="el" href="classDataPostprocessor.html">DataPostprocessor</a>, the member variable <a class="el" href="structDataPostprocessorInputs_1_1CommonInputs.html#href_anchor">DataPostprocessorInputs::CommonInputs::evaluation_points</a>. </p>
 </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/group__hpcollection.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/group__hpcollection.html	2024-03-17 21:57:41.075219673 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/group__hpcollection.html	2024-03-17 21:57:41.079219698 +0000
@@ -117,7 +117,7 @@
 *     fe_collection.push_back (FE_Q&lt;dim&gt;(degree));
 * </pre><p>This way, one can add elements of polynomial degree 1 through 4 to the collection. It is not necessary to retain the added object: the collection makes a copy of it, it does not only store a pointer to the given finite element object. This same observation also holds for the other collection classes.</p>
 <p>It is customary that within an hp-finite element program, one keeps collections of finite elements and quadrature formulas with the same number of elements, each element of the one collection matching the element in the other. This is not necessary, but it often makes coding a lot simpler. If a collection of mappings is used, the same holds for <a class="el" href="classhp_1_1MappingCollection.html">hp::MappingCollection</a> objects as well.</p>
-<p>Whenever p-adaptivity is considered in an hp-finite element program, a hierarchy of finite elements needs to be established to determine succeeding finite elements for refinement and preceding ones for coarsening. Typically, this hierarchy considers how finite element spaces are nested: for example, a <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> element describes a sub-space of a <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> element, and so doing <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> refinement usually means using a larger (more accurate) finite element space. In other words, the hierarchy of finite elements is built by considering whether some elements of the collection are sub- or super-spaces of others.</p>
+<p>Whenever p-adaptivity is considered in an hp-finite element program, a hierarchy of finite elements needs to be established to determine succeeding finite elements for refinement and preceding ones for coarsening. Typically, this hierarchy considers how finite element spaces are nested: for example, a <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> element describes a sub-space of a <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> element, and so doing <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> refinement usually means using a larger (more accurate) finite element space. In other words, the hierarchy of finite elements is built by considering whether some elements of the collection are sub- or super-spaces of others.</p>
 <p>By default, we assume that finite elements are stored in an ascending order based on their polynomial degree. If the order of elements differs, a corresponding hierarchy needs to be supplied to the collection via the <a class="el" href="classhp_1_1FECollection.html#href_anchor">hp::FECollection::set_hierarchy()</a> member function. </p>
 </div><!-- contents -->
 <!-- HTML footer for doxygen 1.10.0-->
/usr/share/doc/packages/dealii/doxygen/deal.II/group__manifold.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/group__manifold.html	2024-03-17 21:57:41.119219945 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/group__manifold.html	2024-03-17 21:57:41.119219945 +0000
@@ -239,7 +239,7 @@
 <img src="hypershell-all.png" alt=""/>
 </div>
 <p>So why does this matter? After all, the last two meshes describe the exact same domain and we know that upon mesh refinement we obtain the correct solution regardless of the choice of cells, as long as the diameter of the largest cell goes to zero.</p>
-<p>There are two answers to this question. First, the numerical effort of solving a partial differential equation to a certain accuracy typically depends on the <em>quality</em> of cells since the constant <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> in error estimates of the form <picture><source srcset="form_111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|_{H^1} \le Ch^p \|u\|_{H^{p+1}}$" src="form_111.png"/></picture> depends on factors such as the maximal ratio of radii of the smallest circumscribed to largest inscribed circle over all cells (for triangles; or a suitable generalization for other types of cells). Thus, it is worthwhile creating meshes with cells that are as well-formed as possible. This is arguably not so much of an issue for the meshes shown above, but is sometimes an issue. Consider, for example, the following code and mesh: </p><div class="fragment"><div class="line"><span class="keyword">const</span> <a class="code hl_class" href="classPoint.html">Point&lt;2&gt;</a> <a class="code hl_variable" href="data__out__base_8cc.html#href_anchor">center</a> (1,0);</div>
+<p>There are two answers to this question. First, the numerical effort of solving a partial differential equation to a certain accuracy typically depends on the <em>quality</em> of cells since the constant <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> in error estimates of the form <picture><source srcset="form_204_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|_{H^1} \le Ch^p \|u\|_{H^{p+1}}$" src="form_204.png"/></picture> depends on factors such as the maximal ratio of radii of the smallest circumscribed to largest inscribed circle over all cells (for triangles; or a suitable generalization for other types of cells). Thus, it is worthwhile creating meshes with cells that are as well-formed as possible. This is arguably not so much of an issue for the meshes shown above, but is sometimes an issue. Consider, for example, the following code and mesh: </p><div class="fragment"><div class="line"><span class="keyword">const</span> <a class="code hl_class" href="classPoint.html">Point&lt;2&gt;</a> <a class="code hl_variable" href="data__out__base_8cc.html#href_anchor">center</a> (1,0);</div>
 <div class="line"><span class="keyword">const</span> <a class="code hl_class" href="classSphericalManifold.html">SphericalManifold&lt;2&gt;</a> manifold(<a class="code hl_variable" href="data__out__base_8cc.html#href_anchor">center</a>);</div>
 <div class="line"><span class="keyword">const</span> <span class="keywordtype">double</span> inner_radius = 0.5,</div>
 <div class="line">             outer_radius = 1.0;</div>
@@ -290,22 +290,22 @@
 <dl class="section see"><dt>See also</dt><dd><a class="el" href="DEALGlossary.html#href_anchor">Glossary entry on manifold indicators</a></dd></dl>
 <h3>Computing the weights for combining different manifold descriptions</h3>
 <p>In a realistic application, it happens regularly that different manifold descriptions need to be combined. The simplest case is when a curved description is only available for the boundary but not for the interior of the computational domain. The manifold description for a ball also falls into this category, as it needs to combine a spherical manifold at the circular part with a straight-sided description in the center of the domain where the spherical manifold is not valid.</p>
-<p>In general, the process of blending different manifold descriptions in deal.II is achieved by the so-called transfinite interpolation. Its formula in 2D is, for example, described on <a href="https://en.wikipedia.org/wiki/Transfinite_interpolation">Wikipedia</a>. Given a point <picture><source srcset="form_112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v)$" src="form_112.png"/></picture> on a chart, the image of this point in real space is given by  </p><p class="formulaDsp">
-<picture><source srcset="form_113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>In general, the process of blending different manifold descriptions in deal.II is achieved by the so-called transfinite interpolation. Its formula in 2D is, for example, described on <a href="https://en.wikipedia.org/wiki/Transfinite_interpolation">Wikipedia</a>. Given a point <picture><source srcset="form_205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v)$" src="form_205.png"/></picture> on a chart, the image of this point in real space is given by  </p><p class="formulaDsp">
+<picture><source srcset="form_206_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
    \mathbf S(u,v) &amp;= (1-v)\mathbf c_0(u)+v \mathbf c_1(u) + (1-u)\mathbf c_2(v) + u \mathbf c_3(v) \\
    &amp;\quad - \left[(1-u)(1-v) \mathbf x_0 + u(1-v) \mathbf x_1 + (1-u)v \mathbf x_2 + uv \mathbf x_3 \right]
-   \end{align*}" src="form_113.png"/></picture>
+   \end{align*}" src="form_206.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_114_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf x_0, \bf x_1, \bf x_2, \bf x_3$" src="form_114.png"/></picture> denote the four vertices bounding the image space and <picture><source srcset="form_115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf c_0, \bf c_1, \bf c_2, \bf c_3$" src="form_115.png"/></picture> are the four curves describing the lines of the cell.</p>
-<p>If we want to find the center of the cell according to the manifold (that is also used when the grid is refined), the chart is the unit cell <picture><source srcset="form_116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0,1)^2$" src="form_116.png"/></picture> and we want to evaluate this formula in the point <picture><source srcset="form_117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v) = (0.5,
-   0.5)$" src="form_117.png"/></picture>. In that case, <picture><source srcset="form_118_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf c_0(0.5)$" src="form_118.png"/></picture> is the position of the midpoint of the lower face (indexed by 2 in deal.II's ordering) that is derived from its own manifold, <picture><source srcset="form_119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf c_1(0.5)$" src="form_119.png"/></picture> is the position of the midpoint of the upper face (indexed by 3 in deal.II), <picture><source srcset="form_120_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf c_2(0.5)$" src="form_120.png"/></picture> is the midpoint of the face on the left (indexed by 0), and <picture><source srcset="form_121_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf c_3(0.5)$" src="form_121.png"/></picture> is the midpoint of the right face. In this formula, the weights equate to <picture><source srcset="form_122_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\displaystyle 1}{\displaystyle 2}$" src="form_122.png"/></picture> for the four midpoints in the faces and to <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\frac{\displaystyle 1}{\displaystyle 4}$" src="form_123.png"/></picture> for the four vertices. These weights look weird at first sight because the vertices enter with negative weight but the mechanism does what we want: In case of a cell with curved description on two opposite faces but straight lines on the other two faces, the negative weights of <picture><source srcset="form_124_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\frac{\displaystyle
-   1}{\displaystyle 4}$" src="form_124.png"/></picture> in the vertices balance with the center of the two straight lines in radial direction that get weight <picture><source srcset="form_125_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\displaystyle
-   1}{\displaystyle 2}$" src="form_125.png"/></picture>. Thus, the average is taken over the two center points in curved direction, exactly placing the new point in the middle.</p>
-<p>In three spatial dimensions, the weights are <picture><source srcset="form_126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$+\frac{\displaystyle
-   1}{\displaystyle 2}$" src="form_126.png"/></picture> for the face midpoints, <picture><source srcset="form_124_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\frac{\displaystyle
-   1}{\displaystyle 4}$" src="form_124.png"/></picture> for the line mid points, and <picture><source srcset="form_127_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\displaystyle
-   1}{\displaystyle 8}$" src="form_127.png"/></picture> for the vertices, again balancing the different entities. In case all the surrounding of a cell is straight, the formula reduces to the obvious weight <picture><source srcset="form_128_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\displaystyle 1}{\displaystyle 8}$" src="form_128.png"/></picture> on each of the eight vertices.</p>
-<p>In the MappingQGeneric class, a generalization of this concept to the support points of a polynomial representation of curved cells, the nodes of the Gauss-Lobatto quadrature, is implemented by evaluating the boundary curves in the respective Gauss-Lobatto points <picture><source srcset="form_129_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u_i,v_i)$" src="form_129.png"/></picture> and combining them with the above formula. The weights have been verified to yield optimal convergence rates <picture><source srcset="form_130_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O(h^{k+1})$" src="form_130.png"/></picture> also for very high polynomial degrees, say <picture><source srcset="form_131_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=10$" src="form_131.png"/></picture>.</p>
+<p> where <picture><source srcset="form_207_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf x_0, \bf x_1, \bf x_2, \bf x_3$" src="form_207.png"/></picture> denote the four vertices bounding the image space and <picture><source srcset="form_208_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf c_0, \bf c_1, \bf c_2, \bf c_3$" src="form_208.png"/></picture> are the four curves describing the lines of the cell.</p>
+<p>If we want to find the center of the cell according to the manifold (that is also used when the grid is refined), the chart is the unit cell <picture><source srcset="form_209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0,1)^2$" src="form_209.png"/></picture> and we want to evaluate this formula in the point <picture><source srcset="form_210_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v) = (0.5,
+   0.5)$" src="form_210.png"/></picture>. In that case, <picture><source srcset="form_211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf c_0(0.5)$" src="form_211.png"/></picture> is the position of the midpoint of the lower face (indexed by 2 in deal.II's ordering) that is derived from its own manifold, <picture><source srcset="form_212_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf c_1(0.5)$" src="form_212.png"/></picture> is the position of the midpoint of the upper face (indexed by 3 in deal.II), <picture><source srcset="form_213_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf c_2(0.5)$" src="form_213.png"/></picture> is the midpoint of the face on the left (indexed by 0), and <picture><source srcset="form_214_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf c_3(0.5)$" src="form_214.png"/></picture> is the midpoint of the right face. In this formula, the weights equate to <picture><source srcset="form_215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\displaystyle 1}{\displaystyle 2}$" src="form_215.png"/></picture> for the four midpoints in the faces and to <picture><source srcset="form_216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\frac{\displaystyle 1}{\displaystyle 4}$" src="form_216.png"/></picture> for the four vertices. These weights look weird at first sight because the vertices enter with negative weight but the mechanism does what we want: In case of a cell with curved description on two opposite faces but straight lines on the other two faces, the negative weights of <picture><source srcset="form_217_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\frac{\displaystyle
+   1}{\displaystyle 4}$" src="form_217.png"/></picture> in the vertices balance with the center of the two straight lines in radial direction that get weight <picture><source srcset="form_218_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\displaystyle
+   1}{\displaystyle 2}$" src="form_218.png"/></picture>. Thus, the average is taken over the two center points in curved direction, exactly placing the new point in the middle.</p>
+<p>In three spatial dimensions, the weights are <picture><source srcset="form_219_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$+\frac{\displaystyle
+   1}{\displaystyle 2}$" src="form_219.png"/></picture> for the face midpoints, <picture><source srcset="form_217_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\frac{\displaystyle
+   1}{\displaystyle 4}$" src="form_217.png"/></picture> for the line mid points, and <picture><source srcset="form_220_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\displaystyle
+   1}{\displaystyle 8}$" src="form_220.png"/></picture> for the vertices, again balancing the different entities. In case all the surrounding of a cell is straight, the formula reduces to the obvious weight <picture><source srcset="form_221_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\displaystyle 1}{\displaystyle 8}$" src="form_221.png"/></picture> on each of the eight vertices.</p>
+<p>In the MappingQGeneric class, a generalization of this concept to the support points of a polynomial representation of curved cells, the nodes of the Gauss-Lobatto quadrature, is implemented by evaluating the boundary curves in the respective Gauss-Lobatto points <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u_i,v_i)$" src="form_222.png"/></picture> and combining them with the above formula. The weights have been verified to yield optimal convergence rates <picture><source srcset="form_223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O(h^{k+1})$" src="form_223.png"/></picture> also for very high polynomial degrees, say <picture><source srcset="form_224_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=10$" src="form_224.png"/></picture>.</p>
 <p>In the literature, other boundary descriptions are also used. Before version 9.0 deal.II used something called Laplace smoothing where the weights that are applied to the nodes on the circumference to get the position of the interior nodes are determined by solving a Laplace equation on the unit element. However, this led to boundary layers close to the curved description, i.e., singularities in the higher derivatives of the mapping from unit to real cell.</p>
 <p>If the transition from a curved boundary description to a straight description in the interior is done wrong, it is typically impossible to achieve high order convergence rates. For example, the Laplace smoothing inside a single cell leads to a singularity in the fourth derivative of the mapping from the reference to the real cell, limiting the convergence rate to 3 in the cells at the boundary (and 3.5 if global L2 errors were measured in 2D). Other more crude strategies, like completely ignoring the presence of two different manifolds and simply computing the additional points of a high-order mapping in a straight coordinate system, could lead to even worse convergence rates. The current implementation in deal.II, on the other hand, has been extensively verified in this respect and should behave optimally.</p>
 <p>A bad strategy for blending a curved boundary representation with flat interior representations obviously also reflects mesh quality. For example, the above case with only 3 circumferential cells leads to the following mesh with Laplace manifold smoothing rather than the interpolation from the boundary as is implemented in deal.II:</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/group__mapping.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/group__mapping.html	2024-03-17 21:57:41.147220118 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/group__mapping.html	2024-03-17 21:57:41.151220143 +0000
@@ -166,7 +166,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>A class that implements a polynomial mapping <picture><source srcset="form_276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_p$" src="form_276.png"/></picture> of degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> on all cells. This class is completely equivalent to the <a class="el" href="classMappingQ.html">MappingQ</a> class and there for backward compatibility. </p>
+<p>A class that implements a polynomial mapping <picture><source srcset="form_276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_p$" src="form_276.png"/></picture> of degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> on all cells. This class is completely equivalent to the <a class="el" href="classMappingQ.html">MappingQ</a> class and there for backward compatibility. </p>
 
 <p class="definition">Definition at line <a class="el" href="mapping__q_8h_source.html#href_anchor">702</a> of file <a class="el" href="mapping__q_8h_source.html">mapping_q.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/group__reordering.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/group__reordering.html	2024-03-17 21:57:41.183220340 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/group__reordering.html	2024-03-17 21:57:41.179220316 +0000
@@ -169,7 +169,7 @@
 <p>From the examples above, it is obvious that if we encounter a cell that cannot be added to the cells which have already been entered, we can not usually point to a cell that is the culprit and that must be entered in a different orientation. Furthermore, even if we knew which cell, there might be large number of cells that would then cease to fit into the grid and which we would have to find a different orientation as well (in the second example above, if we rotated cell 1, then we would have to rotate the cells 1 through N-1 as well).</p>
 <p>A brute force approach to this problem is the following: if cell N can't be added, then try to rotate cell N-1. If we can't rotate cell N-1 any more, then try to rotate cell N-2 and try to add cell N with all orientations of cell N-1. And so on. Algorithmically, we can visualize this by a tree structure, where node N has as many children as there are possible orientations of node N+1 (in two space dimensions, there are four orientations in which each cell can be constructed from its four vertices; for example, if the vertex indices are <code>(0 1 3 2)</code>, then the four possibilities would be <code>(0 1 3 2)</code>, <code>(1 3 2 0)</code>, <code>(3 2 0 1)</code>, and <code>(2 0 1 3)</code>). When adding one cell after the other, we traverse this tree in a depth-first (pre-order) fashion. When we encounter that one path from the root (cell 0) to a leaf (the last cell) is not allowed (i.e. that the orientations of the cells which are encoded in the path through the tree does not lead to a valid triangulation), we have to track back and try another path through the tree.</p>
 <p>In practice, of course, we do not follow each path to a final node and then find out whether a path leads to a valid triangulation, but rather use an inductive argument: if for all previously added cells the triangulation is a valid one, then we can find out whether a path through the tree can yield a valid triangulation by checking whether entering the present cell would introduce any faces that have a nonunique direction; if that is so, then we can stop following all paths below this point and track back immediately.</p>
-<p>Nevertheless, it is already obvious that the tree has <picture><source srcset="form_266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$4^N$" src="form_266.png"/></picture> leaves in two space dimensions, since each of the <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> cells can be added in four orientations. Most of these nodes can be discarded rapidly, since firstly the orientation of the first cell is irrelevant, and secondly if we add one cell that has a neighbor that has already been added, then there are already only two possible orientations left, so the total number of checks we have to make until we find a valid way is significantly smaller than <picture><source srcset="form_266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$4^N$" src="form_266.png"/></picture>. However, the algorithm is still exponential in time and linear in memory (we only have to store the information for the present path in form of a stack of orientations of cells that have already been added).</p>
+<p>Nevertheless, it is already obvious that the tree has <picture><source srcset="form_266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$4^N$" src="form_266.png"/></picture> leaves in two space dimensions, since each of the <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> cells can be added in four orientations. Most of these nodes can be discarded rapidly, since firstly the orientation of the first cell is irrelevant, and secondly if we add one cell that has a neighbor that has already been added, then there are already only two possible orientations left, so the total number of checks we have to make until we find a valid way is significantly smaller than <picture><source srcset="form_266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$4^N$" src="form_266.png"/></picture>. However, the algorithm is still exponential in time and linear in memory (we only have to store the information for the present path in form of a stack of orientations of cells that have already been added).</p>
 <p>In fact, the two examples above show that the exponential estimate is not a pessimistic one: we indeed have to track back to one of the very first cells there to find a way to add all cells in a consistent fashion.</p>
 <p>This discouraging situation is greatly improved by the fact that we have an alternative algorithm for 2d that is always linear in runtime (discovered and implemented by Michael Anderson of TICAM, University of Texas, in 2003), and that for 3d we can find an algorithm that in practice is usually only roughly linear in time and memory. We will describe these algorithms in the following. A full description and theoretical analysis is given in <b>[AABB17]</b> .</p>
 <h3>The 2d linear complexity algorithm</h3>
/usr/share/doc/packages/dealii/doxygen/deal.II/group__threads.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/group__threads.html	2024-03-17 21:57:41.223220587 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/group__threads.html	2024-03-17 21:57:41.231220637 +0000
@@ -312,7 +312,7 @@
 <div class="ttc" id="agrid__out_8cc_html_a2cc229a4f1ffc75e83ed269d5f725729"><div class="ttname"><a href="grid__out_8cc.html#href_anchor">second</a></div><div class="ttdeci">Point&lt; 2 &gt; second</div><div class="ttdef"><b>Definition</b> <a href="grid__out_8cc_source.html#href_anchor">grid_out.cc:4616</a></div></div>
 <div class="ttc" id="agrid__out_8cc_html_a827a345f29da7caeb588b11013869a01"><div class="ttname"><a href="grid__out_8cc.html#href_anchor">first</a></div><div class="ttdeci">Point&lt; 2 &gt; first</div><div class="ttdef"><b>Definition</b> <a href="grid__out_8cc_source.html#href_anchor">grid_out.cc:4615</a></div></div>
 <div class="ttc" id="anamespaceparallel_html_ad4a3abdbe08b45aa7332ec73e6f59493"><div class="ttname"><a href="namespaceparallel.html#href_anchor">parallel::transform</a></div><div class="ttdeci">void transform(const InputIterator &amp;begin_in, const InputIterator &amp;end_in, OutputIterator out, const Function &amp;function, const unsigned int grainsize)</div><div class="ttdef"><b>Definition</b> <a href="include_2deal_8II_2base_2parallel_8h_source.html#href_anchor">parallel.h:148</a></div></div>
-</div><!-- fragment --><p>In this example, we used a <em>lambda expression</em> to construct, on the fly, a function object that takes two arguments and returns the sum of the two. This is exactly what we needed when we want to add the individual elements of vectors <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> and <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> and write the sum of the two into the elements of <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>. The function object that we get here is completely known to the compiler and when it expands the loop that results from <a class="el" href="namespaceparallel.html#href_anchor">parallel::transform</a> will be as if we had written the loop in its obvious form: </p><div class="fragment"><div class="line">InputIterator1 in_1 = x.begin();</div>
+</div><!-- fragment --><p>In this example, we used a <em>lambda expression</em> to construct, on the fly, a function object that takes two arguments and returns the sum of the two. This is exactly what we needed when we want to add the individual elements of vectors <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> and <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> and write the sum of the two into the elements of <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>. The function object that we get here is completely known to the compiler and when it expands the loop that results from <a class="el" href="namespaceparallel.html#href_anchor">parallel::transform</a> will be as if we had written the loop in its obvious form: </p><div class="fragment"><div class="line">InputIterator1 in_1 = x.begin();</div>
 <div class="line">InputIterator2 in_2 = y.begin();</div>
 <div class="line">OutputIterator out  = z.begin();</div>
 <div class="line"> </div>
@@ -405,7 +405,7 @@
 <div class="line">}</div>
 <div class="ttc" id="anamespaceparallel_html_a73a5366855f164ba6dcde9fbe0c689b8"><div class="ttname"><a href="namespaceparallel.html#href_anchor">parallel::apply_to_subranges</a></div><div class="ttdeci">void apply_to_subranges(const Iterator &amp;begin, const std_cxx20::type_identity_t&lt; Iterator &gt; &amp;end, const Function &amp;f, const unsigned int grainsize)</div><div class="ttdef"><b>Definition</b> <a href="include_2deal_8II_2base_2parallel_8h_source.html#href_anchor">parallel.h:435</a></div></div>
 </div><!-- fragment --><p> Here, we call the <code>vmult_on_subrange</code> function on sub-ranges of at least 200 elements each, so that the initial setup cost can amortize.</p>
-<p>A related operation is when the loops over elements each produce a result that must then be accumulated (other reduction operations than addition of numbers would work as well). An example is to form the matrix norm <picture><source srcset="form_231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x^T M x$" src="form_231.png"/></picture> (it really is only a norm if <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> is positive definite, but let's assume for a moment that it is). A sequential implementation would look like this for sparse matrices: </p><div class="fragment"><div class="line"><span class="keywordtype">double</span> SparseMatrix::mat_norm (<span class="keyword">const</span> <a class="code hl_class" href="classVector.html">Vector</a> &amp;x)<span class="keyword"> const</span></div>
+<p>A related operation is when the loops over elements each produce a result that must then be accumulated (other reduction operations than addition of numbers would work as well). An example is to form the matrix norm <picture><source srcset="form_231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x^T M x$" src="form_231.png"/></picture> (it really is only a norm if <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> is positive definite, but let's assume for a moment that it is). A sequential implementation would look like this for sparse matrices: </p><div class="fragment"><div class="line"><span class="keywordtype">double</span> SparseMatrix::mat_norm (<span class="keyword">const</span> <a class="code hl_class" href="classVector.html">Vector</a> &amp;x)<span class="keyword"> const</span></div>
 <div class="line"><span class="keyword"></span>{</div>
 <div class="line">  <span class="keyword">const</span> <span class="keywordtype">double</span>       *val_ptr    = &amp;values[0];</div>
 <div class="line">  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> *colnum_ptr = &amp;colnums[0];</div>
@@ -607,7 +607,7 @@
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">The last issue that is worth addressing is that the way we wrote the <code>MyClass::assemble_on_one_cell</code> function above, we create and destroy an <a class="el" href="classFEValues.html">FEValues</a> object every time the function is called, i.e. once for each cell in the triangulation. That's an immensely expensive operation because the <a class="el" href="classFEValues.html">FEValues</a> class tries to do a lot of work in its constructor in an attempt to reduce the number of operations we have to do on each cell (i.e. it increases the constant in the <picture><source srcset="form_201_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(1)$" src="form_201.png"/></picture> effort to initialize such an object in order to reduce the constant in the <picture><source srcset="form_183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_183.png"/></picture> operations to call <a class="el" href="classFEValues.html#href_anchor">FEValues::reinit</a> on the <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> cells of a triangulation). Creating and destroying an <a class="el" href="classFEValues.html">FEValues</a> object on each cell invalidates this effort.</p>
+<p class="startli">The last issue that is worth addressing is that the way we wrote the <code>MyClass::assemble_on_one_cell</code> function above, we create and destroy an <a class="el" href="classFEValues.html">FEValues</a> object every time the function is called, i.e. once for each cell in the triangulation. That's an immensely expensive operation because the <a class="el" href="classFEValues.html">FEValues</a> class tries to do a lot of work in its constructor in an attempt to reduce the number of operations we have to do on each cell (i.e. it increases the constant in the <picture><source srcset="form_175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(1)$" src="form_175.png"/></picture> effort to initialize such an object in order to reduce the constant in the <picture><source srcset="form_157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_157.png"/></picture> operations to call <a class="el" href="classFEValues.html#href_anchor">FEValues::reinit</a> on the <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> cells of a triangulation). Creating and destroying an <a class="el" href="classFEValues.html">FEValues</a> object on each cell invalidates this effort.</p>
 <p class="interli">The way to avoid this is to put the <a class="el" href="classFEValues.html">FEValues</a> object into a second structure that will hold scratch data, and initialize it in the constructor: </p><div class="fragment"><div class="line"><span class="keyword">struct </span>PerTaskData {</div>
 <div class="line">  <a class="code hl_class" href="classFullMatrix.html">FullMatrix&lt;double&gt;</a>        cell_matrix;</div>
 <div class="line">  <a class="code hl_class" href="classVector.html">Vector&lt;double&gt;</a>            cell_rhs;</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/group__vector__valued.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/group__vector__valued.html	2024-03-17 21:57:41.271220884 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/group__vector__valued.html	2024-03-17 21:57:41.275220909 +0000
@@ -281,8 +281,8 @@
   \right)
 \end{eqnarray*}" src="form_302.png"/></picture>
 </p>
-<p> indeed has four components. We note that we could change the ordering of the solution components <picture><source srcset="form_303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf u$" src="form_303.png"/></picture> and <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> inside <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> if we also change columns of the matrix operator.</p>
-<p>Next, we need to think about test functions <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture>. We want to multiply both sides of the equation with them, then integrate over <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>. The result should be a scalar equality. We can achieve this by choosing <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> also vector valued as  </p><p class="formulaDsp">
+<p> indeed has four components. We note that we could change the ordering of the solution components <picture><source srcset="form_303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf u$" src="form_303.png"/></picture> and <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> inside <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> if we also change columns of the matrix operator.</p>
+<p>Next, we need to think about test functions <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture>. We want to multiply both sides of the equation with them, then integrate over <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>. The result should be a scalar equality. We can achieve this by choosing <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> also vector valued as  </p><p class="formulaDsp">
 <picture><source srcset="form_306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   V =
   \left(
@@ -450,7 +450,7 @@
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">These views can then be asked for information about these individual components. For example, when you write <code>fe_values[pressure].value(i,q)</code> you get the value of the pressure component of the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th shape function <picture><source srcset="form_314_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_i$" src="form_314.png"/></picture> at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. Because the extractor <code>pressure</code> represents a scalar component, the results of the operator <code>fe_values[pressure].value(i,q)</code> is a scalar number. On the other hand, the call <code>fe_values[velocities].value(i,q)</code> would produce the value of a whole set of <code>dim</code> components, which would be of type <code><a class="el" href="classTensor.html">Tensor</a>&lt;1,dim&gt;</code>.</p>
+<p class="startli">These views can then be asked for information about these individual components. For example, when you write <code>fe_values[pressure].value(i,q)</code> you get the value of the pressure component of the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th shape function <picture><source srcset="form_314_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_i$" src="form_314.png"/></picture> at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. Because the extractor <code>pressure</code> represents a scalar component, the results of the operator <code>fe_values[pressure].value(i,q)</code> is a scalar number. On the other hand, the call <code>fe_values[velocities].value(i,q)</code> would produce the value of a whole set of <code>dim</code> components, which would be of type <code><a class="el" href="classTensor.html">Tensor</a>&lt;1,dim&gt;</code>.</p>
 <p class="endli"></p>
 </li>
 <li>
@@ -594,10 +594,10 @@
 <div class="line">    }</div>
 <div class="ttc" id="aclassSymmetricTensor_html"><div class="ttname"><a href="classSymmetricTensor.html">SymmetricTensor</a></div><div class="ttdef"><b>Definition</b> <a href="symmetric__tensor_8h_source.html#href_anchor">symmetric_tensor.h:719</a></div></div>
 </div><!-- fragment --><p>So if, again, this is not the code we use in <a class="el" href="step_8.html">step-8</a>, what do we do there? The answer rests on the finite element we use. In <a class="el" href="step_8.html">step-8</a>, we use the following element: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFESystem.html">FESystem&lt;dim&gt;</a> finite_element (<a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(1), dim);</div>
-</div><!-- fragment --><p> In other words, the finite element we use consists of <code>dim</code> copies of the same scalar element. This is what we call a <a class="el" href="DEALGlossary.html#href_anchor">primitive</a> element: an element that may be vector-valued but where each shape function has exactly one non-zero component. In other words: if the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>-component of a displacement shape function is nonzero, then the <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>- and <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>-components must be zero and similarly for the other components. What this means is that also derived quantities based on shape functions inherit this sparsity property. For example: the divergence  <picture><source srcset="form_327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{div}\ \Phi(x,y,z)=\partial_x\varphi_x(x,y,z) +
+</div><!-- fragment --><p> In other words, the finite element we use consists of <code>dim</code> copies of the same scalar element. This is what we call a <a class="el" href="DEALGlossary.html#href_anchor">primitive</a> element: an element that may be vector-valued but where each shape function has exactly one non-zero component. In other words: if the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>-component of a displacement shape function is nonzero, then the <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>- and <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>-components must be zero and similarly for the other components. What this means is that also derived quantities based on shape functions inherit this sparsity property. For example: the divergence  <picture><source srcset="form_327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{div}\ \Phi(x,y,z)=\partial_x\varphi_x(x,y,z) +
    \partial_y\varphi_y(x,y,z) + \partial_z\varphi_z(x,y,z)$" src="form_327.png"/></picture> of a vector-valued shape function <picture><source srcset="form_328_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi(x,y,z)=(\varphi_x(x,y,z), \varphi_y(x,y,z), \varphi_z(x,y,z))^T$" src="form_328.png"/></picture> is, in the present case, either <picture><source srcset="form_329_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{div}\ \Phi(x,y,z)=\partial_x\varphi_x(x,y,z)$" src="form_329.png"/></picture>, <picture><source srcset="form_330_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{div}\ \Phi(x,y,z)=\partial_y\varphi_y(x,y,z)$" src="form_330.png"/></picture>, or <picture><source srcset="form_331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{div}\ \Phi(x,y,z)=\partial_z\varphi_z(x,y,z)$" src="form_331.png"/></picture>, because exactly one of the <picture><source srcset="form_332_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_\ast$" src="form_332.png"/></picture> is nonzero. Knowing this means that we can save a number of computations that, if we were to do them, would only yield zeros to add up.</p>
 <p>In a similar vein, if only one component of a shape function is nonzero, then only one row of its gradient <picture><source srcset="form_333_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\Phi$" src="form_333.png"/></picture> is nonzero. What this means for terms like <picture><source srcset="form_334_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mu \nabla\Phi_i,\nabla\Phi_j)$" src="form_334.png"/></picture>, where the scalar product between two tensors is defined as <picture><source srcset="form_335_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\tau, \gamma)_\Omega=\int_\Omega \sum_{i,j=1}^d \tau_{ij} \gamma_{ij}$" src="form_335.png"/></picture>, is that the term is only nonzero if both tensors have their nonzero entries in the same row, which means that the two shape functions have to have their single nonzero component in the same location.</p>
-<p>If we use this sort of knowledge, then we can in a first step avoid computing gradient tensors if we can determine up front that their scalar product will be nonzero, in a second step avoid building the entire tensors and only get its nonzero components, and in a final step simplify the scalar product by only considering that index <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> for the one nonzero row, rather than multiplying and adding up zeros.</p>
+<p>If we use this sort of knowledge, then we can in a first step avoid computing gradient tensors if we can determine up front that their scalar product will be nonzero, in a second step avoid building the entire tensors and only get its nonzero components, and in a final step simplify the scalar product by only considering that index <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> for the one nonzero row, rather than multiplying and adding up zeros.</p>
 <p>The vehicle for all this is the ability to determine which vector component is going to be nonzero. This information is provided by the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::system_to_component_index</a> function. What can be done with it, using the example above, is explained in detail in <a class="el" href="step_8.html">step-8</a>.</p>
 <p><a class="anchor" id="VVBlockSolvers"></a> </p><h3>Block solvers</h3>
 <p>Using techniques as shown above, it isn't particularly complicated to assemble the linear system, i.e. matrix and right hand side, for a vector-valued problem. However, then it also has to be solved. This is more complicated. Naively, one could just consider the matrix as a whole. For most problems, this matrix is not going to be definite (except for special cases like the elasticity equations covered in <a class="el" href="step_8.html">step-8</a> and <a class="el" href="step_17.html">step-17</a>). It will, often, also not be symmetric. This rather general class of matrices presents problems for iterative solvers: the lack of structural properties prevents the use of most efficient methods and preconditioners. While it can be done, the solution process will therefore most often be slower than necessary.</p>
@@ -615,7 +615,7 @@
   \right),
 \end{eqnarray*}" src="form_337.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> represents the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> that results from discretizing the identity operator <picture><source srcset="form_338_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf 1$" src="form_338.png"/></picture> and <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> the equivalent of the gradient operator.</p>
+<p> where <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> represents the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> that results from discretizing the identity operator <picture><source srcset="form_338_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf 1$" src="form_338.png"/></picture> and <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> the equivalent of the gradient operator.</p>
 <p>By default, this is not what happens, however. Rather, deal.II assigns numbers to degrees of freedom in a rather random manner. Consequently, if you form a vector out of the values of degrees of freedom will not be neatly ordered in a vector like  </p><p class="formulaDsp">
 <picture><source srcset="form_339_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \left(
@@ -655,8 +655,8 @@
   MU = F-BP.
 \end{eqnarray*}" src="form_344.png"/></picture>
 </p>
-<p>This has the advantage that the matrices <picture><source srcset="form_345_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B^TM^{-1}B$" src="form_345.png"/></picture> and <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> that we have to solve with are both symmetric and positive definite, as opposed to the large whole matrix we had before.</p>
-<p>How a solver like this is implemented is explained in more detail in <a class="el" href="step_20.html">step-20</a>, <a class="el" href="step_31.html">step-31</a>, and a few other tutorial programs. What we would like to point out here is that we now need a way to extract certain parts of a matrix or vector: if we are to multiply, say, the <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> part of the solution vector by the <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> part of the global matrix, then we need to have a way to access these parts of the whole.</p>
+<p>This has the advantage that the matrices <picture><source srcset="form_345_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B^TM^{-1}B$" src="form_345.png"/></picture> and <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> that we have to solve with are both symmetric and positive definite, as opposed to the large whole matrix we had before.</p>
+<p>How a solver like this is implemented is explained in more detail in <a class="el" href="step_20.html">step-20</a>, <a class="el" href="step_31.html">step-31</a>, and a few other tutorial programs. What we would like to point out here is that we now need a way to extract certain parts of a matrix or vector: if we are to multiply, say, the <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> part of the solution vector by the <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> part of the global matrix, then we need to have a way to access these parts of the whole.</p>
 <p>This is where the <a class="el" href="classBlockVector.html">BlockVector</a>, <a class="el" href="classBlockSparseMatrix.html">BlockSparseMatrix</a>, and similar classes come in. For all practical purposes, then can be used as regular vectors or sparse matrices, i.e. they offer element access, provide the usual vector operations and implement, for example, matrix-vector multiplications. In other words, assembling matrices and right hand sides works in exactly the same way as for the non-block versions. That said, internally they store the elements of vectors and matrices in "blocks"; for example, instead of using one large array, the <a class="el" href="classBlockVector.html">BlockVector</a> class stores it as a set of arrays each of which we call a block. The advantage is that, while the whole thing can be used as a vector, one can also access an individual block which then, again, is a vector with all the vector operations.</p>
 <p>To show how to do this, let us consider the second equation <picture><source srcset="form_346_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$MU=F-BP$" src="form_346.png"/></picture> to be solved above. This can be achieved using the following sequence similar to what we have in <a class="el" href="step_20.html">step-20</a>: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classVector.html">Vector&lt;double&gt;</a> tmp (solution.block(0).size());</div>
 <div class="line">system_matrix.block(0,1).vmult (tmp, solution.block(1));</div>
@@ -676,7 +676,7 @@
 <div class="ttc" id="aclassSolverCG_html"><div class="ttname"><a href="classSolverCG.html">SolverCG</a></div><div class="ttdef"><b>Definition</b> <a href="solver__cg_8h_source.html#href_anchor">solver_cg.h:178</a></div></div>
 <div class="ttc" id="aclassSolverControl_html"><div class="ttname"><a href="classSolverControl.html">SolverControl</a></div><div class="ttdef"><b>Definition</b> <a href="solver__control_8h_source.html#href_anchor">solver_control.h:68</a></div></div>
 <div class="ttc" id="aclassVector_html"><div class="ttname"><a href="classVector.html">Vector</a></div><div class="ttdef"><b>Definition</b> <a href="vector_8h_source.html#href_anchor">vector.h:109</a></div></div>
-</div><!-- fragment --><p>What's happening here is that we allocate a temporary vector with as many elements as the first block of the solution vector, i.e. the velocity component <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture>, has. We then set this temporary vector equal to the <picture><source srcset="form_347_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0,1)$" src="form_347.png"/></picture> block of the matrix, i.e. <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>, times component 1 of the solution which is the previously computed pressure <picture><source srcset="form_175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_175.png"/></picture>. The result is multiplied by <picture><source srcset="form_348_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-1$" src="form_348.png"/></picture>, and component 0 of the right hand side, <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> is added to it. The temporary vector now contains <picture><source srcset="form_349_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F-BP$" src="form_349.png"/></picture>. The rest of the code snippet simply solves a linear system with <picture><source srcset="form_349_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F-BP$" src="form_349.png"/></picture> as right hand side and the <picture><source srcset="form_350_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0,0)$" src="form_350.png"/></picture> block of the global matrix, i.e. <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture>. Using block vectors and matrices in this way therefore allows us to quite easily write rather complicated solvers making use of the block structure of a linear system.</p>
+</div><!-- fragment --><p>What's happening here is that we allocate a temporary vector with as many elements as the first block of the solution vector, i.e. the velocity component <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture>, has. We then set this temporary vector equal to the <picture><source srcset="form_347_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0,1)$" src="form_347.png"/></picture> block of the matrix, i.e. <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>, times component 1 of the solution which is the previously computed pressure <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_149.png"/></picture>. The result is multiplied by <picture><source srcset="form_348_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-1$" src="form_348.png"/></picture>, and component 0 of the right hand side, <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> is added to it. The temporary vector now contains <picture><source srcset="form_349_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F-BP$" src="form_349.png"/></picture>. The rest of the code snippet simply solves a linear system with <picture><source srcset="form_349_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F-BP$" src="form_349.png"/></picture> as right hand side and the <picture><source srcset="form_350_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0,0)$" src="form_350.png"/></picture> block of the global matrix, i.e. <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture>. Using block vectors and matrices in this way therefore allows us to quite easily write rather complicated solvers making use of the block structure of a linear system.</p>
 <p><a class="anchor" id="VVExtracting"></a> </p><h3>Extracting data from solutions</h3>
 <p>Once one has computed a solution, it is often necessary to evaluate it at quadrature points, for example to evaluate nonlinear residuals for the next Newton iteration, to evaluate the finite element residual for error estimators, or to compute the right hand side for the next time step in a time dependent problem.</p>
 <p>The way this is done us to again use an <a class="el" href="classFEValues.html">FEValues</a> object to evaluate the shape functions at quadrature points, and with those also the values of a finite element function. For the example of the mixed Laplace problem above, consider the following code after solving: </p><div class="fragment"><div class="line">std::vector&lt;Vector&lt;double&gt; &gt; local_solution_values (n_q_points,</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/index.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/index.html	2024-03-17 21:57:41.303221082 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/index.html	2024-03-17 21:57:41.307221107 +0000
@@ -119,7 +119,7 @@
 </li>
 <li>
 <p class="startli"><b>DoFHandler</b>: DoFHandler objects are the confluence of triangulations and finite elements: the finite element class describes how many degrees of freedom it needs per vertex, line, or cell, and the <a class="el" href="classDoFHandler.html">DoFHandler</a> class allocates this space so that each vertex, line, or cell of the triangulation has the correct number of them. It also gives them a global numbering.</p>
-<p class="interli">A different viewpoint is this: While the mesh and finite element describe abstract properties of the finite dimensional space <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture> in which we seek the discrete solution, the DoFHandler classes enumerate a concrete basis of this space so that we can represent the discrete solution as <picture><source srcset="form_98_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)= \sum_j U_j \varphi_i(\mathbf x)$" src="form_98.png"/></picture> by an ordered set of coefficients <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture>.</p>
+<p class="interli">A different viewpoint is this: While the mesh and finite element describe abstract properties of the finite dimensional space <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture> in which we seek the discrete solution, the DoFHandler classes enumerate a concrete basis of this space so that we can represent the discrete solution as <picture><source srcset="form_203_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)= \sum_j U_j \varphi_i(\mathbf x)$" src="form_203.png"/></picture> by an ordered set of coefficients <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture>.</p>
 <p class="interli">Just as with triangulation objects, most operations on DoFHandlers are done by looping over all cells and doing something on each or a subset of them. The interfaces of the two classes are therefore rather similar: they allow to get iterators to the first and last cell (or face, or line, etc) and offer information through these iterators. The information that can be gotten from these iterators is the geometric and topological information that can already be gotten from the triangulation iterators (they are in fact derived classes) as well as things like the global numbers of the degrees of freedom on the present cell. On can also ask an iterator to extract the values corresponding to the degrees of freedom on the present cell from a data vector that stores values for all degrees of freedom associated with a triangulation.</p>
 <p class="interli">It is worth noting that, just as triangulations, <a class="el" href="classDoFHandler.html">DoFHandler</a> classes do not know anything about the mapping from the unit cell to its individual cells. It is also ignorant of the shape functions that correspond to the degrees of freedom it manages: all it knows is that there are, for example, 2 degrees of freedom for each vertex and 4 per cell interior. Nothing about their specifics is relevant to the <a class="el" href="classDoFHandler.html">DoFHandler</a> class with the exception of the fact that they exist.</p>
 <p class="interli">The <a class="el" href="classDoFHandler.html">DoFHandler</a> class and its associates are described in the <a class="el" href="group__dofs.html">Degrees of Freedom</a> module. In addition, there are specialized versions that can handle multilevel and hp-discretizations. These are described in the <a class="el" href="group__mg.html">Multilevel support</a> and <a class="el" href="group__hp.html">hp-finite element support</a> modules. Finite element methods frequently imply constraints on degrees of freedom, such as for hanging nodes or nodes at which boundary conditions apply; dealing with such constraints is described in the <a class="el" href="group__constraints.html">Constraints on degrees of freedom</a> module.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/index__set_8h.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/index__set_8h.html	2024-03-17 21:57:41.331221254 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/index__set_8h.html	2024-03-17 21:57:41.331221254 +0000
@@ -146,7 +146,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Create and return an index set of size <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> that contains every single index within this range. In essence, this function returns an index set created by </p><div class="fragment"><div class="line"><a class="code hl_class" href="classIndexSet.html">IndexSet</a> is (N);</div>
+<p>Create and return an index set of size <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> that contains every single index within this range. In essence, this function returns an index set created by </p><div class="fragment"><div class="line"><a class="code hl_class" href="classIndexSet.html">IndexSet</a> is (N);</div>
 <div class="line">is.add_range(0, N);</div>
 <div class="ttc" id="aclassIndexSet_html"><div class="ttname"><a href="classIndexSet.html">IndexSet</a></div><div class="ttdef"><b>Definition</b> <a href="index__set_8h_source.html#href_anchor">index_set.h:67</a></div></div>
 </div><!-- fragment --><p> This function exists so that one can create and initialize index sets that are complete in one step, or so one can write code like </p><div class="fragment"><div class="line"><span class="keywordflow">if</span> (my_index_set == <a class="code hl_function" href="#href_anchor">complete_index_set</a>(my_index_set.size())</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceAdaptationStrategies_1_1Coarsening.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceAdaptationStrategies_1_1Coarsening.html	2024-03-17 21:57:41.355221403 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceAdaptationStrategies_1_1Coarsening.html	2024-03-17 21:57:41.359221427 +0000
@@ -132,11 +132,11 @@
           <td class="paramtype">const std::vector&lt; value_type &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>children_values</em></span>&#href_anchor"memdoc">
 <p>Check if data on all children match, and return value of the first child.</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2054_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   d_{K_p} = d_{K_c}
   \qquad
   \forall K_c \text{ children of } K_p
-\]" src="form_2054.png"/></picture>
+\]" src="form_2146.png"/></picture>
 </p>
  
 </div>
@@ -160,13 +160,13 @@
           <td class="paramtype">const std::vector&lt; value_type &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>children_values</em></span>&#href_anchor"memdoc">
 <p>Return sum of data on all children.</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2147_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   d_{K_p} = \sum d_{K_c}
   \qquad
   \forall K_c \text{ children of } K_p
-\]" src="form_2055.png"/></picture>
+\]" src="form_2147.png"/></picture>
 </p>
-<p>This strategy preserves the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm of the corresponding global data vector before and after adaptation. </p>
+<p>This strategy preserves the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm of the corresponding global data vector before and after adaptation. </p>
 
 </div>
 </div>
@@ -187,15 +187,15 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const std::vector&lt; value_type &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>children_values</em></span>&#href_anchor"memdoc">
-<p>Return <picture><source srcset="form_2056_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ l_2 $" src="form_2056.png"/></picture>-norm of data on all children.</p>
+<p>Return <picture><source srcset="form_2148_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ l_2 $" src="form_2148.png"/></picture>-norm of data on all children.</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2057_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   d_{K_p}^2 = \sum d_{K_c}^2
   \qquad
   \forall K_c \text{ children of } K_p
-\]" src="form_2057.png"/></picture>
+\]" src="form_2149.png"/></picture>
 </p>
-<p>This strategy preserves the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm of the corresponding global data vector before and after adaptation. </p>
+<p>This strategy preserves the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm of the corresponding global data vector before and after adaptation. </p>
 
 </div>
 </div>
@@ -218,11 +218,11 @@
           <td class="paramtype">const std::vector&lt; value_type &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>children_values</em></span>&#href_anchor"memdoc">
 <p>Return mean value of data on all children.</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2058_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   d_{K_p} = \sum d_{K_c} / n_\text{children}
   \qquad
   \forall K_c \text{ children of } K_p
-\]" src="form_2058.png"/></picture>
+\]" src="form_2150.png"/></picture>
 </p>
  
 </div>
@@ -246,11 +246,11 @@
           <td class="paramtype">const std::vector&lt; value_type &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>children_values</em></span>&#href_anchor"memdoc">
 <p>Return maximum value of data on all children.</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2059_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2151_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   d_{K_p} = \max \left( d_{K_c} \right)
   \qquad
   \forall K_c \text{ children of } K_p
-\]" src="form_2059.png"/></picture>
+\]" src="form_2151.png"/></picture>
 </p>
  
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceAdaptationStrategies_1_1Refinement.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceAdaptationStrategies_1_1Refinement.html	2024-03-17 21:57:41.387221600 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceAdaptationStrategies_1_1Refinement.html	2024-03-17 21:57:41.387221600 +0000
@@ -128,11 +128,11 @@
           <td class="paramtype">const value_type</td>          <td class="paramname"><span class="paramname"><em>parent_value</em></span>&#href_anchor"memdoc">
 <p>Return a vector containing copies of data of the parent cell for each child.</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   d_{K_c} = d_{K_p}
   \qquad
   \forall K_c \text{ children of } K_p
-\]" src="form_2051.png"/></picture>
+\]" src="form_2143.png"/></picture>
 </p>
  
 </div>
@@ -156,13 +156,13 @@
           <td class="paramtype">const value_type</td>          <td class="paramname"><span class="paramname"><em>parent_value</em></span>&#href_anchor"memdoc">
 <p>Return a vector which contains data of the parent cell being equally divided among all children.</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2052_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   d_{K_c} = d_{K_p} / n_\text{children}
   \qquad
   \forall K_c \text{ children of } K_p
-\]" src="form_2052.png"/></picture>
+\]" src="form_2144.png"/></picture>
 </p>
-<p>This strategy preserves the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture>-norm of the corresponding global data <a class="el" href="classVector.html">Vector</a> before and after adaptation. </p>
+<p>This strategy preserves the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture>-norm of the corresponding global data <a class="el" href="classVector.html">Vector</a> before and after adaptation. </p>
 
 </div>
 </div>
@@ -185,13 +185,13 @@
           <td class="paramtype">const value_type</td>          <td class="paramname"><span class="paramname"><em>parent_value</em></span>&#href_anchor"memdoc">
 <p>Return a vector which contains squared data of the parent cell being equally divided among the squares of all children.</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2053_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   d_{K_c}^2 = d_{K_p}^2 / n_\text{children}
   \qquad
   \forall K_c \text{ children of } K_p
-\]" src="form_2053.png"/></picture>
+\]" src="form_2145.png"/></picture>
 </p>
-<p>This strategy preserves the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm of the corresponding global data <a class="el" href="classVector.html">Vector</a> before and after adaptation. </p>
+<p>This strategy preserves the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm of the corresponding global data <a class="el" href="classVector.html">Vector</a> before and after adaptation. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDataComponentInterpretation.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDataComponentInterpretation.html	2024-03-17 21:57:41.407221724 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDataComponentInterpretation.html	2024-03-17 21:57:41.411221748 +0000
@@ -115,7 +115,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>The members of this enum are used to describe the logical interpretation of what the various components of a vector-valued data set mean. For example, if one has a finite element for the Stokes equations in 2d, representing components <picture><source srcset="form_2134_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v,p)$" src="form_2134.png"/></picture>, one would like to indicate that the first two, <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> and <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture>, represent a logical vector so that later on when we generate graphical output we can hand them off to a visualization program that will automatically know to render them as a vector field, rather than as two separate and independent scalar fields.</p>
+<p>The members of this enum are used to describe the logical interpretation of what the various components of a vector-valued data set mean. For example, if one has a finite element for the Stokes equations in 2d, representing components <picture><source srcset="form_2152_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,v,p)$" src="form_2152.png"/></picture>, one would like to indicate that the first two, <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> and <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture>, represent a logical vector so that later on when we generate graphical output we can hand them off to a visualization program that will automatically know to render them as a vector field, rather than as two separate and independent scalar fields.</p>
 <p>By passing a set of enums of the current kind to the <a class="el" href="classDataOut__DoFData.html#href_anchor">DataOut_DoFData::add_data_vector</a> functions, this can be achieved.</p>
 <p>See the <a class="el" href="step_22.html">step-22</a> tutorial program for an example on how this information can be used in practice. </p>
 <table class="fieldtable">
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDataOutBase.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDataOutBase.html	2024-03-17 21:57:41.467222094 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDataOutBase.html	2024-03-17 21:57:41.471222119 +0000
@@ -540,7 +540,7 @@
 <p>While this discussion applies to two spatial dimensions, it is more complicated in 3d. The reason is that we could still use patches, but it is difficult when trying to visualize them, since if we use a cut through the data (by, for example, using x- and z-coordinates, a fixed y-value and plot function values in z-direction, then the patched data is not a patch in the sense GNUPLOT wants it any more. Therefore, we use another approach, namely writing the data on the 3d grid as a sequence of lines, i.e. two points each associated with one or more data sets. There are therefore 12 lines for each subcells of a patch.</p>
 <p>Given the lines as described above, a cut through this data in Gnuplot can then be achieved like this: </p><pre class="fragment">*   set data style lines
 *   splot [:][:][0:] "T" using 1:2:(\$3==.5 ? \$4 : -1)
-* </pre><p>This command plots data in <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>- and <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>-direction unbounded, but in <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>-direction only those data points which are above the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>- <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>-plane (we assume here a positive solution, if it has negative values, you might want to decrease the lower bound). Furthermore, it only takes the data points with z-values (<code>&amp;3</code>) equal to 0.5, i.e. a cut through the domain at <code>z=0.5</code>. For the data points on this plane, the data values of the first data set (<code>&amp;4</code>) are raised in z-direction above the x-y-plane; all other points are denoted the value <code>-1</code> instead of the value of the data vector and are not plotted due to the lower bound in z plotting direction, given in the third pair of brackets.</p>
+* </pre><p>This command plots data in <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>- and <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>-direction unbounded, but in <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>-direction only those data points which are above the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>- <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>-plane (we assume here a positive solution, if it has negative values, you might want to decrease the lower bound). Furthermore, it only takes the data points with z-values (<code>&amp;3</code>) equal to 0.5, i.e. a cut through the domain at <code>z=0.5</code>. For the data points on this plane, the data values of the first data set (<code>&amp;4</code>) are raised in z-direction above the x-y-plane; all other points are denoted the value <code>-1</code> instead of the value of the data vector and are not plotted due to the lower bound in z plotting direction, given in the third pair of brackets.</p>
 <p>More complex cuts are possible, including nonlinear ones. Note however, that only those points which are actually on the cut-surface are plotted. </p>
 
 <p class="definition">Definition at line <a class="el" href="data__out__base_8cc_source.html#href_anchor">3557</a> of file <a class="el" href="data__out__base_8cc_source.html">data_out_base.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDerivativeApproximation.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDerivativeApproximation.html	2024-03-17 21:57:41.507222341 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDerivativeApproximation.html	2024-03-17 21:57:41.511222366 +0000
@@ -120,17 +120,17 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>This namespace provides functions that compute a cell-wise approximation of the norm of a derivative of a finite element field by taking difference quotients between neighboring cells. This is a rather simple but efficient form to get an error indicator, since it can be computed with relatively little numerical effort and yet gives a reasonable approximation.</p>
-<p>The way the difference quotients are computed on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is the following (here described for the approximation of the gradient of a finite element field, but see below for higher derivatives): let <picture><source srcset="form_2155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K'$" src="form_2155.png"/></picture> be a neighboring cell, and let <picture><source srcset="form_2156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_{K'}=x_{K'}-x_K$" src="form_2156.png"/></picture> be the distance vector between the centers of the two cells, then <picture><source srcset="form_2157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \frac{u_h(x_{K'}) - u_h(x_K)}{ \|y_{K'}\|
-}$" src="form_2157.png"/></picture> is an approximation of the directional derivative <picture><source srcset="form_2158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \nabla u(x_K) \cdot
-\frac{y_{K'}}{ \|y_{K'}\| }.$" src="form_2158.png"/></picture> By multiplying both terms by <picture><source srcset="form_2159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{y_{K'}}{
-\|y_{K'}\| }$" src="form_2159.png"/></picture> from the left and summing over all neighbors <picture><source srcset="form_2155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K'$" src="form_2155.png"/></picture>, we obtain  <picture><source srcset="form_2160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \sum_{K'} \left( \frac{y_{K'}}{ \|y_{K'}\|} \frac{y_{K'}^T}{ \|y_{K'}\| }
+<p>The way the difference quotients are computed on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is the following (here described for the approximation of the gradient of a finite element field, but see below for higher derivatives): let <picture><source srcset="form_2163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K'$" src="form_2163.png"/></picture> be a neighboring cell, and let <picture><source srcset="form_2164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_{K'}=x_{K'}-x_K$" src="form_2164.png"/></picture> be the distance vector between the centers of the two cells, then <picture><source srcset="form_2165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \frac{u_h(x_{K'}) - u_h(x_K)}{ \|y_{K'}\|
+}$" src="form_2165.png"/></picture> is an approximation of the directional derivative <picture><source srcset="form_2166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \nabla u(x_K) \cdot
+\frac{y_{K'}}{ \|y_{K'}\| }.$" src="form_2166.png"/></picture> By multiplying both terms by <picture><source srcset="form_2167_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{y_{K'}}{
+\|y_{K'}\| }$" src="form_2167.png"/></picture> from the left and summing over all neighbors <picture><source srcset="form_2163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K'$" src="form_2163.png"/></picture>, we obtain  <picture><source srcset="form_2168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \sum_{K'} \left( \frac{y_{K'}}{ \|y_{K'}\|} \frac{y_{K'}^T}{ \|y_{K'}\| }
 \right) \nabla u(x_K) \approx \sum_{K'} \left( \frac{y_{K'}}{ \|y_{K'}\|}
-\frac{u_h(x_{K'}) - u_h(x_K)}{ \|y_{K'}\| }  \right).$" src="form_2160.png"/></picture></p>
-<p>Thus, if the matrix <picture><source srcset="form_2161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ Y =  \sum_{K'} \left( \frac{y_{K'}}{\|y_{K'}\|}
-\frac{y_{K'}^T}{ \|y_{K'}\| } \right)$" src="form_2161.png"/></picture> is regular (which is the case when the vectors <picture><source srcset="form_2162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_{K'}$" src="form_2162.png"/></picture> to all neighbors span the whole space), we can obtain an approximation to the true gradient by <picture><source srcset="form_2163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \nabla u(x_K) \approx Y^{-1}
+\frac{u_h(x_{K'}) - u_h(x_K)}{ \|y_{K'}\| }  \right).$" src="form_2168.png"/></picture></p>
+<p>Thus, if the matrix <picture><source srcset="form_2169_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ Y =  \sum_{K'} \left( \frac{y_{K'}}{\|y_{K'}\|}
+\frac{y_{K'}^T}{ \|y_{K'}\| } \right)$" src="form_2169.png"/></picture> is regular (which is the case when the vectors <picture><source srcset="form_2170_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_{K'}$" src="form_2170.png"/></picture> to all neighbors span the whole space), we can obtain an approximation to the true gradient by <picture><source srcset="form_2171_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \nabla u(x_K) \approx Y^{-1}
 \sum_{K'} \left( \frac{y_{K'}}{\|y_{K'}\|} \frac{u_h(x_{K'}) - u_h(x_K)}{
-\|y_{K'}\| } \right).$" src="form_2163.png"/></picture> This is a quantity that is easily computed. The value returned for each cell when calling the <code>approximate_gradient</code> function of this class is the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture> norm of this approximation to the gradient. To make this a useful quantity, you may want to scale each element by the correct power of the respective cell size.</p>
-<p>The computation of this quantity must fail if a cell has only neighbors for which the direction vectors <picture><source srcset="form_2164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_K$" src="form_2164.png"/></picture> do not span the whole space, since then the matrix <picture><source srcset="form_506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Y$" src="form_506.png"/></picture> is no longer invertible. If this happens, you will get an error similar to this one: </p><div class="fragment"><div class="line">--------------------------------------------------------</div>
+\|y_{K'}\| } \right).$" src="form_2171.png"/></picture> This is a quantity that is easily computed. The value returned for each cell when calling the <code>approximate_gradient</code> function of this class is the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture> norm of this approximation to the gradient. To make this a useful quantity, you may want to scale each element by the correct power of the respective cell size.</p>
+<p>The computation of this quantity must fail if a cell has only neighbors for which the direction vectors <picture><source srcset="form_2172_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_K$" src="form_2172.png"/></picture> do not span the whole space, since then the matrix <picture><source srcset="form_508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Y$" src="form_508.png"/></picture> is no longer invertible. If this happens, you will get an error similar to this one: </p><div class="fragment"><div class="line">--------------------------------------------------------</div>
 <div class="line">An error occurred in line &lt;749&gt;</div>
 <div class="line">of file &lt;source/numerics/derivative_approximation.cc&gt; in function</div>
 <div class="line">    <span class="keywordtype">void</span> DerivativeApproximation::approximate(...)</div>
@@ -148,19 +148,19 @@
 <div class="ttc" id="asymmetric__tensor_8h_html_a041d56f5d878527b2a9d274c47a6f037"><div class="ttname"><a href="symmetric__tensor_8h.html#href_anchor">determinant</a></div><div class="ttdeci">DEAL_II_HOST constexpr Number determinant(const SymmetricTensor&lt; 2, dim, Number &gt; &amp;)</div><div class="ttdef"><b>Definition</b> <a href="symmetric__tensor_8h_source.html#href_anchor">symmetric_tensor.h:2800</a></div></div>
 </div><!-- fragment --><p> As can easily be verified, this can only happen on very coarse grids, when some cells and all their neighbors have not been refined even once. You should therefore only call the functions of this class if all cells are at least once refined. In practice this is not much of a restriction.</p>
 <h3>Approximation of higher derivatives</h3>
-<p>Similar to the reasoning above, approximations to higher derivatives can be computed in a similar fashion. For example, the tensor of second derivatives is approximated by the formula <picture><source srcset="form_2165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \nabla^2 u(x_K) \approx Y^{-1}
+<p>Similar to the reasoning above, approximations to higher derivatives can be computed in a similar fashion. For example, the tensor of second derivatives is approximated by the formula <picture><source srcset="form_2173_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \nabla^2 u(x_K) \approx Y^{-1}
 \sum_{K'} \left( \frac{y_{K'}}{\|y_{K'}\|} \otimes \frac{\nabla u_h(x_{K'})
-- \nabla u_h(x_K)}{ \|y_{K'}\| } \right), $" src="form_2165.png"/></picture> where <picture><source srcset="form_2166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\otimes$" src="form_2166.png"/></picture> denotes the outer product of two vectors. Note that unlike the true tensor of second derivatives, its approximation is not necessarily symmetric. This is due to the fact that in the derivation, it is not clear whether we shall consider as projected second derivative the term <picture><source srcset="form_2167_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla^2 u y_{KK'}$" src="form_2167.png"/></picture> or <picture><source srcset="form_2168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_{KK'}^T
-\nabla^2 u$" src="form_2168.png"/></picture>. Depending on which choice we take, we obtain one approximation of the tensor of second derivatives or its transpose. To avoid this ambiguity, as result we take the symmetrized form, which is the mean value of the approximation and its transpose.</p>
-<p>The returned value on each cell is the spectral norm of the approximated tensor of second derivatives, i.e. the largest eigenvalue by absolute value. This equals the largest curvature of the finite element field at each cell, and the spectral norm is the matrix norm associated to the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture> vector norm.</p>
+- \nabla u_h(x_K)}{ \|y_{K'}\| } \right), $" src="form_2173.png"/></picture> where <picture><source srcset="form_2174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\otimes$" src="form_2174.png"/></picture> denotes the outer product of two vectors. Note that unlike the true tensor of second derivatives, its approximation is not necessarily symmetric. This is due to the fact that in the derivation, it is not clear whether we shall consider as projected second derivative the term <picture><source srcset="form_2175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla^2 u y_{KK'}$" src="form_2175.png"/></picture> or <picture><source srcset="form_2176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_{KK'}^T
+\nabla^2 u$" src="form_2176.png"/></picture>. Depending on which choice we take, we obtain one approximation of the tensor of second derivatives or its transpose. To avoid this ambiguity, as result we take the symmetrized form, which is the mean value of the approximation and its transpose.</p>
+<p>The returned value on each cell is the spectral norm of the approximated tensor of second derivatives, i.e. the largest eigenvalue by absolute value. This equals the largest curvature of the finite element field at each cell, and the spectral norm is the matrix norm associated to the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture> vector norm.</p>
 <p>Even higher than the second derivative can be obtained along the same lines as exposed above.</p>
 <h3>Refinement indicators based on the derivatives</h3>
-<p>If you would like to base a refinement criterion upon these approximation of the derivatives, you will have to scale the results of this class by an appropriate power of the mesh width. For example, since <picture><source srcset="form_2169_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|^2_{L_2}
-\le C h^2 \|\nabla u\|^2_{L_2}$" src="form_2169.png"/></picture>, it might be the right thing to scale the indicators as <picture><source srcset="form_2170_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_K = h \|\nabla u\|_K$" src="form_2170.png"/></picture>, i.e. <picture><source srcset="form_2171_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_K = h^{1+d/2}
-\|\nabla u\|_{\infty;K}$" src="form_2171.png"/></picture>, i.e. the right power is <picture><source srcset="form_2172_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1+d/2$" src="form_2172.png"/></picture>.</p>
-<p>Likewise, for the second derivative, one should choose a power of the mesh size <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> one higher than for the gradient.</p>
+<p>If you would like to base a refinement criterion upon these approximation of the derivatives, you will have to scale the results of this class by an appropriate power of the mesh width. For example, since <picture><source srcset="form_2177_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|^2_{L_2}
+\le C h^2 \|\nabla u\|^2_{L_2}$" src="form_2177.png"/></picture>, it might be the right thing to scale the indicators as <picture><source srcset="form_2178_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_K = h \|\nabla u\|_K$" src="form_2178.png"/></picture>, i.e. <picture><source srcset="form_2179_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_K = h^{1+d/2}
+\|\nabla u\|_{\infty;K}$" src="form_2179.png"/></picture>, i.e. the right power is <picture><source srcset="form_2180_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1+d/2$" src="form_2180.png"/></picture>.</p>
+<p>Likewise, for the second derivative, one should choose a power of the mesh size <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> one higher than for the gradient.</p>
 <h3>Implementation</h3>
-<p>The formulae for the computation of approximations to the gradient and to the tensor of second derivatives shown above are very much alike. The basic difference is that in one case the finite difference quotient is a scalar, while in the other case it is a vector. For higher derivatives, this would be a tensor of even higher rank. We then have to form the outer product of this difference quotient with the distance vector <picture><source srcset="form_2173_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_{KK'}$" src="form_2173.png"/></picture>, symmetrize it, contract it with the matrix <picture><source srcset="form_2174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Y^{-1}$" src="form_2174.png"/></picture> and compute its norm. To make the implementation simpler and to allow for code reuse, all these operations that are dependent on the actual order of the derivatives to be approximated, as well as the computation of the quantities entering the difference quotient, have been separated into auxiliary nested classes (names <code>Gradient</code> and <code>SecondDerivative</code>) and the main algorithm is simply passed one or the other data types and asks them to perform the order dependent operations. The main framework that is independent of this, such as finding all active neighbors, or setting up the matrix <picture><source srcset="form_506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Y$" src="form_506.png"/></picture> is done in the main function <code>approximate</code>.</p>
+<p>The formulae for the computation of approximations to the gradient and to the tensor of second derivatives shown above are very much alike. The basic difference is that in one case the finite difference quotient is a scalar, while in the other case it is a vector. For higher derivatives, this would be a tensor of even higher rank. We then have to form the outer product of this difference quotient with the distance vector <picture><source srcset="form_2181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_{KK'}$" src="form_2181.png"/></picture>, symmetrize it, contract it with the matrix <picture><source srcset="form_2182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Y^{-1}$" src="form_2182.png"/></picture> and compute its norm. To make the implementation simpler and to allow for code reuse, all these operations that are dependent on the actual order of the derivatives to be approximated, as well as the computation of the quantities entering the difference quotient, have been separated into auxiliary nested classes (names <code>Gradient</code> and <code>SecondDerivative</code>) and the main algorithm is simply passed one or the other data types and asks them to perform the order dependent operations. The main framework that is independent of this, such as finding all active neighbors, or setting up the matrix <picture><source srcset="form_508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Y$" src="form_508.png"/></picture> is done in the main function <code>approximate</code>.</p>
 <p>Due to this way of operation, the class may be easily extended for higher order derivatives than are presently implemented. Basically, only an additional class along the lines of the derivative descriptor classes <code>Gradient</code> and <code>SecondDerivative</code> has to be implemented, with the respective alias and functions replaced by the appropriate analogues for the derivative that is to be approximated. </p>
 </div><h2 class="groupheader">Function Documentation</h2>
 <a id="a98d28e4c1c17164c48719cdfe4a363e6" name="a98d28e4c1c17164c48719cdfe4a363e6"></a>
@@ -268,7 +268,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>component</em><span class="paramdefsep"> = </span><span class="paramdefval">0</span></span>&#href_anchor"memdoc">
-<p>This function is the analogue to the one above, computing finite difference approximations of the tensor of second derivatives. Pass it the DoF handler object that describes the finite element field, a nodal value vector, and receive the cell-wise spectral norm of the approximated tensor of second derivatives. The spectral norm is the matrix norm associated to the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture> vector norm.</p>
+<p>This function is the analogue to the one above, computing finite difference approximations of the tensor of second derivatives. Pass it the DoF handler object that describes the finite element field, a nodal value vector, and receive the cell-wise spectral norm of the approximated tensor of second derivatives. The spectral norm is the matrix norm associated to the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture> vector norm.</p>
 <p>The last parameter denotes the solution component, for which the gradient is to be computed. It defaults to the first component. For scalar elements, this is the only valid choice; for vector-valued ones, any component between zero and the number of vector components can be given here.</p>
 <p>In a parallel computation the <code>solution</code> vector needs to contain the locally relevant unknowns. </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDifferentiation_1_1SD.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDifferentiation_1_1SD.html	2024-03-17 21:57:41.631223108 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDifferentiation_1_1SD.html	2024-03-17 21:57:41.635223132 +0000
@@ -643,7 +643,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return a symbolic number that represents the Euler constant <picture><source srcset="form_901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e \approx 2.71828$" src="form_901.png"/></picture> raised to the given <code>exponent</code>.</p>
+<p>Return a symbolic number that represents the Euler constant <picture><source srcset="form_924_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e \approx 2.71828$" src="form_924.png"/></picture> raised to the given <code>exponent</code>.</p>
 <p>Mimics the function <code> std::exp(exponent) </code> using the standard math library. </p>
 
 <p class="definition">Definition at line <a class="el" href="symengine__math_8cc_source.html#href_anchor">60</a> of file <a class="el" href="symengine__math_8cc_source.html">symengine_math.cc</a>.</p>
@@ -2507,7 +2507,7 @@
       </table>
 </div><div class="memdoc">
 <p>Return an <a class="el" href="classDifferentiation_1_1SD_1_1Expression.html">Expression</a> representing a scalar symbolic variable with the identifier specified by <code>symbol</code>.</p>
-<p>For example, if the <code>symbol</code> is the string <code>"x"</code> then the scalar symbolic variable that is returned represents the scalar <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>.</p>
+<p>For example, if the <code>symbol</code> is the string <code>"x"</code> then the scalar symbolic variable that is returned represents the scalar <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">symbol</td><td>An identifier (or name) for the returned symbolic variable. </td></tr>
@@ -2540,7 +2540,7 @@
       </table>
 </div><div class="memdoc">
 <p>Return an <a class="el" href="classDifferentiation_1_1SD_1_1Expression.html">Expression</a> representing a scalar symbolic function with the identifier specified by <code>symbol</code>. The function's symbolic dependencies are specified by the input <code>arguments</code>.</p>
-<p>For example, if the <code>symbol</code> is the string <code>"f"</code>, and the arguments to the function that is generated are the symbolic variable <code>x</code> and the symbolic expression <code>y+z</code>, then the generic symbolic function that is returned represents <picture><source srcset="form_926_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x, y+z)$" src="form_926.png"/></picture>.</p>
+<p>For example, if the <code>symbol</code> is the string <code>"f"</code>, and the arguments to the function that is generated are the symbolic variable <code>x</code> and the symbolic expression <code>y+z</code>, then the generic symbolic function that is returned represents <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x, y+z)$" src="form_925.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">symbol</td><td>An identifier (or name) for the returned symbolic function. </td></tr>
@@ -2572,7 +2572,7 @@
       </table>
 </div><div class="memdoc">
 <p>Return an <a class="el" href="classDifferentiation_1_1SD_1_1Expression.html">Expression</a> representing a scalar symbolic function with the identifier specified by <code>symbol</code>. The function's symbolic dependencies are specified by the keys to the input <code>arguments</code> map; the values stored in the map are ignored.</p>
-<p>For example, if the <code>symbol</code> is the string <code>"f"</code>, and the arguments to the function that is generated are the symbolic variable <code>x</code> and the symbolic expression <code>y+z</code>, then the generic symbolic function that is returned represents <picture><source srcset="form_926_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x, y+z)$" src="form_926.png"/></picture>.</p>
+<p>For example, if the <code>symbol</code> is the string <code>"f"</code>, and the arguments to the function that is generated are the symbolic variable <code>x</code> and the symbolic expression <code>y+z</code>, then the generic symbolic function that is returned represents <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x, y+z)$" src="form_925.png"/></picture>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">symbol</td><td>An identifier (or name) for the returned symbolic function. </td></tr>
@@ -2608,7 +2608,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The symbolic function or expression representing the result <picture><source srcset="form_927_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial f}{\partial x}$" src="form_927.png"/></picture>. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The symbolic function or expression representing the result <picture><source srcset="form_926_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial f}{\partial x}$" src="form_926.png"/></picture>. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="symengine__scalar__operations_8cc_source.html#href_anchor">70</a> of file <a class="el" href="symengine__scalar__operations_8cc_source.html">symengine_scalar_operations.cc</a>.</p>
 
@@ -3647,7 +3647,7 @@
 <p>Return a substitution map that has any explicit interdependencies between the entries of the input <code>substitution_map</code> resolved.</p>
 <p>The <code>force_cyclic_dependency_resolution</code> flag exists to ensure, if desired, that no cyclic dependencies can exist in the returned map. If a cyclic dependency exists in the input substitution map, <code>substitution_map</code>, then with this flag set to <code>true</code> the dependency cycle is broken by a dictionary-ordered substitution. For example, if the substitution map contains two entries <code>map["a"] -&gt; "b"</code> and <code>map["b"] -&gt; "a"</code>, then the result of calling this function would be a map with the elements <code>map["a"] -&gt; "a"</code> and <code>map["b"] -&gt; "a"</code>.</p>
 <p>If one symbol is an explicit function of another, and it is desired that all their values are completely resolved, then it may be necessary to perform substitution a number of times before the result is finalized. This function performs substitution sweeps for a set of symbolic variables until all explicit relationships between the symbols in the map have been resolved. Whether each entry returns a symbolic or real value depends on the nature of the values stored in the substitution map. If the values associated with a key are also symbolic then the returned result may still be symbolic in nature. The terminal result of using the input substitution map, <code>symbol_values</code>, is then guaranteed to be rendered by a single substitution of the returned dependency-resolved map.</p>
-<p>Example: If <code>map["a"] -&gt; 1</code> and <code>map["b"] -&gt; "a"+ 2</code>, then the function <picture><source srcset="form_936_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(a,b(a)) = a+b$" src="form_936.png"/></picture> will be evaluated and the result <picture><source srcset="form_937_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\vert_{a=1,b=a+2} = 3+a$" src="form_937.png"/></picture> is determined upon the completion of the first sweep. A second sweep is therefore necessary to resolve the final symbol, and the returned value is ultimately <picture><source srcset="form_938_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f = [3+a]_{a=1} = 4$" src="form_938.png"/></picture>. By resolving the explicit relationships between all symbols in the map, we determine that <code>map["a"] -&gt; 1</code> and <code>map["b"] -&gt; 1 + 2 = 3</code> and thus, using only one substitution, that <picture><source srcset="form_939_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f = a+b = 1 + 3 = 4$" src="form_939.png"/></picture>. </p>
+<p>Example: If <code>map["a"] -&gt; 1</code> and <code>map["b"] -&gt; "a"+ 2</code>, then the function <picture><source srcset="form_927_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(a,b(a)) = a+b$" src="form_927.png"/></picture> will be evaluated and the result <picture><source srcset="form_928_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\vert_{a=1,b=a+2} = 3+a$" src="form_928.png"/></picture> is determined upon the completion of the first sweep. A second sweep is therefore necessary to resolve the final symbol, and the returned value is ultimately <picture><source srcset="form_929_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f = [3+a]_{a=1} = 4$" src="form_929.png"/></picture>. By resolving the explicit relationships between all symbols in the map, we determine that <code>map["a"] -&gt; 1</code> and <code>map["b"] -&gt; 1 + 2 = 3</code> and thus, using only one substitution, that <picture><source srcset="form_930_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f = a+b = 1 + 3 = 4$" src="form_930.png"/></picture>. </p>
 
 </div>
 </div>
@@ -3707,11 +3707,11 @@
 If the symbols stored in the map are explicitly dependent on one another, then the returned result depends on the order in which the map is traversed. It is recommended to first resolve all interdependencies in the map using the <a class="el" href="#href_anchor">resolve_explicit_dependencies()</a> function.</dd></dl>
 <p>Examples: </p><ol>
 <li>
-<p class="startli">If <code>map["a"] == 1</code> and <code>map["b"] == "a" + 2</code>, then the function <picture><source srcset="form_940_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(a,b(a)) := a+b$" src="form_940.png"/></picture> will be evaluated and the result <picture><source srcset="form_937_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\vert_{a=1,b=a+2} = 3+a$" src="form_937.png"/></picture> is returned. This return is because the symbol "a" is substituted throughout the function first, and only then is the symbol "b(a)" substituted, by which time its explicit dependency on "a" cannot be resolved.</p>
+<p class="startli">If <code>map["a"] == 1</code> and <code>map["b"] == "a" + 2</code>, then the function <picture><source srcset="form_931_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(a,b(a)) := a+b$" src="form_931.png"/></picture> will be evaluated and the result <picture><source srcset="form_928_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\vert_{a=1,b=a+2} = 3+a$" src="form_928.png"/></picture> is returned. This return is because the symbol "a" is substituted throughout the function first, and only then is the symbol "b(a)" substituted, by which time its explicit dependency on "a" cannot be resolved.</p>
 <p class="endli"></p>
 </li>
 <li>
-If <code>map["a"] == "b"+2</code> and <code>map["b"] == 1</code>, then the function <picture><source srcset="form_941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(a(b),b): = a+b$" src="form_941.png"/></picture> will be evaluated and the result <picture><source srcset="form_942_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\vert_{a=b+2, b} = [b+2+b]_{b=1} = 4$" src="form_942.png"/></picture> is returned. This is because the explicitly dependent symbol "a(b)" is substituted first followed by the symbol "b". </li>
+If <code>map["a"] == "b"+2</code> and <code>map["b"] == 1</code>, then the function <picture><source srcset="form_932_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(a(b),b): = a+b$" src="form_932.png"/></picture> will be evaluated and the result <picture><source srcset="form_933_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\vert_{a=b+2, b} = [b+2+b]_{b=1} = 4$" src="form_933.png"/></picture> is returned. This is because the explicitly dependent symbol "a(b)" is substituted first followed by the symbol "b". </li>
 </ol>
 
 </div>
@@ -3862,7 +3862,7 @@
       </table>
 </div><div class="memdoc">
 <p>Return a vector of Expressions representing a vectorial symbolic variable with the identifier specified by <code>symbol</code>.</p>
-<p>For example, if the <code>symbol</code> is the string <code>"v"</code> then the vectorial symbolic variable that is returned represents the vector <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture>. Each component of <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> is prefixed by the given <code>symbol</code>, and has a suffix that indicates its component index.</p>
+<p>For example, if the <code>symbol</code> is the string <code>"v"</code> then the vectorial symbolic variable that is returned represents the vector <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture>. Each component of <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> is prefixed by the given <code>symbol</code>, and has a suffix that indicates its component index.</p>
 <dl class="tparams"><dt>Template Parameters</dt><dd>
   <table class="tparams">
     <tr><td class="paramname">dim</td><td>The dimension of the returned tensor. </td></tr>
@@ -3899,7 +3899,7 @@
       </table>
 </div><div class="memdoc">
 <p>Return a tensor of Expressions representing a tensorial symbolic variable with the identifier specified by <code>symbol</code>.</p>
-<p>For example, if the <code>symbol</code> is the string <code>"T"</code> then the tensorial symbolic variable that is returned represents the vector <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture>. Each component of <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture> is prefixed by the given <code>symbol</code>, and has a suffix that indicates its component indices.</p>
+<p>For example, if the <code>symbol</code> is the string <code>"T"</code> then the tensorial symbolic variable that is returned represents the vector <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture>. Each component of <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture> is prefixed by the given <code>symbol</code>, and has a suffix that indicates its component indices.</p>
 <dl class="tparams"><dt>Template Parameters</dt><dd>
   <table class="tparams">
     <tr><td class="paramname">rank</td><td>The rank of the returned tensor. </td></tr>
@@ -4102,7 +4102,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The tensor of symbolic functions or expressions representing the result <picture><source srcset="form_928_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial f}{\partial \mathbf{T}}$" src="form_928.png"/></picture>. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The tensor of symbolic functions or expressions representing the result <picture><source srcset="form_935_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial f}{\partial \mathbf{T}}$" src="form_935.png"/></picture>. </dd></dl>
 
 </div>
 </div>
@@ -4131,7 +4131,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The symmetric tensor of symbolic functions or expressions representing the result <picture><source srcset="form_929_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial f}{\partial \mathbf{S}}$" src="form_929.png"/></picture>. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The symmetric tensor of symbolic functions or expressions representing the result <picture><source srcset="form_936_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial f}{\partial \mathbf{S}}$" src="form_936.png"/></picture>. </dd></dl>
 
 </div>
 </div>
@@ -4160,7 +4160,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The tensor of symbolic functions or expressions representing the result <picture><source srcset="form_928_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial f}{\partial \mathbf{T}}$" src="form_928.png"/></picture>. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The tensor of symbolic functions or expressions representing the result <picture><source srcset="form_935_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial f}{\partial \mathbf{T}}$" src="form_935.png"/></picture>. </dd></dl>
 
 </div>
 </div>
@@ -4189,7 +4189,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The symmetric tensor of symbolic functions or expressions representing the result <picture><source srcset="form_929_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial f}{\partial \mathbf{S}}$" src="form_929.png"/></picture>. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The symmetric tensor of symbolic functions or expressions representing the result <picture><source srcset="form_936_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial f}{\partial \mathbf{S}}$" src="form_936.png"/></picture>. </dd></dl>
 
 </div>
 </div>
@@ -4218,7 +4218,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The tensor of symbolic functions or expressions representing the result <picture><source srcset="form_930_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial \mathbf{T}}{\partial x}$" src="form_930.png"/></picture>. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The tensor of symbolic functions or expressions representing the result <picture><source srcset="form_937_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial \mathbf{T}}{\partial x}$" src="form_937.png"/></picture>. </dd></dl>
 
 </div>
 </div>
@@ -4247,7 +4247,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The symmetric tensor of symbolic functions or expressions representing the result <picture><source srcset="form_931_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial \mathbf{S}}{\partial x}$" src="form_931.png"/></picture>. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The symmetric tensor of symbolic functions or expressions representing the result <picture><source srcset="form_938_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial \mathbf{S}}{\partial x}$" src="form_938.png"/></picture>. </dd></dl>
 
 </div>
 </div>
@@ -4276,7 +4276,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The tensor of symbolic functions or expressions representing the result <picture><source srcset="form_930_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial \mathbf{T}}{\partial x}$" src="form_930.png"/></picture>. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The tensor of symbolic functions or expressions representing the result <picture><source srcset="form_937_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial \mathbf{T}}{\partial x}$" src="form_937.png"/></picture>. </dd></dl>
 
 </div>
 </div>
@@ -4305,7 +4305,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The symmetric tensor of symbolic functions or expressions representing the result <picture><source srcset="form_931_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial \mathbf{S}}{\partial x}$" src="form_931.png"/></picture>. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The symmetric tensor of symbolic functions or expressions representing the result <picture><source srcset="form_938_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial \mathbf{S}}{\partial x}$" src="form_938.png"/></picture>. </dd></dl>
 
 </div>
 </div>
@@ -4334,8 +4334,8 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The tensor of symbolic functions or variables representing the result <picture><source srcset="form_932_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial \mathbf{T}_{1}}{\partial
-\mathbf{T}_{2}}$" src="form_932.png"/></picture>. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The tensor of symbolic functions or variables representing the result <picture><source srcset="form_939_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial \mathbf{T}_{1}}{\partial
+\mathbf{T}_{2}}$" src="form_939.png"/></picture>. </dd></dl>
 
 </div>
 </div>
@@ -4364,8 +4364,8 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The symmetric tensor of symbolic functions or variables representing the result <picture><source srcset="form_933_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial \mathbf{S}_{1}}{\partial
-\mathbf{S}_{2}}$" src="form_933.png"/></picture>. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The symmetric tensor of symbolic functions or variables representing the result <picture><source srcset="form_940_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial \mathbf{S}_{1}}{\partial
+\mathbf{S}_{2}}$" src="form_940.png"/></picture>. </dd></dl>
 
 </div>
 </div>
@@ -4394,7 +4394,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The tensor of symbolic functions or variables representing the result <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial \mathbf{T}}{\partial \mathbf{S}}$" src="form_934.png"/></picture>. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The tensor of symbolic functions or variables representing the result <picture><source srcset="form_941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial \mathbf{T}}{\partial \mathbf{S}}$" src="form_941.png"/></picture>. </dd></dl>
 
 </div>
 </div>
@@ -4423,7 +4423,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd>The tensor of symbolic functions or variables representing the result <picture><source srcset="form_935_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial \mathbf{S}}{\partial \mathbf{T}}$" src="form_935.png"/></picture>. </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>The tensor of symbolic functions or variables representing the result <picture><source srcset="form_942_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial \mathbf{S}}{\partial \mathbf{T}}$" src="form_942.png"/></picture>. </dd></dl>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDoFRenumbering.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDoFRenumbering.html	2024-03-17 21:57:41.715223626 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDoFRenumbering.html	2024-03-17 21:57:41.715223626 +0000
@@ -228,13 +228,13 @@
 <p>Using the constraint information usually leads to reductions in bandwidth of 10 or 20 per cent, but may for some very unstructured grids also lead to an increase. You have to weigh the decrease in your case with the time spent to use the constraint information, which usually is several times longer than the &lsquo;pure&rsquo; renumbering algorithm.</p>
 <p>In almost all cases, the renumbering scheme finds a corner to start with. Since there is more than one corner in most grids and since even an interior degree of freedom may be a better starting point, giving the starting point by the user may be a viable way if you have a simple scheme to derive a suitable point (e.g. by successively taking the third child of the cell top left of the coarsest level, taking its third vertex and the dof index thereof, if you want the top left corner vertex). If you do not know beforehand what your grid will look like (e.g. when using adaptive algorithms), searching a best starting point may be difficult, however, and in many cases will not justify the effort.</p>
 <h3>Component-wise and block-wise numberings</h3>
-<p>For finite elements composed of several base elements using the <a class="el" href="classFESystem.html">FESystem</a> class, or for elements which provide several components themselves, it may be of interest to sort the DoF indices by component. This will then bring out the block matrix structure, since otherwise the degrees of freedom are numbered cell-wise without taking into account that they may belong to different components. For example, one may want to sort degree of freedom for a Stokes discretization so that we first get all velocities and then all the pressures so that the resulting matrix naturally decomposes into a <picture><source srcset="form_104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_104.png"/></picture> system.</p>
+<p>For finite elements composed of several base elements using the <a class="el" href="classFESystem.html">FESystem</a> class, or for elements which provide several components themselves, it may be of interest to sort the DoF indices by component. This will then bring out the block matrix structure, since otherwise the degrees of freedom are numbered cell-wise without taking into account that they may belong to different components. For example, one may want to sort degree of freedom for a Stokes discretization so that we first get all velocities and then all the pressures so that the resulting matrix naturally decomposes into a <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_97.png"/></picture> system.</p>
 <p>This kind of numbering may be obtained by calling the <a class="el" href="#href_anchor">component_wise()</a> function of this class. Since it does not touch the order of indices within each component, it may be worthwhile to first renumber using the Cuthill- McKee or a similar algorithm and afterwards renumbering component-wise. This will bring out the matrix structure and additionally have a good numbering within each block.</p>
 <p>The <a class="el" href="#href_anchor">component_wise()</a> function allows not only to honor enumeration based on vector components, but also allows to group together vector components into "blocks" using a defaulted argument to the various <a class="el" href="#href_anchor">DoFRenumbering::component_wise()</a> functions (see <a class="el" href="DEALGlossary.html#href_anchor">GlossComponent</a> vs <a class="el" href="DEALGlossary.html#href_anchor">GlossBlock</a> for a description of the difference). The blocks designated through this argument may, but do not have to be, equal to the blocks that the finite element reports. For example, a typical Stokes element would be </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFESystem.html">FESystem&lt;dim&gt;</a> stokes_fe (<a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(2), dim,   <span class="comment">// dim velocities</span></div>
 <div class="line">                         <a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(1), 1);    <span class="comment">// one pressure</span></div>
 <div class="ttc" id="aclassFESystem_html"><div class="ttname"><a href="classFESystem.html">FESystem</a></div><div class="ttdef"><b>Definition</b> <a href="fe__system_8h_source.html#href_anchor">fe_system.h:209</a></div></div>
 <div class="ttc" id="aclassFE__Q_html"><div class="ttname"><a href="classFE__Q.html">FE_Q</a></div><div class="ttdef"><b>Definition</b> <a href="fe__q_8h_source.html#href_anchor">fe_q.h:551</a></div></div>
-</div><!-- fragment --><p> This element has <code>dim+1</code> vector components and equally many blocks. However, one may want to consider the velocities as one logical block so that all velocity degrees of freedom are enumerated the same way, independent of whether they are <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>- or <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>-velocities. This is done, for example, in <a class="el" href="step_20.html">step-20</a> and <a class="el" href="step_22.html">step-22</a> as well as several other tutorial programs.</p>
+</div><!-- fragment --><p> This element has <code>dim+1</code> vector components and equally many blocks. However, one may want to consider the velocities as one logical block so that all velocity degrees of freedom are enumerated the same way, independent of whether they are <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>- or <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>-velocities. This is done, for example, in <a class="el" href="step_20.html">step-20</a> and <a class="el" href="step_22.html">step-22</a> as well as several other tutorial programs.</p>
 <p>On the other hand, if you really want to use block structure reported by the finite element itself (a case that is often the case if you have finite elements that have multiple vector components, e.g. the <a class="el" href="classFE__RaviartThomas.html">FE_RaviartThomas</a> or <a class="el" href="classFE__Nedelec.html">FE_Nedelec</a> elements) then you can use the <a class="el" href="#href_anchor">DoFRenumbering::block_wise</a> instead of the <a class="el" href="#href_anchor">DoFRenumbering::component_wise</a> functions.</p>
 <h3>Cell-wise numbering</h3>
 <p>Given an ordered vector of cells, the function <a class="el" href="#href_anchor">cell_wise()</a> sorts the degrees of freedom such that degrees on earlier cells of this vector will occur before degrees on later cells.</p>
@@ -247,7 +247,7 @@
 <p>The <a class="el" href="classMatrixFree.html">MatrixFree</a> class provides optimized algorithms for interleaving operations on vectors before and after the access of the vector data in the respective loops. The algorithm <a class="el" href="#href_anchor">matrix_free_data_locality()</a> makes sure that all unknowns with a short distance between the first and last access are grouped together, in order to increase the spatial data locality.</p>
 <h3>A comparison of reordering strategies</h3>
 <p>As a benchmark of comparison, let us consider what the different sparsity patterns produced by the various algorithms when using the <picture><source srcset="form_951_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2^d\times
-Q_1$" src="form_951.png"/></picture> element combination typically employed in the discretization of Stokes equations, when used on the mesh obtained in <a class="el" href="step_22.html">step-22</a> after one adaptive mesh refinement in 3d. The space dimension together with the coupled finite element leads to a rather dense system matrix with, on average around 180 nonzero entries per row. After applying each of the reordering strategies shown below, the degrees of freedom are also sorted using <a class="el" href="#href_anchor">DoFRenumbering::component_wise</a> into velocity and pressure groups; this produces the <picture><source srcset="form_104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_104.png"/></picture> block structure seen below with the large velocity-velocity block at top left, small pressure-pressure block at bottom right, and coupling blocks at top right and bottom left.</p>
+Q_1$" src="form_951.png"/></picture> element combination typically employed in the discretization of Stokes equations, when used on the mesh obtained in <a class="el" href="step_22.html">step-22</a> after one adaptive mesh refinement in 3d. The space dimension together with the coupled finite element leads to a rather dense system matrix with, on average around 180 nonzero entries per row. After applying each of the reordering strategies shown below, the degrees of freedom are also sorted using <a class="el" href="#href_anchor">DoFRenumbering::component_wise</a> into velocity and pressure groups; this produces the <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_97.png"/></picture> block structure seen below with the large velocity-velocity block at top left, small pressure-pressure block at bottom right, and coupling blocks at top right and bottom left.</p>
 <p>The goal of reordering strategies is to improve the preconditioner. In <a class="el" href="step_22.html">step-22</a> we use a <a class="el" href="classSparseILU.html">SparseILU</a> to preconditioner for the velocity-velocity block at the top left. The quality of the preconditioner can then be measured by the number of CG iterations required to solve a linear system with this block. For some of the reordering strategies below we record this number for adaptive refinement cycle 3, with 93176 degrees of freedom; because we solve several linear systems with the same matrix in the Schur complement, the average number of iterations is reported. The lower the number the better the preconditioner and consequently the better the renumbering of degrees of freedom is suited for this task. We also state the run-time of the program, in part determined by the number of iterations needed, for the first 4 cycles on one of our machines. Note that the reported times correspond to the run time of the entire program, not just the affected solver; if a program runs twice as fast with one particular ordering than with another one, then this means that the actual solver is actually several times faster.</p>
 <table class="doxtable">
 <tr>
@@ -459,7 +459,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Sort the degrees of freedom by vector component. The numbering within each component is not touched, so a degree of freedom with index <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>, belonging to some component, and another degree of freedom with index <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> belonging to the same component will be assigned new indices <picture><source srcset="form_952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n(i)$" src="form_952.png"/></picture> and <picture><source srcset="form_953_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n(j)$" src="form_953.png"/></picture> with <picture><source srcset="form_954_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n(i)&lt;n(j)$" src="form_954.png"/></picture> if <picture><source srcset="form_955_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i&lt;j$" src="form_955.png"/></picture> and <picture><source srcset="form_956_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n(i)&gt;n(j)$" src="form_956.png"/></picture> if <picture><source srcset="form_957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i&gt;j$" src="form_957.png"/></picture>.</p>
+<p>Sort the degrees of freedom by vector component. The numbering within each component is not touched, so a degree of freedom with index <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>, belonging to some component, and another degree of freedom with index <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> belonging to the same component will be assigned new indices <picture><source srcset="form_952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n(i)$" src="form_952.png"/></picture> and <picture><source srcset="form_953_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n(j)$" src="form_953.png"/></picture> with <picture><source srcset="form_954_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n(i)&lt;n(j)$" src="form_954.png"/></picture> if <picture><source srcset="form_955_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i&lt;j$" src="form_955.png"/></picture> and <picture><source srcset="form_956_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n(i)&gt;n(j)$" src="form_956.png"/></picture> if <picture><source srcset="form_957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i&gt;j$" src="form_957.png"/></picture>.</p>
 <p>You can specify that the components are ordered in a different way than suggested by the <a class="el" href="classFESystem.html">FESystem</a> object you use. To this end, set up the vector <code>target_component</code> such that the entry at index <code>i</code> denotes the number of the target component for dofs with component <code>i</code> in the <a class="el" href="classFESystem.html">FESystem</a>. Naming the same target component more than once is possible and results in a blocking of several components into one. This is discussed in <a class="el" href="step_22.html">step-22</a>. If you omit this argument, the same order as given by the finite element is used.</p>
 <p>If one of the base finite elements from which the global finite element under consideration here, is a non-primitive one, i.e. its shape functions have more than one non-zero component, then it is not possible to associate these degrees of freedom with a single vector component. In this case, they are associated with the first vector component to which they belong.</p>
 <p>For finite elements with only one component, or a single non-primitive base element, this function is the identity operation. </p>
@@ -553,7 +553,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Sort the degrees of freedom by vector block. The numbering within each block is not touched, so a degree of freedom with index <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>, belonging to some block, and another degree of freedom with index <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> belonging to the same block will be assigned new indices <picture><source srcset="form_952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n(i)$" src="form_952.png"/></picture> and <picture><source srcset="form_953_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n(j)$" src="form_953.png"/></picture> with <picture><source srcset="form_954_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n(i)&lt;n(j)$" src="form_954.png"/></picture> if <picture><source srcset="form_955_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i&lt;j$" src="form_955.png"/></picture> and <picture><source srcset="form_956_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n(i)&gt;n(j)$" src="form_956.png"/></picture> if <picture><source srcset="form_957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i&gt;j$" src="form_957.png"/></picture>.</p>
+<p>Sort the degrees of freedom by vector block. The numbering within each block is not touched, so a degree of freedom with index <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>, belonging to some block, and another degree of freedom with index <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> belonging to the same block will be assigned new indices <picture><source srcset="form_952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n(i)$" src="form_952.png"/></picture> and <picture><source srcset="form_953_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n(j)$" src="form_953.png"/></picture> with <picture><source srcset="form_954_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n(i)&lt;n(j)$" src="form_954.png"/></picture> if <picture><source srcset="form_955_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i&lt;j$" src="form_955.png"/></picture> and <picture><source srcset="form_956_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n(i)&gt;n(j)$" src="form_956.png"/></picture> if <picture><source srcset="form_957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i&gt;j$" src="form_957.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>This function only succeeds if each of the elements in the <a class="el" href="classhp_1_1FECollection.html">hp::FECollection</a> attached to the <a class="el" href="classDoFHandler.html">DoFHandler</a> argument has exactly the same number of blocks (see <a class="el" href="DEALGlossary.html#href_anchor">the glossary</a> for more information). Note that this is not always given: while the <a class="el" href="classhp_1_1FECollection.html">hp::FECollection</a> class ensures that all of its elements have the same number of vector components, they need not have the same number of blocks. At the same time, this function here needs to match individual blocks across elements and therefore requires that elements have the same number of blocks and that subsequent blocks in one element have the same meaning as in another element. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="dof__renumbering_8cc_source.html#href_anchor">999</a> of file <a class="el" href="dof__renumbering_8cc_source.html">dof_renumbering.cc</a>.</p>
@@ -638,7 +638,7 @@
 <li>For meshes based on <a class="el" href="classparallel_1_1distributed_1_1Triangulation.html">parallel::distributed::Triangulation</a>, the <a class="el" href="DEALGlossary.html#href_anchor">locally owned cells</a> of each MPI process are contiguous in Z order. That means that numbering degrees of freedom by visiting cells in Z order yields <a class="el" href="DEALGlossary.html#href_anchor">locally owned DoF indices</a> that consist of contiguous ranges for each process. This is also true for the default ordering of DoFs on such triangulations, but the default ordering creates an enumeration that also depends on how many processors participate in the mesh, whereas the one generated by this function enumerates the degrees of freedom on a particular cell with indices that will be the same regardless of how many processes the mesh is split up between.</li>
 </ul>
 <p>For meshes based on <a class="el" href="classparallel_1_1shared_1_1Triangulation.html">parallel::shared::Triangulation</a>, the situation is more complex. Here, the set of locally owned cells is determined by a partitioning algorithm (selected by passing an object of type <a class="el" href="classparallel_1_1shared_1_1Triangulation.html#href_anchor">parallel::shared::Triangulation::Settings</a> to the constructor of the triangulation), and in general these partitioning algorithms may assign cells to <a class="el" href="DEALGlossary.html#href_anchor">subdomains</a> based on decisions that may have nothing to do with the Z order. (Though it is possible to select these flags in a way so that partitioning uses the Z order.) As a consequence, the cells of one subdomain are not contiguous in Z order, and if one renumbered degrees of freedom based on the Z order of cells, one would generally end up with DoF indices that on each processor do not form a contiguous range. This is often inconvenient (for example, because PETSc cannot store vectors and matrices for which the locally owned set of indices is not contiguous), and consequently this function uses the following algorithm for <a class="el" href="classparallel_1_1shared_1_1Triangulation.html">parallel::shared::Triangulation</a> objects:</p><ul>
-<li>It determines how many degrees of freedom each processor owns. This is an invariant under renumbering, and consequently we can use how many DoFs each processor owns at the beginning of the current function. Let us call this number <picture><source srcset="form_958_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n_P$" src="form_958.png"/></picture> for processor <picture><source srcset="form_175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_175.png"/></picture>.</li>
+<li>It determines how many degrees of freedom each processor owns. This is an invariant under renumbering, and consequently we can use how many DoFs each processor owns at the beginning of the current function. Let us call this number <picture><source srcset="form_958_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n_P$" src="form_958.png"/></picture> for processor <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_149.png"/></picture>.</li>
 <li>It determines for each processor a contiguous range of new DoF indices <picture><source srcset="form_959_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[b_P,e_P)$" src="form_959.png"/></picture> so that <picture><source srcset="form_960_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_P-b_P=n_P$" src="form_960.png"/></picture>, <picture><source srcset="form_961_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_0=0$" src="form_961.png"/></picture>, and <picture><source srcset="form_962_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_P=e_{P-1}$" src="form_962.png"/></picture>.</li>
 <li>It traverses the <em>locally owned cells</em> in Z order and renumbers the locally owned degrees of freedom on these cells so that the new numbers fit within the interval <picture><source srcset="form_959_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[b_P,e_P)$" src="form_959.png"/></picture>. In other words, the <em>locally owned degrees of freedom</em> on each processor are sorted according to the Z order of the locally owned cells they are on, but this property may not hold globally, across cells. This is because the partitioning algorithm may have decided that, for example, processor 0 owns a cell that comes <em>later</em> in Z order than one of the cells assigned to processor 1. On the other hand, the algorithm described above assigns the degrees of freedom on this cell <em>earlier</em> indices than all of the indices owned by processor 1.</li>
 </ul>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDoFTools.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDoFTools.html	2024-03-17 21:57:41.799224145 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceDoFTools.html	2024-03-17 21:57:41.803224170 +0000
@@ -298,7 +298,7 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>This is a collection of functions operating on, and manipulating the numbers of degrees of freedom. The documentation of the member functions will provide more information, but for functions that exist in multiple versions, there are sections in this global documentation stating some commonalities.</p>
 <h3>Setting up sparsity patterns</h3>
-<p>When assembling system matrices, the entries are usually of the form <picture><source srcset="form_1009_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ij} = a(\phi_i, \phi_j)$" src="form_1009.png"/></picture>, where <picture><source srcset="form_1010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_1010.png"/></picture> is a bilinear functional, often an integral. When using sparse matrices, we therefore only need to reserve space for those <picture><source srcset="form_1011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ij}$" src="form_1011.png"/></picture> only, which are nonzero, which is the same as to say that the basis functions <picture><source srcset="form_1012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i$" src="form_1012.png"/></picture> and <picture><source srcset="form_1013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_j$" src="form_1013.png"/></picture> have a nonempty intersection of their support. Since the support of basis functions is bound only on cells on which they are located or to which they are adjacent, to determine the sparsity pattern it is sufficient to loop over all cells and connect all basis functions on each cell with all other basis functions on that cell. There may be finite elements for which not all basis functions on a cell connect with each other, but no use of this case is made since no examples where this occurs are known to the author.</p>
+<p>When assembling system matrices, the entries are usually of the form <picture><source srcset="form_963_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ij} = a(\phi_i, \phi_j)$" src="form_963.png"/></picture>, where <picture><source srcset="form_964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_964.png"/></picture> is a bilinear functional, often an integral. When using sparse matrices, we therefore only need to reserve space for those <picture><source srcset="form_965_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ij}$" src="form_965.png"/></picture> only, which are nonzero, which is the same as to say that the basis functions <picture><source srcset="form_966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i$" src="form_966.png"/></picture> and <picture><source srcset="form_967_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_j$" src="form_967.png"/></picture> have a nonempty intersection of their support. Since the support of basis functions is bound only on cells on which they are located or to which they are adjacent, to determine the sparsity pattern it is sufficient to loop over all cells and connect all basis functions on each cell with all other basis functions on that cell. There may be finite elements for which not all basis functions on a cell connect with each other, but no use of this case is made since no examples where this occurs are known to the author.</p>
 <h3>DoF numberings on boundaries</h3>
 <p>When projecting the traces of functions to the boundary or parts thereof, one needs to build matrices and vectors that act only on those degrees of freedom that are located on the boundary, rather than on all degrees of freedom. One could do that by simply building matrices in which the entries for all interior DoFs are zero, but such matrices are always very rank deficient and not very practical to work with.</p>
 <p>What is needed instead in this case is a numbering of the boundary degrees of freedom, i.e. we should enumerate all the degrees of freedom that are sitting on the boundary, and exclude all other (interior) degrees of freedom. The <a class="el" href="#href_anchor">map_dof_to_boundary_indices()</a> function does exactly this: it provides a vector with as many entries as there are degrees of freedom on the whole domain, with each entry being the number in the numbering of the boundary or <a class="el" href="namespacenumbers.html#href_anchor">numbers::invalid_dof_index</a> if the dof is not on the boundary.</p>
@@ -308,7 +308,7 @@
 <p>(As a side note, for corner cases: The question what a degree of freedom on the boundary is, is not so easy. It should really be a degree of freedom of which the respective basis function has nonzero values on the boundary. At least for Lagrange elements this definition is equal to the statement that the off-point, or what deal.II calls support_point, of the shape function, i.e. the point where the function assumes its nominal value (for Lagrange elements this is the point where it has the function value 1), is located on the boundary. We do not check this directly, the criterion is rather defined through the information the finite element class gives: the <a class="el" href="classFiniteElement.html">FiniteElement</a> class defines the numbers of basis functions per vertex, per line, and so on and the basis functions are numbered after this information; a basis function is to be considered to be on the face of a cell (and thus on the boundary if the cell is at the boundary) according to it belonging to a vertex, line, etc but not to the interior of the cell. The finite element uses the same cell-wise numbering so that we can say that if a degree of freedom was numbered as one of the dofs on lines, we assume that it is located on the line. Where the off-point actually is, is a secret of the finite element (well, you can ask it, but we don't do it here) and not relevant in this context.)</p>
 <h3>Setting up sparsity patterns for boundary matrices</h3>
 <p>In some cases, one wants to only work with DoFs that sit on the boundary. One application is, for example, if rather than interpolating non- homogeneous boundary values, one would like to project them. For this, we need two things: a way to identify nodes that are located on (parts of) the boundary, and a way to build matrices out of only degrees of freedom that are on the boundary (i.e. much smaller matrices, in which we do not even build the large zero block that stems from the fact that most degrees of freedom have no support on the boundary of the domain). The first of these tasks is done by the <a class="el" href="#href_anchor">map_dof_to_boundary_indices()</a> function (described above).</p>
-<p>The second part requires us first to build a sparsity pattern for the couplings between boundary nodes, and then to actually build the components of this matrix. While actually computing the entries of these small boundary matrices is discussed in the <a class="el" href="namespaceMatrixCreator.html">MatrixCreator</a> namespace, the creation of the sparsity pattern is done by the create_boundary_sparsity_pattern() function. For its work, it needs to have a numbering of all those degrees of freedom that are on those parts of the boundary that we are interested in. You can get this from the <a class="el" href="#href_anchor">map_dof_to_boundary_indices()</a> function. It then builds the sparsity pattern corresponding to integrals like <picture><source srcset="form_1014_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_\Gamma \varphi_{b2d(i)} \varphi_{b2d(j)} dx$" src="form_1014.png"/></picture>, where <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> are indices into the matrix, and <picture><source srcset="form_1015_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b2d(i)$" src="form_1015.png"/></picture> is the global DoF number of a degree of freedom sitting on a boundary (i.e., <picture><source srcset="form_1016_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b2d$" src="form_1016.png"/></picture> is the inverse of the mapping returned by <a class="el" href="#href_anchor">map_dof_to_boundary_indices()</a> function). </p>
+<p>The second part requires us first to build a sparsity pattern for the couplings between boundary nodes, and then to actually build the components of this matrix. While actually computing the entries of these small boundary matrices is discussed in the <a class="el" href="namespaceMatrixCreator.html">MatrixCreator</a> namespace, the creation of the sparsity pattern is done by the create_boundary_sparsity_pattern() function. For its work, it needs to have a numbering of all those degrees of freedom that are on those parts of the boundary that we are interested in. You can get this from the <a class="el" href="#href_anchor">map_dof_to_boundary_indices()</a> function. It then builds the sparsity pattern corresponding to integrals like <picture><source srcset="form_968_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_\Gamma \varphi_{b2d(i)} \varphi_{b2d(j)} dx$" src="form_968.png"/></picture>, where <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> are indices into the matrix, and <picture><source srcset="form_969_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b2d(i)$" src="form_969.png"/></picture> is the global DoF number of a degree of freedom sitting on a boundary (i.e., <picture><source srcset="form_970_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b2d$" src="form_970.png"/></picture> is the inverse of the mapping returned by <a class="el" href="#href_anchor">map_dof_to_boundary_indices()</a> function). </p>
 </div><h2 class="groupheader">Enumeration Type Documentation</h2>
 <a id="ad31df71a29dd76de9b4ab241b2527160" name="ad31df71a29dd76de9b4ab241b2527160"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#href_anchor">&#9670;&#160;</a></span>Coupling</h2>
@@ -488,7 +488,7 @@
 <p>Otherwise, if <code>face_1</code> and <code>face_2</code> are not active faces, this function loops recursively over the children of <code>face_1</code> and <code>face_2</code>. If only one of the two faces is active, then we recursively iterate over the children of the non-active ones and make sure that the solution function on the refined side equals that on the non-refined face in much the same way as we enforce hanging node constraints at places where differently refined cells come together. (However, unlike hanging nodes, we do not enforce the requirement that there be only a difference of one refinement level between the two sides of the domain you would like to be periodic).</p>
 <p>This routine only constrains DoFs that are not already constrained. If this routine encounters a DoF that already is constrained (for instance by Dirichlet boundary conditions), the old setting of the constraint (dofs the entry is constrained to, inhomogeneities) is kept and nothing happens.</p>
 <p>The flags in the <code>component_mask</code> (see <a class="el" href="DEALGlossary.html#href_anchor">GlossComponentMask</a>) denote which components of the finite element space shall be constrained with periodic boundary conditions. If it is left as specified by the default value all components are constrained. If it is different from the default value, it is assumed that the number of entries equals the number of components of the finite element. This can be used to enforce periodicity in only one variable in a system of equations.</p>
-<p><code>face_orientation</code>, <code>face_flip</code> and <code>face_rotation</code> describe an orientation that should be applied to <code>face_1</code> prior to matching and constraining DoFs. This has nothing to do with the actual orientation of the given faces in their respective cells (which for boundary faces is always the default) but instead how you want to see periodicity to be enforced. For example, by using these flags, you can enforce a condition of the kind <picture><source srcset="form_1036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(0,y)=u(1,1-y)$" src="form_1036.png"/></picture> (i.e., a Moebius band) or in 3d a twisted torus. More precisely, these flags match local face DoF indices in the following manner:</p>
+<p><code>face_orientation</code>, <code>face_flip</code> and <code>face_rotation</code> describe an orientation that should be applied to <code>face_1</code> prior to matching and constraining DoFs. This has nothing to do with the actual orientation of the given faces in their respective cells (which for boundary faces is always the default) but instead how you want to see periodicity to be enforced. For example, by using these flags, you can enforce a condition of the kind <picture><source srcset="form_990_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(0,y)=u(1,1-y)$" src="form_990.png"/></picture> (i.e., a Moebius band) or in 3d a twisted torus. More precisely, these flags match local face DoF indices in the following manner:</p>
 <p>In 2d: <code>face_orientation</code> must always be <code>true</code>, <code>face_rotation</code> is always <code>false</code>, and face_flip has the meaning of <code>line_flip</code>; this implies e.g. for <code>Q1</code>:</p>
 <div class="fragment"><div class="line">face_orientation = <span class="keyword">true</span>, face_flip = <span class="keyword">false</span>, face_rotation = <span class="keyword">false</span>:</div>
 <div class="line"> </div>
@@ -561,7 +561,7 @@
 <div class="line">and any combination of that...</div>
 </div><!-- fragment --><p>Optionally a matrix <code>matrix</code> along with a std::vector <code>first_vector_components</code> can be specified that describes how DoFs on <code>face_1</code> should be modified prior to constraining to the DoFs of <code>face_2</code>. Here, two declarations are possible: If the std::vector <code>first_vector_components</code> is non empty the matrix is interpreted as a <code>dim</code> <picture><source srcset="form_897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\times$" src="form_897.png"/></picture> <code>dim</code> rotation matrix that is applied to all vector valued blocks listed in <code>first_vector_components</code> of the <a class="el" href="classFESystem.html">FESystem</a>. If <code>first_vector_components</code> is empty the matrix is interpreted as an interpolation matrix with size no_face_dofs <picture><source srcset="form_897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\times$" src="form_897.png"/></picture> no_face_dofs.</p>
 <p>This function makes sure that identity constraints don't create cycles in <code>constraints</code>.</p>
-<p><code>periodicity_factor</code> can be used to implement Bloch periodic conditions (a.k.a. phase shift periodic conditions) of the form <picture><source srcset="form_1037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(\mathbf{r})=e^{-i\mathbf{k}\cdot\mathbf{r}}u(\mathbf{r})$" src="form_1037.png"/></picture> where <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> is periodic with the same periodicity as the crystal lattice and <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{k}$" src="form_1038.png"/></picture> is the wavevector, see <a href="https://en.wikipedia.org/wiki/Bloch_wave">https://en.wikipedia.org/wiki/Bloch_wave</a>. The solution at <code>face_2</code> is equal to the solution at <code>face_1</code> times <code>periodicity_factor</code>. For example, if the solution at <code>face_1</code> is <picture><source srcset="form_1039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(0)$" src="form_1039.png"/></picture> and <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{d}$" src="form_1040.png"/></picture> is the corresponding point on <code>face_2</code>, then the solution at <code>face_2</code> should be <picture><source srcset="form_1041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(d) = \psi(0)e^{-i \mathbf{k}\cdot \mathbf{d}}$" src="form_1041.png"/></picture>. This condition can be implemented using <picture><source srcset="form_1042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{periodicity\_factor}=e^{-i \mathbf{k}\cdot \mathbf{d}}$" src="form_1042.png"/></picture>.</p>
+<p><code>periodicity_factor</code> can be used to implement Bloch periodic conditions (a.k.a. phase shift periodic conditions) of the form <picture><source srcset="form_991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(\mathbf{r})=e^{-i\mathbf{k}\cdot\mathbf{r}}u(\mathbf{r})$" src="form_991.png"/></picture> where <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> is periodic with the same periodicity as the crystal lattice and <picture><source srcset="form_992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{k}$" src="form_992.png"/></picture> is the wavevector, see <a href="https://en.wikipedia.org/wiki/Bloch_wave">https://en.wikipedia.org/wiki/Bloch_wave</a>. The solution at <code>face_2</code> is equal to the solution at <code>face_1</code> times <code>periodicity_factor</code>. For example, if the solution at <code>face_1</code> is <picture><source srcset="form_993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(0)$" src="form_993.png"/></picture> and <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{d}$" src="form_994.png"/></picture> is the corresponding point on <code>face_2</code>, then the solution at <code>face_2</code> should be <picture><source srcset="form_995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(d) = \psi(0)e^{-i \mathbf{k}\cdot \mathbf{d}}$" src="form_995.png"/></picture>. This condition can be implemented using <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{periodicity\_factor}=e^{-i \mathbf{k}\cdot \mathbf{d}}$" src="form_996.png"/></picture>.</p>
 <p>Detailed information can be found in the see <a class="el" href="DEALGlossary.html#href_anchor">Glossary entry on periodic boundary conditions</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="dof__tools__constraints_8cc_source.html#href_anchor">2292</a> of file <a class="el" href="dof__tools__constraints_8cc_source.html">dof_tools_constraints.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFESeries.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFESeries.html	2024-03-17 21:57:41.839224392 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFESeries.html	2024-03-17 21:57:41.839224392 +0000
@@ -165,7 +165,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Linear regression least-square fit of <picture><source srcset="form_1175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = k \, x + b$" src="form_1175.png"/></picture>. The size of the input vectors should be equal and more than 1. The returned pair will contain <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> (first) and <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> (second). </p>
+<p>Linear regression least-square fit of <picture><source srcset="form_1196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = k \, x + b$" src="form_1196.png"/></picture>. The size of the input vectors should be equal and more than 1. The returned pair will contain <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> (first) and <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> (second). </p>
 
 <p class="definition">Definition at line <a class="el" href="fe__series_8cc_source.html#href_anchor">30</a> of file <a class="el" href="fe__series_8cc_source.html">fe_series.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFETools.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFETools.html	2024-03-17 21:57:41.891224713 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFETools.html	2024-03-17 21:57:41.891224713 +0000
@@ -188,7 +188,7 @@
 <tr class="memitem:a88b0fbfad93e11649be719c2aed1ee4d"><td class="memTemplItemLeft" align="right" valign="top">void&#href_anchor"memTemplItemRight" valign="bottom"><a class="el" href="#href_anchor">extrapolate</a> (const <a class="el" href="classDoFHandler.html">DoFHandler</a>&lt; dim, spacedim &gt; &amp;dof1, const InVector &amp;z1, const <a class="el" href="classDoFHandler.html">DoFHandler</a>&lt; dim, spacedim &gt; &amp;dof2, const <a class="el" href="classAffineConstraints.html">AffineConstraints</a>&lt; typename OutVector::value_type &gt; &amp;constraints, OutVector &amp;z2)</td></tr>
 <tr class="separator:a88b0fbfad93e11649be719c2aed1ee4d"><td class="memSeparator" colspan="2">&#href_anchor"details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>This namespace offers interpolations and extrapolations of discrete functions of one <code><a class="el" href="classFiniteElement.html">FiniteElement</a></code> <code>fe1</code> to another <code><a class="el" href="classFiniteElement.html">FiniteElement</a></code> <code>fe2</code>.</p>
-<p>It also provides the local interpolation matrices that interpolate on each cell. Furthermore it provides the difference matrix <picture><source srcset="form_1205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$id-I_h$" src="form_1205.png"/></picture> that is needed for evaluating <picture><source srcset="form_1206_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(id-I_h)z$" src="form_1206.png"/></picture> for e.g. the dual solution <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>.</p>
+<p>It also provides the local interpolation matrices that interpolate on each cell. Furthermore it provides the difference matrix <picture><source srcset="form_1205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$id-I_h$" src="form_1205.png"/></picture> that is needed for evaluating <picture><source srcset="form_1206_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(id-I_h)z$" src="form_1206.png"/></picture> for e.g. the dual solution <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>.</p>
 <p>For more information about the <code>spacedim</code> template parameter check the documentation of <a class="el" href="classFiniteElement.html">FiniteElement</a> or the one of <a class="el" href="classTriangulation.html">Triangulation</a>. </p>
 </div><h2 class="groupheader">Function Documentation</h2>
 <a id="a4945a239d321d126dfccce60a73a4e67" name="a4945a239d321d126dfccce60a73a4e67"></a>
@@ -330,7 +330,7 @@
           <td></td>
           <td class="paramtype"><a class="el" href="classFullMatrix.html">FullMatrix</a>&lt; number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>difference_matrix</em></span>&#href_anchor"memdoc">
 <p>Compute the identity matrix minus the back interpolation matrix. The <code>difference_matrix</code> will be of size <code>(fe1.n_dofs_per_cell(), fe1.n_dofs_per_cell())</code> after this function. Previous content of the argument will be overwritten.</p>
-<p>This function computes the matrix that transforms a <code>fe1</code> function <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> to <picture><source srcset="form_1207_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z-I_hz$" src="form_1207.png"/></picture> where <picture><source srcset="form_1208_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_h$" src="form_1208.png"/></picture> denotes the interpolation operator from the <code>fe1</code> space to the <code>fe2</code> space. This matrix hence is useful to evaluate error-representations where <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> denotes the dual solution. </p>
+<p>This function computes the matrix that transforms a <code>fe1</code> function <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> to <picture><source srcset="form_1207_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z-I_hz$" src="form_1207.png"/></picture> where <picture><source srcset="form_1208_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_h$" src="form_1208.png"/></picture> denotes the interpolation operator from the <code>fe1</code> space to the <code>fe2</code> space. This matrix hence is useful to evaluate error-representations where <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> denotes the dual solution. </p>
 
 </div>
 </div>
@@ -377,20 +377,20 @@
       </table>
 </div><div class="memdoc">
 <p>This is a rather specialized function used during the construction of finite element objects. It is used to build the basis of shape functions for an element, given a set of polynomials and interpolation points. The function is only implemented for finite elements with exactly <code>dim</code> vector components. In particular, this applies to classes derived from the <a class="el" href="classFE__PolyTensor.html">FE_PolyTensor</a> class.</p>
-<p>Specifically, the purpose of this function is as follows: <a class="el" href="classFE__PolyTensor.html">FE_PolyTensor</a> receives, from its derived classes, an argument that describes a polynomial space. This space may be parameterized in terms of monomials, or in some other way, but is in general not in the form that we use for finite elements where we typically want to use a basis that is derived from some kind of node functional (e.g., the interpolation at specific points). Concretely, assume that the basis used by the polynomial space is <picture><source srcset="form_1210_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\tilde\varphi_j(\mathbf x)\}_{j=1}^N$" src="form_1210.png"/></picture>, and that the node functionals of the finite element are <picture><source srcset="form_1211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi_i\}_{i=1}^N$" src="form_1211.png"/></picture>. We then want to compute a basis <picture><source srcset="form_1212_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi_j(\mathbf x)\}_{j=1}^N$" src="form_1212.png"/></picture> for the finite element space so that <picture><source srcset="form_1213_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi_j] = \delta_{ij}$" src="form_1213.png"/></picture>. To do this, we can set <picture><source srcset="form_1214_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(\mathbf x) = \sum_{k=1}^N c_{jk} \tilde\varphi_k(\mathbf x)$" src="form_1214.png"/></picture> where we need to determine the expansion coefficients <picture><source srcset="form_1125_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_{jk}$" src="form_1125.png"/></picture>. We do this by applying <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> to both sides of the equation, to obtain  </p><p class="formulaDsp">
+<p>Specifically, the purpose of this function is as follows: <a class="el" href="classFE__PolyTensor.html">FE_PolyTensor</a> receives, from its derived classes, an argument that describes a polynomial space. This space may be parameterized in terms of monomials, or in some other way, but is in general not in the form that we use for finite elements where we typically want to use a basis that is derived from some kind of node functional (e.g., the interpolation at specific points). Concretely, assume that the basis used by the polynomial space is <picture><source srcset="form_1210_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\tilde\varphi_j(\mathbf x)\}_{j=1}^N$" src="form_1210.png"/></picture>, and that the node functionals of the finite element are <picture><source srcset="form_1211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\Psi_i\}_{i=1}^N$" src="form_1211.png"/></picture>. We then want to compute a basis <picture><source srcset="form_1212_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi_j(\mathbf x)\}_{j=1}^N$" src="form_1212.png"/></picture> for the finite element space so that <picture><source srcset="form_1213_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\varphi_j] = \delta_{ij}$" src="form_1213.png"/></picture>. To do this, we can set <picture><source srcset="form_1214_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(\mathbf x) = \sum_{k=1}^N c_{jk} \tilde\varphi_k(\mathbf x)$" src="form_1214.png"/></picture> where we need to determine the expansion coefficients <picture><source srcset="form_1150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_{jk}$" src="form_1150.png"/></picture>. We do this by applying <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> to both sides of the equation, to obtain  </p><p class="formulaDsp">
 <picture><source srcset="form_1215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \Psi_i [\varphi_j] = \sum_{k=1}^N c_{jk} \Psi_i[\tilde\varphi_k],
 \end{align*}" src="form_1215.png"/></picture>
 </p>
-<p> and we know that the left hand side equals <picture><source srcset="form_144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_{ij}$" src="form_144.png"/></picture>. If you think of this as a system of <picture><source srcset="form_1216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N\times N$" src="form_1216.png"/></picture> equations for the elements of a matrix on the left and on the right, then this can be written as  </p><p class="formulaDsp">
+<p> and we know that the left hand side equals <picture><source srcset="form_118_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_{ij}$" src="form_118.png"/></picture>. If you think of this as a system of <picture><source srcset="form_1216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N\times N$" src="form_1216.png"/></picture> equations for the elements of a matrix on the left and on the right, then this can be written as  </p><p class="formulaDsp">
 <picture><source srcset="form_1217_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   I = C X^T
 \end{align*}" src="form_1217.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> is the matrix of coefficients <picture><source srcset="form_1125_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_{jk}$" src="form_1125.png"/></picture> and <picture><source srcset="form_1218_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{ik} = \Psi_i[\tilde\varphi_k]$" src="form_1218.png"/></picture>. Consequently, in order to compute the expansion coefficients <picture><source srcset="form_1219_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C=X^{-T}$" src="form_1219.png"/></picture>, we need to apply the node functionals to all functions of the "raw" basis of the polynomial space.</p>
-<p>Until the finite element receives this matrix <picture><source srcset="form_1220_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X$" src="form_1220.png"/></picture> back, it describes its shape functions (e.g., in <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::shape_value()</a>) in the form <picture><source srcset="form_1221_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde\varphi_j$" src="form_1221.png"/></picture>. After it calls this function, it has the expansion coefficients and can describe its shape functions as <picture><source srcset="form_1017_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j$" src="form_1017.png"/></picture>.</p>
+<p> where <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> is the matrix of coefficients <picture><source srcset="form_1150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_{jk}$" src="form_1150.png"/></picture> and <picture><source srcset="form_1218_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_{ik} = \Psi_i[\tilde\varphi_k]$" src="form_1218.png"/></picture>. Consequently, in order to compute the expansion coefficients <picture><source srcset="form_1219_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C=X^{-T}$" src="form_1219.png"/></picture>, we need to apply the node functionals to all functions of the "raw" basis of the polynomial space.</p>
+<p>Until the finite element receives this matrix <picture><source srcset="form_1220_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X$" src="form_1220.png"/></picture> back, it describes its shape functions (e.g., in <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::shape_value()</a>) in the form <picture><source srcset="form_1221_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde\varphi_j$" src="form_1221.png"/></picture>. After it calls this function, it has the expansion coefficients and can describe its shape functions as <picture><source srcset="form_971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j$" src="form_971.png"/></picture>.</p>
 <p>This function therefore computes this matrix <picture><source srcset="form_1220_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X$" src="form_1220.png"/></picture>, for the following specific circumstances:</p><ul>
-<li>That the node functionals <picture><source srcset="form_998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_998.png"/></picture> are point evaluations at points <picture><source srcset="form_1222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_i$" src="form_1222.png"/></picture> that the finite element in question describes via its "generalized" support points (through <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::get_generalized_support_points()</a>, see also <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>). These point evaluations need to necessarily evaluate the <em>value</em> of a shape function at that point (the shape function may be vector-valued, and so the functional may be a linear combination of the individual components of the values); but, in particular, the nodal functions may not be <em>integrals</em> over entire edges or faces, or other non-local functionals. In other words, we assume that <picture><source srcset="form_1223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\tilde\varphi_j] = f_j(\tilde\varphi_j(\mathbf x_i))$" src="form_1223.png"/></picture> where <picture><source srcset="form_1224_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_j$" src="form_1224.png"/></picture> is a function of the (possibly vector-valued) argument that returns a scalar.</li>
+<li>That the node functionals <picture><source srcset="form_1032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i$" src="form_1032.png"/></picture> are point evaluations at points <picture><source srcset="form_1222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_i$" src="form_1222.png"/></picture> that the finite element in question describes via its "generalized" support points (through <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::get_generalized_support_points()</a>, see also <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>). These point evaluations need to necessarily evaluate the <em>value</em> of a shape function at that point (the shape function may be vector-valued, and so the functional may be a linear combination of the individual components of the values); but, in particular, the nodal functions may not be <em>integrals</em> over entire edges or faces, or other non-local functionals. In other words, we assume that <picture><source srcset="form_1223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_i[\tilde\varphi_j] = f_j(\tilde\varphi_j(\mathbf x_i))$" src="form_1223.png"/></picture> where <picture><source srcset="form_1224_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_j$" src="form_1224.png"/></picture> is a function of the (possibly vector-valued) argument that returns a scalar.</li>
 <li>That the finite element has exactly <code>dim</code> vector components.</li>
 <li>That the function <picture><source srcset="form_1224_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_j$" src="form_1224.png"/></picture> is given by whatever the element implements through the <a class="el" href="classFiniteElement.html#href_anchor">FiniteElement::convert_generalized_support_point_values_to_dof_values()</a> function.</li>
 </ul>
@@ -898,7 +898,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">OutVector &amp;</td>          <td class="paramname"><span class="paramname"><em>z1_difference</em></span>&#href_anchor"memdoc">
-<p>Compute <picture><source srcset="form_1226_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(Id-I_h)z_1$" src="form_1226.png"/></picture> for a given <code>dof1-function</code> <picture><source srcset="form_1227_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_1$" src="form_1227.png"/></picture>, where <picture><source srcset="form_1208_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_h$" src="form_1208.png"/></picture> is the interpolation from <code>fe1</code> to <code>fe2</code>. The result <picture><source srcset="form_1226_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(Id-I_h)z_1$" src="form_1226.png"/></picture> is written into <code>z1_difference</code>.</p>
+<p>Compute <picture><source srcset="form_1225_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(Id-I_h)z_1$" src="form_1225.png"/></picture> for a given <code>dof1-function</code> <picture><source srcset="form_1226_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_1$" src="form_1226.png"/></picture>, where <picture><source srcset="form_1208_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_h$" src="form_1208.png"/></picture> is the interpolation from <code>fe1</code> to <code>fe2</code>. The result <picture><source srcset="form_1225_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(Id-I_h)z_1$" src="form_1225.png"/></picture> is written into <code>z1_difference</code>.</p>
 <p>Note, that this function does not work for continuous elements at hanging nodes. For that case use the <code>interpolation_difference</code> function, below, that takes an additional <code><a class="el" href="classAffineConstraints.html">AffineConstraints</a></code> object. </p>
 
 </div>
@@ -940,7 +940,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">OutVector &amp;</td>          <td class="paramname"><span class="paramname"><em>z1_difference</em></span>&#href_anchor"memdoc">
-<p>Compute <picture><source srcset="form_1226_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(Id-I_h)z_1$" src="form_1226.png"/></picture> for a given <code>dof1-function</code> <picture><source srcset="form_1227_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_1$" src="form_1227.png"/></picture>, where <picture><source srcset="form_1208_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_h$" src="form_1208.png"/></picture> is the interpolation from <code>fe1</code> to <code>fe2</code>. The result <picture><source srcset="form_1226_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(Id-I_h)z_1$" src="form_1226.png"/></picture> is written into <code>z1_difference</code>. <code>constraints1</code> and <code>constraints2</code> are the hanging node constraints corresponding to <code>dof1</code> and <code>dof2</code>, respectively. These objects are particular important when continuous elements on grids with hanging nodes (locally refined grids) are involved.</p>
+<p>Compute <picture><source srcset="form_1225_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(Id-I_h)z_1$" src="form_1225.png"/></picture> for a given <code>dof1-function</code> <picture><source srcset="form_1226_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_1$" src="form_1226.png"/></picture>, where <picture><source srcset="form_1208_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_h$" src="form_1208.png"/></picture> is the interpolation from <code>fe1</code> to <code>fe2</code>. The result <picture><source srcset="form_1225_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(Id-I_h)z_1$" src="form_1225.png"/></picture> is written into <code>z1_difference</code>. <code>constraints1</code> and <code>constraints2</code> are the hanging node constraints corresponding to <code>dof1</code> and <code>dof2</code>, respectively. These objects are particular important when continuous elements on grids with hanging nodes (locally refined grids) are involved.</p>
 <p>For parallel computations, supply <code>z1</code> with ghost elements and <code>z1_difference</code> without ghost elements. </p>
 
 </div>
@@ -1011,7 +1011,7 @@
 <li>It then performs a loop over all non-active cells of <code>dof2</code>. If such a non-active cell has at least one active child, then we call the children of this cell a "patch". We then interpolate from the children of this patch to the patch, using the finite element space associated with <code>dof2</code> and immediately interpolate back to the children. In essence, this information throws away all information in the solution vector that lives on a scale smaller than the patch cell.</li>
 <li>Since we traverse non-active cells from the coarsest to the finest levels, we may find patches that correspond to child cells of previously treated patches if the mesh had been refined adaptively (this cannot happen if the mesh has been refined globally because there the children of a patch are all active). We also perform the operation described above on these patches, but it is easy to see that on patches that are children of previously treated patches, the operation is now the identity operation (since it interpolates from the children of the current patch a function that had previously been interpolated to these children from an even coarser patch). Consequently, this does not alter the solution vector any more.</li>
 </ul>
-<p>The name of the function originates from the fact that it can be used to construct a representation of a function of higher polynomial degree on a once coarser mesh. For example, if you imagine that you start with a <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> function on a globally refined mesh, and that <code>dof2</code> is associated with a <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> element, then this function computes the equivalent of the operator <picture><source srcset="form_1228_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_{2h}^{(2)}$" src="form_1228.png"/></picture> interpolating the original piecewise linear function onto a quadratic function on a once coarser mesh with mesh size <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2h$" src="form_1229.png"/></picture> (but representing this function on the original mesh with size <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>). If the exact solution is sufficiently smooth, then <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^\ast=I_{2h}^{(2)}u_h$" src="form_1231.png"/></picture> is typically a better approximation to the exact solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> of the PDE than <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> is. In other words, this function provides a postprocessing step that improves the solution in a similar way one often obtains by extrapolating a sequence of solutions, explaining the origin of the function's name.</p>
+<p>The name of the function originates from the fact that it can be used to construct a representation of a function of higher polynomial degree on a once coarser mesh. For example, if you imagine that you start with a <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> function on a globally refined mesh, and that <code>dof2</code> is associated with a <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> element, then this function computes the equivalent of the operator <picture><source srcset="form_1227_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_{2h}^{(2)}$" src="form_1227.png"/></picture> interpolating the original piecewise linear function onto a quadratic function on a once coarser mesh with mesh size <picture><source srcset="form_1228_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2h$" src="form_1228.png"/></picture> (but representing this function on the original mesh with size <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>). If the exact solution is sufficiently smooth, then <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^\ast=I_{2h}^{(2)}u_h$" src="form_1230.png"/></picture> is typically a better approximation to the exact solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> of the PDE than <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> is. In other words, this function provides a postprocessing step that improves the solution in a similar way one often obtains by extrapolating a sequence of solutions, explaining the origin of the function's name.</p>
 <dl class="section note"><dt>Note</dt><dd>The resulting field does not satisfy continuity requirements of the given finite elements if the algorithm outlined above is used. When you use continuous elements on grids with hanging nodes, please use the <code>extrapolate</code> function with an additional <a class="el" href="classAffineConstraints.html">AffineConstraints</a> argument, see below.</dd>
 <dd>
 Since this function operates on patches of cells, it requires that the underlying grid is refined at least once for every coarse grid cell. If this is not the case, an exception will be raised. </dd></dl>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFETools_1_1Compositing.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFETools_1_1Compositing.html	2024-03-17 21:57:41.927224936 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFETools_1_1Compositing.html	2024-03-17 21:57:41.931224960 +0000
@@ -127,13 +127,13 @@
 <ol>
 <li>
 <p class="startli"><a class="el" href="classTensor.html">Tensor</a> product construction (<code>do_tensor_product=true</code>): The tensor product construction, in the simplest case, builds a vector-valued element from scalar elements (see <a class="el" href="group__vector__valued.html">this documentation module</a> and <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a> for more information). To give an example, consider creating a vector-valued element with two vector components, where the first should have linear shape functions and the second quadratic shape functions. In 1d, the shape functions (on the reference cell) of the base elements are then  </p><p class="formulaDsp">
-<picture><source srcset="form_1233_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   Q_1 &amp;= \{ 1-x, x \},
   \\  Q_2 &amp;= \{ 2(\frac 12 - x)(1-x), 2(x - \frac 12)x, 4x(1-x) \},
-\end{align*}" src="form_1233.png"/></picture>
+\end{align*}" src="form_1232.png"/></picture>
 </p>
 <p> where shape functions are ordered in the usual way (first on the first vertex, then on the second vertex, then in the interior of the cell). The tensor product construction will create an element with the following shape functions:  </p><p class="formulaDsp">
-<picture><source srcset="form_1234_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_1233_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   Q_1 \times Q_2 &amp;=
   \left\{
     \begin{pmatrix} 1-x \\ 0 \end{pmatrix},
@@ -142,7 +142,7 @@
     \begin{pmatrix} 0 \\ 2(x - \frac 12)x \end{pmatrix},
     \begin{pmatrix} 0 \\ 4x(1-x) \end{pmatrix}
   \right\}.
-\end{align*}" src="form_1234.png"/></picture>
+\end{align*}" src="form_1233.png"/></picture>
 </p>
 <p> The list here is again in standard order.</p>
 <p class="interli">Of course, the procedure also works if the base elements are already vector valued themselves: in that case, the composed element simply has as many vector components as the base elements taken together.</p>
@@ -150,10 +150,10 @@
 </li>
 <li>
 <p class="startli">Combining shape functions (<code>do_tensor_product=false</code>): In contrast to the previous strategy, combining shape functions simply takes <em>all</em> of the shape functions together. In the case above, this would yield the following element:  </p><p class="formulaDsp">
-<picture><source srcset="form_1235_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_1234_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   Q_1 + Q_2 &amp;= \{ 1-x, 2(\frac 12 - x)(1-x),
                   x, 2(x - \frac 12)x, 4x(1-x) \}.
-\end{align*}" src="form_1235.png"/></picture>
+\end{align*}" src="form_1234.png"/></picture>
 </p>
 <p> In other words, if the base elements are scalar, the resulting element will also be. In general, the base elements all will have to have the same number of vector components.</p>
 <p class="interli">The element constructed above of course no longer has a linearly independent set of shape functions. As a consequence, any matrix one creates by treating all shape functions of the composed element in the same way will be singular. In practice, this strategy is therefore typically used in situations where one explicitly makes sure that certain shape functions are treated differently (e.g., by multiplying them with weight functions), or in cases where the shape functions one combines are not linearly dependent.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFunctionTools.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFunctionTools.html	2024-03-17 21:57:41.951225084 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceFunctionTools.html	2024-03-17 21:57:41.955225108 +0000
@@ -130,13 +130,13 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>component</em><span class="paramdefsep"> = </span><span class="paramdefval">0</span></span>&#href_anchor"memdoc">
-<p>Estimate bounds on the value and bounds on each gradient component of a <a class="el" href="classFunction.html">Function</a>, <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture>, over a <a class="el" href="classBoundingBox.html">BoundingBox</a>, by approximating it by a 2nd order Taylor polynomial starting from the box center.</p>
-<p>Each lower and upper bound is returned as a <code>std::pair&lt;double, double&gt;</code>, such that the first entry is the lower bound, <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>, and the second is the upper bound, <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture>, i.e. <picture><source srcset="form_534_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x) \in [L, U]$" src="form_534.png"/></picture>.</p>
+<p>Estimate bounds on the value and bounds on each gradient component of a <a class="el" href="classFunction.html">Function</a>, <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture>, over a <a class="el" href="classBoundingBox.html">BoundingBox</a>, by approximating it by a 2nd order Taylor polynomial starting from the box center.</p>
+<p>Each lower and upper bound is returned as a <code>std::pair&lt;double, double&gt;</code>, such that the first entry is the lower bound, <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>, and the second is the upper bound, <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture>, i.e. <picture><source srcset="form_538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x) \in [L, U]$" src="form_538.png"/></picture>.</p>
 <p>The function value, gradient, and Hessian are computed at the box center. The bounds on the value of the function are then estimated as</p>
-<p><picture><source srcset="form_535_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x) \in [f(x_c) - F, f(x_c) + F]$" src="form_535.png"/></picture>, where  <picture><source srcset="form_536_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F = \sum_i |\partial_i f(x_c)| h_i
-   + 1/2 \sum_i \sum_j |\partial_i \partial_j f(x_c)| h_i h_j$" src="form_536.png"/></picture>.</p>
-<p>Here, <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_i$" src="form_537.png"/></picture> is half the side length of the box in the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th coordinate direction, which is the distance we extrapolate. The bounds on the gradient components are estimated similarly as</p>
-<p><picture><source srcset="form_538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_i f \in [\partial_i f(x_c) - G_i, \partial_i f(x_c) + G_i]$" src="form_538.png"/></picture>, where <picture><source srcset="form_539_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_i = \sum_j |\partial_i \partial_j f(x_c)| h_j$" src="form_539.png"/></picture>.</p>
+<p><picture><source srcset="form_539_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x) \in [f(x_c) - F, f(x_c) + F]$" src="form_539.png"/></picture>, where  <picture><source srcset="form_540_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F = \sum_i |\partial_i f(x_c)| h_i
+   + 1/2 \sum_i \sum_j |\partial_i \partial_j f(x_c)| h_i h_j$" src="form_540.png"/></picture>.</p>
+<p>Here, <picture><source srcset="form_541_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_i$" src="form_541.png"/></picture> is half the side length of the box in the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th coordinate direction, which is the distance we extrapolate. The bounds on the gradient components are estimated similarly as</p>
+<p><picture><source srcset="form_542_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_i f \in [\partial_i f(x_c) - G_i, \partial_i f(x_c) + G_i]$" src="form_542.png"/></picture>, where <picture><source srcset="form_543_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_i = \sum_j |\partial_i \partial_j f(x_c)| h_j$" src="form_543.png"/></picture>.</p>
 <p>If the function has more than 1 component the <code>component</code> parameter can be used to specify which function component the bounds should be computed for. </p>
 
 <p class="definition">Definition at line <a class="el" href="function__tools_8cc_source.html#href_anchor">26</a> of file <a class="el" href="function__tools_8cc_source.html">function_tools.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGraphColoring.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGraphColoring.html	2024-03-17 21:57:41.979225257 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGraphColoring.html	2024-03-17 21:57:41.979225257 +0000
@@ -135,9 +135,9 @@
 <p>Create a partitioning of the given range of iterators so that iterators that point to conflicting objects will be placed into different partitions, where the question whether two objects conflict is determined by a user-provided function.</p>
 <p>This function can also be considered as a graph coloring: each object pointed to by an iterator is considered to be a node and there is an edge between each two nodes that conflict. The graph coloring algorithm then assigns a color to each node in such a way that two nodes connected by an edge do not have the same color.</p>
 <p>A typical use case for this function is in assembling a matrix in parallel. There, one would like to assemble local contributions on different cells at the same time (an operation that is purely local and so requires no synchronization) but then we need to add these local contributions to the global matrix. In general, the contributions from different cells may be to the same matrix entries if the cells share degrees of freedom and, consequently, can not happen at the same time unless we want to risk a race condition (see <a href="http://en.wikipedia.org/wiki/Race_condition">http://en.wikipedia.org/wiki/Race_condition</a>). Thus, we call these two cells in conflict, and we can only allow operations in parallel from cells that do not conflict. In other words, two cells are in conflict if the set of matrix entries (for example characterized by the rows) have a nonempty intersection.</p>
-<p>In this generality, computing the graph of conflicts would require calling a function that determines whether two iterators (or the two objects they represent) conflict, and calling it for every pair of iterators, i.e., <picture><source srcset="form_561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 12 N (N-1)$" src="form_561.png"/></picture> times. This is too expensive in general. A better approach is to require a user-defined function that returns for every iterator it is called for a set of indicators of some kind that characterize a conflict; two iterators are in conflict if their conflict indicator sets have a nonempty intersection. In the example of assembling a matrix, the conflict indicator set would contain the indices of all degrees of freedom on the cell pointed to (in the case of continuous Galerkin methods) or the union of indices of degree of freedom on the current cell and all cells adjacent to the faces of the current cell (in the case of discontinuous Galerkin methods, because there one computes face integrals coupling the degrees of freedom connected by a common face &ndash; see <a class="el" href="step_12.html">step-12</a>).</p>
+<p>In this generality, computing the graph of conflicts would require calling a function that determines whether two iterators (or the two objects they represent) conflict, and calling it for every pair of iterators, i.e., <picture><source srcset="form_559_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 12 N (N-1)$" src="form_559.png"/></picture> times. This is too expensive in general. A better approach is to require a user-defined function that returns for every iterator it is called for a set of indicators of some kind that characterize a conflict; two iterators are in conflict if their conflict indicator sets have a nonempty intersection. In the example of assembling a matrix, the conflict indicator set would contain the indices of all degrees of freedom on the cell pointed to (in the case of continuous Galerkin methods) or the union of indices of degree of freedom on the current cell and all cells adjacent to the faces of the current cell (in the case of discontinuous Galerkin methods, because there one computes face integrals coupling the degrees of freedom connected by a common face &ndash; see <a class="el" href="step_12.html">step-12</a>).</p>
 <dl class="section note"><dt>Note</dt><dd>The conflict set returned by the user defined function passed as third argument needs to accurately describe <em>all</em> degrees of freedom for which anything is written into the matrix or right hand side. In other words, if the writing happens through a function like AffineConstraints::copy_local_to_global(), then the set of conflict indices must actually contain not only the degrees of freedom on the current cell, but also those they are linked to by constraints such as hanging nodes.</dd></dl>
-<p>In other situations, the conflict indicator sets may represent something different altogether &ndash; it is up to the caller of this function to describe what it means for two iterators to conflict. Given this, computing conflict graph edges can be done significantly more cheaply than with <picture><source srcset="form_562_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N^2)$" src="form_562.png"/></picture> operations.</p>
+<p>In other situations, the conflict indicator sets may represent something different altogether &ndash; it is up to the caller of this function to describe what it means for two iterators to conflict. Given this, computing conflict graph edges can be done significantly more cheaply than with <picture><source srcset="form_560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N^2)$" src="form_560.png"/></picture> operations.</p>
 <p>In any case, the result of the function will be so that iterators whose conflict indicator sets have overlap will not be assigned to the same color.</p>
 <dl class="section note"><dt>Note</dt><dd>The algorithm used in this function is described in a paper by Turcksin, Kronbichler and Bangerth, see <a class="el" href="DEALGlossary.html#href_anchor">workstream_paper</a>.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGridGenerator.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGridGenerator.html	2024-03-17 21:57:42.075225850 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGridGenerator.html	2024-03-17 21:57:42.071225825 +0000
@@ -295,7 +295,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>colorize</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
-<p>Initialize the given triangulation with a hypercube (line in 1d, square in 2d, etc) consisting of exactly one cell. The hypercube volume is the tensor product interval <picture><source srcset="form_1318_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[left,right]^{\text{dim}}$" src="form_1318.png"/></picture> in the present number of dimensions, where the limits are given as arguments. They default to zero and unity, then producing the unit hypercube.</p>
+<p>Initialize the given triangulation with a hypercube (line in 1d, square in 2d, etc) consisting of exactly one cell. The hypercube volume is the tensor product interval <picture><source srcset="form_1319_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[left,right]^{\text{dim}}$" src="form_1319.png"/></picture> in the present number of dimensions, where the limits are given as arguments. They default to zero and unity, then producing the unit hypercube.</p>
 <p>If the argument <code>colorize</code> is false, then all boundary indicators are set to zero (the default boundary indicator) for 2d and 3d. If it is true, the boundary is <a class="el" href="DEALGlossary.html#href_anchor">colorized</a> as in <a class="el" href="#href_anchor">hyper_rectangle()</a>. In 1d the indicators are always colorized, see <a class="el" href="#href_anchor">hyper_rectangle()</a>.</p>
 <div class="image">
 <img src="hyper_cubes.png" alt=""/>
@@ -728,7 +728,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>colorize</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
-<p>Generate a grid consisting of a channel with a cylinder. This is a common benchmark for Navier-Stokes solvers. The geometry consists of a channel of size <picture><source srcset="form_1319_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 2.2] \times [0, 0.41] \times [0, 0.41] $" src="form_1319.png"/></picture> (where the <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> dimension is omitted in 2d) with a cylinder, parallel to the <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> axis with diameter <picture><source srcset="form_1320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0.1$" src="form_1320.png"/></picture>, centered at <picture><source srcset="form_1321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0.2, 0.2, 0)$" src="form_1321.png"/></picture>. The channel has three distinct regions: </p><ol>
+<p>Generate a grid consisting of a channel with a cylinder. This is a common benchmark for Navier-Stokes solvers. The geometry consists of a channel of size <picture><source srcset="form_1320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, 2.2] \times [0, 0.41] \times [0, 0.41] $" src="form_1320.png"/></picture> (where the <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> dimension is omitted in 2d) with a cylinder, parallel to the <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> axis with diameter <picture><source srcset="form_1321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0.1$" src="form_1321.png"/></picture>, centered at <picture><source srcset="form_1322_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0.2, 0.2, 0)$" src="form_1322.png"/></picture>. The channel has three distinct regions: </p><ol>
 <li>
 If <code>n_shells</code> is greater than zero, then there are that many shells centered around the cylinder, </li>
 <li>
@@ -752,10 +752,10 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">tria</td><td><a class="el" href="classTriangulation.html">Triangulation</a> to be created. Must be empty upon calling this function.</td></tr>
-    <tr><td class="paramname">shell_region_width</td><td>Width of the layer of shells around the cylinder. This value should be between <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture> and <picture><source srcset="form_1322_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0.05$" src="form_1322.png"/></picture>; the default value is <picture><source srcset="form_1323_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0.03$" src="form_1323.png"/></picture>.</td></tr>
+    <tr><td class="paramname">shell_region_width</td><td>Width of the layer of shells around the cylinder. This value should be between <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture> and <picture><source srcset="form_1323_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0.05$" src="form_1323.png"/></picture>; the default value is <picture><source srcset="form_1324_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0.03$" src="form_1324.png"/></picture>.</td></tr>
     <tr><td class="paramname">n_shells</td><td>Number of shells to use in the shell layer.</td></tr>
     <tr><td class="paramname">skewness</td><td>Parameter controlling how close the shells are to the cylinder: see the mathematical definition given in <a class="el" href="#href_anchor">GridGenerator::concentric_hyper_shells</a>.</td></tr>
-    <tr><td class="paramname">colorize</td><td>If <code>true</code>, then assign different boundary ids to different parts of the boundary. For more information on boundary indicators see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>. The left boundary (at <picture><source srcset="form_1324_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x = 0$" src="form_1324.png"/></picture>) is assigned an id of <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture>, the right boundary (at <picture><source srcset="form_1325_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x = 2.2$" src="form_1325.png"/></picture>) is assigned an id of <picture><source srcset="form_670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1$" src="form_670.png"/></picture>; the boundary of the obstacle in the middle (i.e., the circle in 2d or the cylinder walls in 3d) is assigned an id of <picture><source srcset="form_1326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1326.png"/></picture>, and the channel walls are assigned an id of <picture><source srcset="form_1327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$3$" src="form_1327.png"/></picture>.</td></tr>
+    <tr><td class="paramname">colorize</td><td>If <code>true</code>, then assign different boundary ids to different parts of the boundary. For more information on boundary indicators see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>. The left boundary (at <picture><source srcset="form_1325_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x = 0$" src="form_1325.png"/></picture>) is assigned an id of <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture>, the right boundary (at <picture><source srcset="form_1326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x = 2.2$" src="form_1326.png"/></picture>) is assigned an id of <picture><source srcset="form_670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1$" src="form_670.png"/></picture>; the boundary of the obstacle in the middle (i.e., the circle in 2d or the cylinder walls in 3d) is assigned an id of <picture><source srcset="form_1327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1327.png"/></picture>, and the channel walls are assigned an id of <picture><source srcset="form_1328_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$3$" src="form_1328.png"/></picture>.</td></tr>
   </table>
   </dd>
 </dl>
@@ -1307,7 +1307,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>half_length</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
-<p>Create a <code>dim</code> dimensional cylinder where the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>-axis serves as the axis of the cylinder. For the purposes of this function, a cylinder is defined as a (<code>dim</code> - 1) dimensional disk of given <code>radius</code>, extruded along the axis of the cylinder (which is the first coordinate direction). Consequently, in three dimensions, the cylinder extends from <code>x=-half_length</code> to <code>x=+half_length</code> and its projection into the <code>yz-plane</code> is a circle of radius <code>radius</code>. In two dimensions, the cylinder is a rectangle from <code>x=-half_length</code> to <code>x=+half_length</code> and from <code>y=-radius</code> to <code>y=radius</code>.</p>
+<p>Create a <code>dim</code> dimensional cylinder where the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>-axis serves as the axis of the cylinder. For the purposes of this function, a cylinder is defined as a (<code>dim</code> - 1) dimensional disk of given <code>radius</code>, extruded along the axis of the cylinder (which is the first coordinate direction). Consequently, in three dimensions, the cylinder extends from <code>x=-half_length</code> to <code>x=+half_length</code> and its projection into the <code>yz-plane</code> is a circle of radius <code>radius</code>. In two dimensions, the cylinder is a rectangle from <code>x=-half_length</code> to <code>x=+half_length</code> and from <code>y=-radius</code> to <code>y=radius</code>.</p>
 <p>The boundaries are colored according to the following scheme: 0 for the hull of the cylinder, 1 for the left hand face and 2 for the right hand face (see <a class="el" href="DEALGlossary.html#href_anchor">the glossary entry on colorization</a>).</p>
 <p>The manifold id for the hull of the cylinder is set to zero, and a <a class="el" href="classCylindricalManifold.html">CylindricalManifold</a> is attached to it.</p>
 <dl class="section pre"><dt>Precondition</dt><dd>The triangulation passed as argument needs to be empty when calling this function. </dd></dl>
@@ -1341,7 +1341,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>half_length</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
-<p>Create a <code>dim</code> dimensional cylinder where the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>-axis serves as the axis of the cylinder. For the purposes of this function, a cylinder is defined as a (<code>dim</code> - 1) dimensional disk of given <code>radius</code>, extruded along the axis of the cylinder (which is the first coordinate direction). Consequently, in three dimensions, the cylinder extends from <code>x=-half_length</code> to <code>x=+half_length</code> and its projection into the <code>yz-plane</code> is a circle of radius <code>radius</code>. In two dimensions, the cylinder is a rectangle from <code>x=-half_length</code> to <code>x=+half_length</code> and from <code>y=-radius</code> to <code>y=radius</code>. This function is only implemented for dim==3.</p>
+<p>Create a <code>dim</code> dimensional cylinder where the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>-axis serves as the axis of the cylinder. For the purposes of this function, a cylinder is defined as a (<code>dim</code> - 1) dimensional disk of given <code>radius</code>, extruded along the axis of the cylinder (which is the first coordinate direction). Consequently, in three dimensions, the cylinder extends from <code>x=-half_length</code> to <code>x=+half_length</code> and its projection into the <code>yz-plane</code> is a circle of radius <code>radius</code>. In two dimensions, the cylinder is a rectangle from <code>x=-half_length</code> to <code>x=+half_length</code> and from <code>y=-radius</code> to <code>y=radius</code>. This function is only implemented for dim==3.</p>
 <p>The boundaries are colored according to the following scheme: 0 for the hull of the cylinder, 1 for the left hand face and 2 for the right hand face (see <a class="el" href="DEALGlossary.html#href_anchor">the glossary entry on colorization</a>).</p>
 <p>The manifold id for the hull of the cylinder is set to zero, and a <a class="el" href="classCylindricalManifold.html">CylindricalManifold</a> is attached to it.</p>
 <div class="image">
@@ -1539,7 +1539,7 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">tria</td><td>A <a class="el" href="classTriangulation.html">Triangulation</a> object which has to be empty.</td></tr>
-    <tr><td class="paramname">sizes</td><td>A vector of integers of dimension <a class="el" href="structGeometryInfo.html#href_anchor">GeometryInfo&lt;dim&gt;::faces_per_cell</a> with the following meaning: the legs of the cross are stacked on the faces of the center cell, in the usual order of deal.II cells, namely first <picture><source srcset="form_1341_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-x$" src="form_1341.png"/></picture>, then <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>, then <picture><source srcset="form_1342_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-y$" src="form_1342.png"/></picture> and so on. The corresponding entries in <code>sizes</code> name the number of cells stacked on this face. All numbers may be zero, thus L- and T-shaped domains are specializations of this domain.</td></tr>
+    <tr><td class="paramname">sizes</td><td>A vector of integers of dimension <a class="el" href="structGeometryInfo.html#href_anchor">GeometryInfo&lt;dim&gt;::faces_per_cell</a> with the following meaning: the legs of the cross are stacked on the faces of the center cell, in the usual order of deal.II cells, namely first <picture><source srcset="form_1341_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-x$" src="form_1341.png"/></picture>, then <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>, then <picture><source srcset="form_1342_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-y$" src="form_1342.png"/></picture> and so on. The corresponding entries in <code>sizes</code> name the number of cells stacked on this face. All numbers may be zero, thus L- and T-shaped domains are specializations of this domain.</td></tr>
     <tr><td class="paramname">colorize_cells</td><td>If colorization is enabled, then the material id of a cells corresponds to the leg it is in. The id of the center cell is zero, and then the legs are numbered starting at one (see <a class="el" href="DEALGlossary.html#href_anchor">the glossary entry on colorization</a>).</td></tr>
   </table>
   </dd>
@@ -1726,7 +1726,7 @@
 <li>
 96 for the rhombic dodecahedron refined once. This choice dates from an older version of deal.II before the <a class="el" href="classManifold.html">Manifold</a> classes were implemented: today this choce is equivalent to the rhombic dodecahedron after performing one global refinement. </li>
 <li>
-Numbers of the kind <picture><source srcset="form_1343_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$192\times 2^m$" src="form_1343.png"/></picture> with <picture><source srcset="form_1344_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m\geq 0$" src="form_1344.png"/></picture> integer. This choice is similar to the 24 and 48 cell cases, but provides additional refinements in azimuthal direction combined with a single layer in radial direction. The base mesh is either the 6 or 12 cell version, depending on whether <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> in the power is odd or even, respectively. </li>
+Numbers of the kind <picture><source srcset="form_1343_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$192\times 2^m$" src="form_1343.png"/></picture> with <picture><source srcset="form_1344_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m\geq 0$" src="form_1344.png"/></picture> integer. This choice is similar to the 24 and 48 cell cases, but provides additional refinements in azimuthal direction combined with a single layer in radial direction. The base mesh is either the 6 or 12 cell version, depending on whether <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> in the power is odd or even, respectively. </li>
 </ul>
 <p>The versions with 24, 48, and <picture><source srcset="form_1345_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^m 192$" src="form_1345.png"/></picture> cells are useful if the shell is thin and the radial lengths should be made more similar to the circumferential lengths.</p>
 <p>The 3d grids with 12 and 96 cells are plotted below:</p>
@@ -1921,7 +1921,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>n_axial_cells</em><span class="paramdefsep"> = </span><span class="paramdefval">0</span></span>&#href_anchor"memdoc">
-<p>Produce a domain that is the space between two cylinders in 3d, with given length, inner and outer radius and a given number of elements. The cylinder shell is built around the <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>-axis with the two faces located at <picture><source srcset="form_1347_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z = 0$" src="form_1347.png"/></picture> and <picture><source srcset="form_1348_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z = $" src="form_1348.png"/></picture> <code>length</code>.</p>
+<p>Produce a domain that is the space between two cylinders in 3d, with given length, inner and outer radius and a given number of elements. The cylinder shell is built around the <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>-axis with the two faces located at <picture><source srcset="form_1347_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z = 0$" src="form_1347.png"/></picture> and <picture><source srcset="form_1348_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z = $" src="form_1348.png"/></picture> <code>length</code>.</p>
 <p>If <code>n_radial_cells</code> is zero (as is the default), then it is computed adaptively such that the resulting elements have the least aspect ratio. The same holds for <code>n_axial_cells</code>.</p>
 <dl class="section note"><dt>Note</dt><dd>Although this function is declared as a template, it does not make sense in 1d and 2d. Also keep in mind that this object is rotated and positioned differently than the one created by <a class="el" href="#href_anchor">cylinder()</a>.</dd></dl>
 <p>All manifold ids are set to zero, and a <a class="el" href="classCylindricalManifold.html">CylindricalManifold</a> is attached to the triangulation.</p>
@@ -1968,7 +1968,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Produce the volume or surface mesh of a torus. The axis of the torus is the <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>-axis while the plane of the torus is the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>- <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> plane.</p>
+<p>Produce the volume or surface mesh of a torus. The axis of the torus is the <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>-axis while the plane of the torus is the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>- <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> plane.</p>
 <p>If <code>dim</code> is 3, the mesh will be the volume of the torus, using a mesh equivalent to the circle in the poloidal coordinates with 5 cells on the cross section. This function attaches a <a class="el" href="classTorusManifold.html">TorusManifold</a> to all boundary faces which are marked with a manifold id of 1, a <a class="el" href="classCylindricalManifold.html">CylindricalManifold</a> to the interior cells and all their faces which are marked with a manifold id of 2 (representing a flat state within the poloidal coordinates), and a <a class="el" href="classTransfiniteInterpolationManifold.html">TransfiniteInterpolationManifold</a> to the cells between the <a class="el" href="classTorusManifold.html">TorusManifold</a> on the surface and the ToroidalManifold in the center, with cells marked with manifold id 0.</p>
 <p>An example for the case if <code>dim</code> is 3 with a cut through the domain at <picture><source srcset="form_1346_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z=0$" src="form_1346.png"/></picture>, 6 toroidal cells, <picture><source srcset="form_1349_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R=2$" src="form_1349.png"/></picture> and <picture><source srcset="form_1350_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r=0.5$" src="form_1350.png"/></picture> without any global refinement is given here:</p>
 <div class="image">
@@ -2027,7 +2027,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>colorize</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
-<p>This function produces a square in the <em>xy</em>-plane with a cylindrical hole in the middle. The square and the circle are centered at the origin. In 3d, this geometry is extruded in <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> direction to the interval <picture><source srcset="form_1355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,L]$" src="form_1355.png"/></picture>.</p>
+<p>This function produces a square in the <em>xy</em>-plane with a cylindrical hole in the middle. The square and the circle are centered at the origin. In 3d, this geometry is extruded in <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> direction to the interval <picture><source srcset="form_1355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,L]$" src="form_1355.png"/></picture>.</p>
 <p>The inner boundary has a manifold id of <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture> and a boundary id of <picture><source srcset="form_1356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$6$" src="form_1356.png"/></picture>. This function attaches a <a class="el" href="classPolarManifold.html">PolarManifold</a> or <a class="el" href="classCylindricalManifold.html">CylindricalManifold</a> to the interior boundary in 2d and 3d respectively. The other faces have boundary ids of <picture><source srcset="form_1357_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0, 1, 2, 3, 4$" src="form_1357.png"/></picture>, or <picture><source srcset="form_1358_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$5$" src="form_1358.png"/></picture> given in the standard order of faces in 2d or 3d.</p>
 <div class="image">
 <img src="cubes_hole.png" alt=""/>
@@ -2103,7 +2103,7 @@
          {\tanh(\mathrm{skewness})}\right)
 \]" src="form_1359.png"/></picture>
 </p>
-<p>where <code>skewness</code> is a parameter controlling the shell spacing in the radial direction: values of <code>skewness</code> close to zero correspond to even spacing, while larger values of <code>skewness</code> (such as <picture><source srcset="form_1326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1326.png"/></picture> or <picture><source srcset="form_1327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$3$" src="form_1327.png"/></picture>) correspond to shells biased to the inner radius.</p>
+<p>where <code>skewness</code> is a parameter controlling the shell spacing in the radial direction: values of <code>skewness</code> close to zero correspond to even spacing, while larger values of <code>skewness</code> (such as <picture><source srcset="form_1327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1327.png"/></picture> or <picture><source srcset="form_1328_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$3$" src="form_1328.png"/></picture>) correspond to shells biased to the inner radius.</p>
 <p><code>n_cells_per_shell</code> is the same as in <a class="el" href="#href_anchor">GridGenerator::hyper_shell</a>: in 2d the default choice of zero will result in 8 cells per shell (and 12 in 3d). The only valid values in 3d are 6 (the default), 12, and 96 cells: see the documentation of <a class="el" href="#href_anchor">GridGenerator::hyper_shell</a> for more information.</p>
 <p>If <code>colorize</code> is <code>true</code> then the outer boundary of the merged shells has a boundary id of <picture><source srcset="form_670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1$" src="form_670.png"/></picture> and the inner boundary has a boundary id of <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture>.</p>
 <p>Example: The following code (see, e.g., <a class="el" href="step_10.html">step-10</a> for instructions on how to visualize GNUPLOT output)</p>
@@ -2611,10 +2611,10 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Extrude the <a class="el" href="classTriangulation.html">Triangulation</a> <code>input</code> in the <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> direction from <picture><source srcset="form_1347_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z = 0$" src="form_1347.png"/></picture> to <picture><source srcset="form_1360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z =
-\text{height}$" src="form_1360.png"/></picture> and store it in <code>result</code>. This is done by replicating the input triangulation <code>n_slices</code> times in <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> direction, and then forming <code>(n_slices-1)</code> layers of cells out of these replicates.</p>
-<p>The boundary indicators of the faces of <code>input</code> will be assigned to the corresponding side walls in <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> direction. The bottom and top get the next two free boundary indicators: i.e., if <code>input</code> has boundary ids of <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture>, <picture><source srcset="form_670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1$" src="form_670.png"/></picture>, and <picture><source srcset="form_1361_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$42$" src="form_1361.png"/></picture>, then the <picture><source srcset="form_1347_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z = 0$" src="form_1347.png"/></picture> boundary id of <code>result</code> will be <picture><source srcset="form_1362_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$43$" src="form_1362.png"/></picture> and the <picture><source srcset="form_1363_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z = \text{height}$" src="form_1363.png"/></picture> boundary id will be <picture><source srcset="form_1364_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$44$" src="form_1364.png"/></picture>.</p>
-<p>This function does not, by default, copy manifold ids. The reason for this is that there is no way to set the manifold ids on the lines of the resulting <a class="el" href="classTriangulation.html">Triangulation</a> without more information: for example, if two faces of <code>input</code> with different manifold ids meet at a shared vertex then there is no <em>a priori</em> reason to pick one manifold id or another for the lines created in <code>result</code> that are parallel to the <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>-axis and pass through that point. If <code>copy_manifold_ids</code> is <code>true</code> then this function sets line manifold ids by picking the one that appears <em>first</em> in <code>manifold_priorities</code>. For example: if <code>manifold_priorities</code> is <code>{0, 42, <a class="el" href="namespacenumbers.html#href_anchor">numbers::flat_manifold_id</a>}</code> and the line under consideration is adjacent to faces with manifold ids of <code>0</code> and <code>42</code>, then that line will have a manifold id of <code>0</code>. The correct ordering is almost always </p><ol>
+<p>Extrude the <a class="el" href="classTriangulation.html">Triangulation</a> <code>input</code> in the <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> direction from <picture><source srcset="form_1347_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z = 0$" src="form_1347.png"/></picture> to <picture><source srcset="form_1360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z =
+\text{height}$" src="form_1360.png"/></picture> and store it in <code>result</code>. This is done by replicating the input triangulation <code>n_slices</code> times in <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> direction, and then forming <code>(n_slices-1)</code> layers of cells out of these replicates.</p>
+<p>The boundary indicators of the faces of <code>input</code> will be assigned to the corresponding side walls in <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> direction. The bottom and top get the next two free boundary indicators: i.e., if <code>input</code> has boundary ids of <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture>, <picture><source srcset="form_670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1$" src="form_670.png"/></picture>, and <picture><source srcset="form_1361_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$42$" src="form_1361.png"/></picture>, then the <picture><source srcset="form_1347_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z = 0$" src="form_1347.png"/></picture> boundary id of <code>result</code> will be <picture><source srcset="form_1362_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$43$" src="form_1362.png"/></picture> and the <picture><source srcset="form_1363_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z = \text{height}$" src="form_1363.png"/></picture> boundary id will be <picture><source srcset="form_1364_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$44$" src="form_1364.png"/></picture>.</p>
+<p>This function does not, by default, copy manifold ids. The reason for this is that there is no way to set the manifold ids on the lines of the resulting <a class="el" href="classTriangulation.html">Triangulation</a> without more information: for example, if two faces of <code>input</code> with different manifold ids meet at a shared vertex then there is no <em>a priori</em> reason to pick one manifold id or another for the lines created in <code>result</code> that are parallel to the <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>-axis and pass through that point. If <code>copy_manifold_ids</code> is <code>true</code> then this function sets line manifold ids by picking the one that appears <em>first</em> in <code>manifold_priorities</code>. For example: if <code>manifold_priorities</code> is <code>{0, 42, <a class="el" href="namespacenumbers.html#href_anchor">numbers::flat_manifold_id</a>}</code> and the line under consideration is adjacent to faces with manifold ids of <code>0</code> and <code>42</code>, then that line will have a manifold id of <code>0</code>. The correct ordering is almost always </p><ol>
 <li>
 manifold ids set on the boundary, </li>
 <li>
@@ -2632,8 +2632,8 @@
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">input</td><td>A two-dimensional input triangulation. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">n_slices</td><td>The number of times the input triangulation will be replicated in <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> direction. These slices will then be connected into <code>(n_slices-1)</code> layers of three-dimensional cells. Clearly, <code>n_slices</code> must be at least two. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">height</td><td>The distance in <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> direction between the individual slices. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">n_slices</td><td>The number of times the input triangulation will be replicated in <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> direction. These slices will then be connected into <code>(n_slices-1)</code> layers of three-dimensional cells. Clearly, <code>n_slices</code> must be at least two. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">height</td><td>The distance in <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> direction between the individual slices. </td></tr>
     <tr><td class="paramdir">[out]</td><td class="paramname">result</td><td>The resulting three-dimensional triangulation. </td></tr>
     <tr><td class="paramdir">[in]</td><td class="paramname">copy_manifold_ids</td><td>See the description above. </td></tr>
     <tr><td class="paramdir">[in]</td><td class="paramname">manifold_priorities</td><td>See the description above.</td></tr>
@@ -2780,7 +2780,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classTriangulation.html">Triangulation</a>&lt; dim, spacedim2 &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>out_tria</em></span>&#href_anchor"memdoc">
-<p>Given an input triangulation <code>in_tria</code>, this function makes a new flat triangulation <code>out_tria</code> which contains a single level with all active cells of the input triangulation. If <code>spacedim1</code> and <code>spacedim2</code> are different, only the first few components of the vertex coordinates are copied over. This is useful to create a Triangulation&lt;2,3&gt; out of a Triangulation&lt;2,2&gt;, or to project a Triangulation&lt;2,3&gt; into a Triangulation&lt;2,2&gt;, by neglecting the <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> components of the vertices.</p>
+<p>Given an input triangulation <code>in_tria</code>, this function makes a new flat triangulation <code>out_tria</code> which contains a single level with all active cells of the input triangulation. If <code>spacedim1</code> and <code>spacedim2</code> are different, only the first few components of the vertex coordinates are copied over. This is useful to create a Triangulation&lt;2,3&gt; out of a Triangulation&lt;2,2&gt;, or to project a Triangulation&lt;2,3&gt; into a Triangulation&lt;2,2&gt;, by neglecting the <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> components of the vertices.</p>
 <p>No internal checks are performed on the vertices, which are assumed to make sense topologically in the target <code>spacedim2</code> dimensional space. If this is not the case, you will encounter problems when using the triangulation later on.</p>
 <p>All information about cell <a class="el" href="DEALGlossary.html#href_anchor">manifold indicators</a> and <a class="el" href="DEALGlossary.html#href_anchor">material indicators</a> are copied from one triangulation to the other. The same is true for the manifold indicators and, if an object is at the boundary, the boundary indicators of faces and edges of the triangulation.</p>
 <p>This function will fail if the input <a class="el" href="classTriangulation.html">Triangulation</a> is of type <a class="el" href="classparallel_1_1distributed_1_1Triangulation.html">parallel::distributed::Triangulation</a>, as well as when the input <a class="el" href="classTriangulation.html">Triangulation</a> contains hanging nodes. In other words, this function only works for globally refined triangulations.</p>
@@ -2908,7 +2908,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>colorize</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
-<p>Initialize the given triangulation with a hypercube (square in 2d and cube in 3d) consisting of <code>repetitions</code> cells in each direction. The hypercube volume is the tensor product interval <picture><source srcset="form_1318_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[left,right]^{\text{dim}}$" src="form_1318.png"/></picture> in the present number of dimensions, where the limits are given as arguments. They default to zero and unity, then producing the unit hypercube.</p>
+<p>Initialize the given triangulation with a hypercube (square in 2d and cube in 3d) consisting of <code>repetitions</code> cells in each direction. The hypercube volume is the tensor product interval <picture><source srcset="form_1319_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[left,right]^{\text{dim}}$" src="form_1319.png"/></picture> in the present number of dimensions, where the limits are given as arguments. They default to zero and unity, then producing the unit hypercube.</p>
 <dl class="section note"><dt>Note</dt><dd>This function connects internally 4/8 vertices to quadrilateral/hexahedral cells and subdivides these into 2/5 triangular/tetrahedral cells.</dd></dl>
 <p>Also see <a class="el" href="group__simplex.html">Simplex support</a>. </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGridRefinement.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGridRefinement.html	2024-03-17 21:57:42.107226048 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGridRefinement.html	2024-03-17 21:57:42.111226072 +0000
@@ -216,7 +216,7 @@
 <p class="endli"></p>
 </li>
 </ol>
-<p>As an example, with no coarsening, setting <code>top_fraction_of_cells</code> to 1/3 will result in approximately doubling the number of cells in two dimensions. That is because each of these 1/3 of cells will be replaced by its four children, resulting in <picture><source srcset="form_1365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$4\times \frac 13 N$" src="form_1365.png"/></picture> cells, whereas the remaining 2/3 of cells remains untouched &ndash; thus yielding a total of <picture><source srcset="form_1366_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$4\times \frac 13 N + \frac 23 N = 2N$" src="form_1366.png"/></picture> cells. The same effect in three dimensions is achieved by refining 1/7th of the cells. These values are therefore frequently used because they ensure that the cost of computations on subsequent meshes become expensive sufficiently quickly that the fraction of time spent on the coarse meshes is not too large. On the other hand, the fractions are small enough that mesh adaptation does not refine too many cells in each step.</p>
+<p>As an example, with no coarsening, setting <code>top_fraction_of_cells</code> to 1/3 will result in approximately doubling the number of cells in two dimensions. That is because each of these 1/3 of cells will be replaced by its four children, resulting in <picture><source srcset="form_1366_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$4\times \frac 13 N$" src="form_1366.png"/></picture> cells, whereas the remaining 2/3 of cells remains untouched &ndash; thus yielding a total of <picture><source srcset="form_1367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$4\times \frac 13 N + \frac 23 N = 2N$" src="form_1367.png"/></picture> cells. The same effect in three dimensions is achieved by refining 1/7th of the cells. These values are therefore frequently used because they ensure that the cost of computations on subsequent meshes become expensive sufficiently quickly that the fraction of time spent on the coarse meshes is not too large. On the other hand, the fractions are small enough that mesh adaptation does not refine too many cells in each step.</p>
 <dl class="section note"><dt>Note</dt><dd>This function only sets the coarsening and refinement flags. The mesh is not changed until you call <a class="el" href="classTriangulation.html#href_anchor">Triangulation::execute_coarsening_and_refinement()</a>.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -276,14 +276,14 @@
 <p>This function provides a strategy to mark cells for refinement and coarsening with the goal of controlling the reduction of the error estimate.</p>
 <p>Also known as the <b>bulk criterion</b> or D&ouml;rfler marking, this function computes the thresholds for refinement and coarsening such that the <code>criteria</code> of cells getting flagged for refinement make up for a certain fraction of the total error. We explain its operation for refinement, coarsening works analogously.</p>
 <p>Let <em>c<sub>K</sub></em> be the criterion of cell <em>K</em>. Then the total error estimate is computed by the formula  </p><p class="formulaDsp">
-<picture><source srcset="form_1367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1368_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 E = \sum_{K\in \cal T} c_K.
-\]" src="form_1367.png"/></picture>
+\]" src="form_1368.png"/></picture>
 </p>
-<p>If <em> 0 &lt; a &lt; 1</em> is <code>top_fraction</code>, then we refine the smallest subset <picture><source srcset="form_1368_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cal M$" src="form_1368.png"/></picture> of the <a class="el" href="classTriangulation.html">Triangulation</a> <picture><source srcset="form_1369_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cal T$" src="form_1369.png"/></picture> such that  </p><p class="formulaDsp">
-<picture><source srcset="form_1370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>If <em> 0 &lt; a &lt; 1</em> is <code>top_fraction</code>, then we refine the smallest subset <picture><source srcset="form_1369_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cal M$" src="form_1369.png"/></picture> of the <a class="el" href="classTriangulation.html">Triangulation</a> <picture><source srcset="form_1370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cal T$" src="form_1370.png"/></picture> such that  </p><p class="formulaDsp">
+<picture><source srcset="form_1371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 a E \le \sum_{K\in \cal M} c_K
-\]" src="form_1370.png"/></picture>
+\]" src="form_1371.png"/></picture>
 </p>
 <p>The algorithm is performed by the greedy algorithm described in <a class="el" href="#href_anchor">refine_and_coarsen_fixed_number()</a>.</p>
 <dl class="section note"><dt>Note</dt><dd>The often used formula with squares on the left and right is recovered by actually storing the square of <em>c<sub>K</sub></em> in the vector <code>criteria</code>.</dd></dl>
@@ -326,32 +326,32 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>order</em><span class="paramdefsep"> = </span><span class="paramdefval">2</span></span>&#href_anchor"memdoc">
-<p>This function flags cells of a triangulation for refinement with the aim to reach a grid that is optimal with respect to an objective function that tries to balance reducing the error and increasing the numerical cost when the mesh is refined. Specifically, this function makes the assumption that if you refine a cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> with error indicator <picture><source srcset="form_1371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_K$" src="form_1371.png"/></picture> provided by the second argument to this function, then the error on the children (for all children together) will only be <picture><source srcset="form_1372_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^{-\text{order}}\eta_K$" src="form_1372.png"/></picture> where <code>order</code> is the third argument of this function. This makes the assumption that the error is only a local property on a mesh and can be reduced by local refinement &ndash; an assumption that is true for the interpolation operator, but not for the usual Galerkin projection, although it is approximately true for elliptic problems where the Greens function decays quickly and the error here is not too much affected by a too coarse mesh somewhere else.</p>
-<p>With this, we can define the objective function this function tries to optimize. Let us assume that the mesh currently has <picture><source srcset="form_1373_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N_0$" src="form_1373.png"/></picture> cells. Then, if we refine the <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> cells with the largest errors, we expect to get (in <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> space dimensions)  </p><p class="formulaDsp">
-<picture><source srcset="form_1374_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>This function flags cells of a triangulation for refinement with the aim to reach a grid that is optimal with respect to an objective function that tries to balance reducing the error and increasing the numerical cost when the mesh is refined. Specifically, this function makes the assumption that if you refine a cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> with error indicator <picture><source srcset="form_1372_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_K$" src="form_1372.png"/></picture> provided by the second argument to this function, then the error on the children (for all children together) will only be <picture><source srcset="form_1373_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^{-\text{order}}\eta_K$" src="form_1373.png"/></picture> where <code>order</code> is the third argument of this function. This makes the assumption that the error is only a local property on a mesh and can be reduced by local refinement &ndash; an assumption that is true for the interpolation operator, but not for the usual Galerkin projection, although it is approximately true for elliptic problems where the Greens function decays quickly and the error here is not too much affected by a too coarse mesh somewhere else.</p>
+<p>With this, we can define the objective function this function tries to optimize. Let us assume that the mesh currently has <picture><source srcset="form_1374_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N_0$" src="form_1374.png"/></picture> cells. Then, if we refine the <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> cells with the largest errors, we expect to get (in <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> space dimensions)  </p><p class="formulaDsp">
+<picture><source srcset="form_1375_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   N(m) = (N_0-m) + 2^d m = N_0 + (2^d-1)m
-\]" src="form_1374.png"/></picture>
+\]" src="form_1375.png"/></picture>
 </p>
-<p> cells ( <picture><source srcset="form_1375_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N_0-m$" src="form_1375.png"/></picture> are not refined, and each of the <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> cells we refine yield <picture><source srcset="form_1376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^d$" src="form_1376.png"/></picture> child cells. On the other hand, with refining <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> cells, and using the assumptions above, we expect that the error will be  </p><p class="formulaDsp">
-<picture><source srcset="form_1377_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> cells ( <picture><source srcset="form_1376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N_0-m$" src="form_1376.png"/></picture> are not refined, and each of the <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> cells we refine yield <picture><source srcset="form_1377_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^d$" src="form_1377.png"/></picture> child cells. On the other hand, with refining <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> cells, and using the assumptions above, we expect that the error will be  </p><p class="formulaDsp">
+<picture><source srcset="form_1378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \eta^\text{exp}(m)
   =
   \sum_{K, K\; \text{will not be refined}} \eta_K
   +
   \sum_{K, K\; \text{will be refined}} 2^{-\text{order}}\eta_K
-\]" src="form_1377.png"/></picture>
+\]" src="form_1378.png"/></picture>
 </p>
-<p> where the first sum extends over <picture><source srcset="form_1375_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N_0-m$" src="form_1375.png"/></picture> cells and the second over the <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> cells that will be refined. Note that <picture><source srcset="form_1378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N(m)$" src="form_1378.png"/></picture> is an increasing function of <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> whereas <picture><source srcset="form_1379_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta^\text{exp}(m)$" src="form_1379.png"/></picture> is a decreasing function.</p>
-<p>This function then tries to find that number <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> of cells to mark for refinement for which the objective function  </p><p class="formulaDsp">
-<picture><source srcset="form_1380_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where the first sum extends over <picture><source srcset="form_1376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N_0-m$" src="form_1376.png"/></picture> cells and the second over the <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> cells that will be refined. Note that <picture><source srcset="form_1379_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N(m)$" src="form_1379.png"/></picture> is an increasing function of <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> whereas <picture><source srcset="form_1380_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta^\text{exp}(m)$" src="form_1380.png"/></picture> is a decreasing function.</p>
+<p>This function then tries to find that number <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> of cells to mark for refinement for which the objective function  </p><p class="formulaDsp">
+<picture><source srcset="form_1381_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   J(m) = N(m)^{\text{order}/d} \eta^\text{exp}(m)
-\]" src="form_1380.png"/></picture>
+\]" src="form_1381.png"/></picture>
 </p>
 <p> is minimal.</p>
 <p>The rationale for this function is two-fold. First, compared to the <a class="el" href="#href_anchor">refine_and_coarsen_fixed_fraction()</a> and <a class="el" href="#href_anchor">refine_and_coarsen_fixed_number()</a> functions, this function has the property that if all refinement indicators are the same (i.e., we have achieved a mesh where the error per cell is equilibrated), then the entire mesh is refined. This is based on the observation that a mesh with equilibrated error indicators is the optimal mesh (i.e., has the least overall error) among all meshes with the same number of cells. (For proofs of this, see R. Becker, M. Braack, R. Rannacher: "Numerical simulation of laminar flames at low Mach number
 with adaptive finite elements", Combustion Theory and Modelling, Vol. 3, Nr. 3, p. 503-534 1999; and W. Bangerth, R. Rannacher: "Adaptive Finite
 Element Methods for Differential Equations", Birkhauser, 2003.)</p>
-<p>Second, the function uses the observation that ideally, the error behaves like <picture><source srcset="form_1381_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e \approx c N^{-\alpha}$" src="form_1381.png"/></picture> with some constant <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> that depends on the dimension and the finite element degree. It should - given optimal mesh refinement - not depend so much on the regularity of the solution, as it is based on the idea, that all singularities can be resolved by refinement. Mesh refinement is then based on the idea that we want to make <picture><source srcset="form_1382_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c=e N^\alpha$" src="form_1382.png"/></picture> small. This corresponds to the functional <picture><source srcset="form_1383_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(m)$" src="form_1383.png"/></picture> above.</p>
+<p>Second, the function uses the observation that ideally, the error behaves like <picture><source srcset="form_1382_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e \approx c N^{-\alpha}$" src="form_1382.png"/></picture> with some constant <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> that depends on the dimension and the finite element degree. It should - given optimal mesh refinement - not depend so much on the regularity of the solution, as it is based on the idea, that all singularities can be resolved by refinement. Mesh refinement is then based on the idea that we want to make <picture><source srcset="form_1383_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c=e N^\alpha$" src="form_1383.png"/></picture> small. This corresponds to the functional <picture><source srcset="form_1384_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(m)$" src="form_1384.png"/></picture> above.</p>
 <dl class="section note"><dt>Note</dt><dd>This function was originally implemented by Thomas Richter. It follows a strategy described in <b>[Richter2005]</b>. See in particular Section 4.3, pp. 42-43. </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="grid_2grid__refinement_8cc_source.html#href_anchor">448</a> of file <a class="el" href="grid_2grid__refinement_8cc_source.html">grid_refinement.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGridTools.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGridTools.html	2024-03-17 21:57:42.231226813 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceGridTools.html	2024-03-17 21:57:42.235226838 +0000
@@ -510,8 +510,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Compute the volume (i.e. the dim-dimensional measure) of the triangulation. We compute the measure using the integral <picture><source srcset="form_1459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sum_K \int_K 1
-\; dx$" src="form_1459.png"/></picture> where <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> are the cells of the given triangulation. The integral is approximated via quadrature. This version of the function uses a linear mapping to compute the JxW values on each cell.</p>
+<p>Compute the volume (i.e. the dim-dimensional measure) of the triangulation. We compute the measure using the integral <picture><source srcset="form_1385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sum_K \int_K 1
+\; dx$" src="form_1385.png"/></picture> where <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> are the cells of the given triangulation. The integral is approximated via quadrature. This version of the function uses a linear mapping to compute the JxW values on each cell.</p>
 <p>If the triangulation is a dim-dimensional one embedded in a higher dimensional space of dimension spacedim, then the value returned is the dim-dimensional measure. For example, for a two-dimensional triangulation in three-dimensional space, the value returned is the area of the surface so described. (This obviously makes sense since the spacedim-dimensional measure of a dim-dimensional triangulation would always be zero if dim &lt; spacedim).</p>
 <p>This function also works for objects of type <a class="el" href="classparallel_1_1distributed_1_1Triangulation.html">parallel::distributed::Triangulation</a>, in which case the function is a collective operation.</p>
 <dl class="params"><dt>Parameters</dt><dd>
@@ -543,8 +543,8 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classMapping.html">Mapping</a>&lt; dim, spacedim &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>mapping</em></span>&#href_anchor"memdoc">
-<p>Compute the volume (i.e. the dim-dimensional measure) of the triangulation. We compute the measure using the integral <picture><source srcset="form_1459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sum_K \int_K 1
-\; dx$" src="form_1459.png"/></picture> where <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> are the cells of the given triangulation. The integral is approximated via quadrature for which we use the mapping argument.</p>
+<p>Compute the volume (i.e. the dim-dimensional measure) of the triangulation. We compute the measure using the integral <picture><source srcset="form_1385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sum_K \int_K 1
+\; dx$" src="form_1385.png"/></picture> where <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> are the cells of the given triangulation. The integral is approximated via quadrature for which we use the mapping argument.</p>
 <p>If the triangulation is a dim-dimensional one embedded in a higher dimensional space of dimension spacedim, then the value returned is the dim-dimensional measure. For example, for a two-dimensional triangulation in three-dimensional space, the value returned is the area of the surface so described. (This obviously makes sense since the spacedim-dimensional measure of a dim-dimensional triangulation would always be zero if dim &lt; spacedim.</p>
 <p>This function also works for objects of type <a class="el" href="classparallel_1_1distributed_1_1Triangulation.html">parallel::distributed::Triangulation</a>, in which case the function is a collective operation.</p>
 <dl class="params"><dt>Parameters</dt><dd>
@@ -675,8 +675,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>This function computes an affine approximation of the map from the unit coordinates to the real coordinates of the form <picture><source srcset="form_1460_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_\text{real} = A
-p_\text{unit} + b $" src="form_1460.png"/></picture> by a least squares fit of this affine function to the <picture><source srcset="form_1304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1304.png"/></picture> vertices representing a quadrilateral or hexahedral cell in <code>spacedim</code> dimensions. The result is returned as a pair with the matrix <em>A</em> as the first argument and the vector <em>b</em> describing distance of the plane to the origin.</p>
+<p>This function computes an affine approximation of the map from the unit coordinates to the real coordinates of the form <picture><source srcset="form_1386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_\text{real} = A
+p_\text{unit} + b $" src="form_1386.png"/></picture> by a least squares fit of this affine function to the <picture><source srcset="form_1317_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^\text{dim}$" src="form_1317.png"/></picture> vertices representing a quadrilateral or hexahedral cell in <code>spacedim</code> dimensions. The result is returned as a pair with the matrix <em>A</em> as the first argument and the vector <em>b</em> describing distance of the plane to the origin.</p>
 <p>For any valid mesh cell whose geometry is not degenerate, this operation results in a unique affine mapping, even in cases where the actual transformation by a bi-/trilinear or higher order mapping might be singular. The result is exact in case the transformation from the unit to the real cell is indeed affine, such as in one dimension or for Cartesian and affine (parallelogram) meshes in 2d/3d.</p>
 <p>This approximation is underlying the function <a class="el" href="classTriaAccessor.html#href_anchor">TriaAccessor::real_to_unit_cell_affine_approximation()</a> function.</p>
 <p>For exact transformations to the unit cell, use <a class="el" href="classMapping.html#href_anchor">Mapping::transform_real_to_unit_cell()</a>. </p>
@@ -707,7 +707,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classQuadrature.html">Quadrature</a>&lt; dim &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>quadrature</em></span>&#href_anchor"memdoc">
-<p>Computes an aspect ratio measure for all locally-owned active cells and fills a vector with one entry per cell, given a <code>triangulation</code> and <code>mapping</code>. The size of the vector that is returned equals the number of active cells. The vector contains zero for non locally-owned cells. The aspect ratio of a cell is defined as the ratio of the maximum to minimum singular value of the Jacobian, taking the maximum over all quadrature points of a quadrature rule specified via <code>quadrature</code>. For example, for the special case of rectangular elements in 2d with dimensions <picture><source srcset="form_1010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_1010.png"/></picture> and <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> ( <picture><source srcset="form_1461_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a \geq b$" src="form_1461.png"/></picture>), this function returns the usual aspect ratio definition <picture><source srcset="form_1462_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a/b$" src="form_1462.png"/></picture>. The above definition using singular values is a generalization to arbitrarily deformed elements. This function is intended to be used for <picture><source srcset="form_1463_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=2,3$" src="form_1463.png"/></picture> space dimensions, but it can also be used for <picture><source srcset="form_1464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=1$" src="form_1464.png"/></picture> returning a value of 1.</p>
+<p>Computes an aspect ratio measure for all locally-owned active cells and fills a vector with one entry per cell, given a <code>triangulation</code> and <code>mapping</code>. The size of the vector that is returned equals the number of active cells. The vector contains zero for non locally-owned cells. The aspect ratio of a cell is defined as the ratio of the maximum to minimum singular value of the Jacobian, taking the maximum over all quadrature points of a quadrature rule specified via <code>quadrature</code>. For example, for the special case of rectangular elements in 2d with dimensions <picture><source srcset="form_964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_964.png"/></picture> and <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> ( <picture><source srcset="form_1387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a \geq b$" src="form_1387.png"/></picture>), this function returns the usual aspect ratio definition <picture><source srcset="form_1388_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a/b$" src="form_1388.png"/></picture>. The above definition using singular values is a generalization to arbitrarily deformed elements. This function is intended to be used for <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=2,3$" src="form_1389.png"/></picture> space dimensions, but it can also be used for <picture><source srcset="form_1390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=1$" src="form_1390.png"/></picture> returning a value of 1.</p>
 <dl class="section note"><dt>Note</dt><dd>Inverted elements do not throw an exception. Instead, a value of inf is written into the vector in case of inverted elements.</dd>
 <dd>
 Make sure to use enough quadrature points for a precise calculation of the aspect ratio in case of deformed elements.</dd>
@@ -881,7 +881,7 @@
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>tol</em><span class="paramdefsep"> = </span><span class="paramdefval">1e-12</span></span>&#href_anchor"memdoc">
 <p>Remove vertices that are duplicated, due to the input of a structured grid, for example. If these vertices are not removed, the faces bounded by these vertices become part of the boundary, even if they are in the interior of the mesh.</p>
-<p>This function is called by some <code>GridIn::read_*</code> functions. Only the vertices with indices in <code>considered_vertices</code> are tested for equality. This speeds up the algorithm, which is, for worst-case hyper cube geometries <picture><source srcset="form_1465_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(N^{3/2})$" src="form_1465.png"/></picture> in 2d and <picture><source srcset="form_1466_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(N^{5/3})$" src="form_1466.png"/></picture> in 3d: quite slow. However, if you wish to consider all vertices, simply pass an empty vector. In that case, the function fills <code>considered_vertices</code> with all vertices.</p>
+<p>This function is called by some <code>GridIn::read_*</code> functions. Only the vertices with indices in <code>considered_vertices</code> are tested for equality. This speeds up the algorithm, which is, for worst-case hyper cube geometries <picture><source srcset="form_1391_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(N^{3/2})$" src="form_1391.png"/></picture> in 2d and <picture><source srcset="form_1392_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(N^{5/3})$" src="form_1392.png"/></picture> in 3d: quite slow. However, if you wish to consider all vertices, simply pass an empty vector. In that case, the function fills <code>considered_vertices</code> with all vertices.</p>
 <p>Two vertices are considered equal if their difference in each coordinate direction is less than <code>tol</code>. This implies that nothing happens if the tolerance is set to zero. </p>
 
 <p class="definition">Definition at line <a class="el" href="grid__tools_8cc_source.html#href_anchor">761</a> of file <a class="el" href="grid__tools_8cc_source.html">grid_tools.cc</a>.</p>
@@ -1016,7 +1016,7 @@
           <td></td>
           <td class="paramtype"><a class="el" href="classTriangulation.html">Triangulation</a>&lt; dim, spacedim &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>triangulation</em></span>&#href_anchor"memdoc">
 <p>Transform the vertices of the given triangulation by applying the function object provided as first argument to all its vertices.</p>
-<p>The transformation given as argument is used to transform each vertex. Its respective type has to offer a function-like syntax, i.e. the predicate is either an object of a type that has an <code>operator()</code>, or it is a pointer to a non-member function, or it is a lambda function object. In either case, argument and return value have to be of type <a class="el" href="classPoint.html">Point&lt;spacedim&gt;</a>. An example &ndash; a simple transformation that moves the object two units to the right in the <picture><source srcset="form_1467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_1$" src="form_1467.png"/></picture> direction &ndash; could look like as follows: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classTriangulation.html">Triangulation&lt;dim&gt;</a> <a class="code hl_variable" href="p4est__wrappers_8cc.html#href_anchor">triangulation</a>;</div>
+<p>The transformation given as argument is used to transform each vertex. Its respective type has to offer a function-like syntax, i.e. the predicate is either an object of a type that has an <code>operator()</code>, or it is a pointer to a non-member function, or it is a lambda function object. In either case, argument and return value have to be of type <a class="el" href="classPoint.html">Point&lt;spacedim&gt;</a>. An example &ndash; a simple transformation that moves the object two units to the right in the <picture><source srcset="form_1393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_1$" src="form_1393.png"/></picture> direction &ndash; could look like as follows: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classTriangulation.html">Triangulation&lt;dim&gt;</a> <a class="code hl_variable" href="p4est__wrappers_8cc.html#href_anchor">triangulation</a>;</div>
 <div class="line">... <span class="comment">// fill triangulation with something</span></div>
 <div class="line"><a class="code hl_function" href="#href_anchor">GridTools::transform</a> ([](<span class="keyword">const</span> <a class="code hl_class" href="classPoint.html">Point&lt;dim&gt;</a> &amp;p) -&gt; <a class="code hl_class" href="classPoint.html">Point&lt;dim&gt;</a></div>
 <div class="line">                      {</div>
@@ -1197,13 +1197,13 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>solve_for_absolute_positions</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
 <p>Transform the given triangulation smoothly to a different domain where, typically, each of the vertices at the boundary of the triangulation is mapped to the corresponding points in the <code>new_points</code> map.</p>
-<p>The unknown displacement field <picture><source srcset="form_1468_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_d(\mathbf x)$" src="form_1468.png"/></picture> in direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> is obtained from the minimization problem </p><p class="formulaDsp">
-<picture><source srcset="form_1469_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \min\, \int \frac{1}{2}
+<p>The unknown displacement field <picture><source srcset="form_1394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_d(\mathbf x)$" src="form_1394.png"/></picture> in direction <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> is obtained from the minimization problem </p><p class="formulaDsp">
+<picture><source srcset="form_1395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \min\, \int \frac{1}{2}
   c(\mathbf x)
   \mathbf \nabla u_d(\mathbf x) \cdot
   \mathbf \nabla u_d(\mathbf x)
   \,\rm d x
-\]" src="form_1469.png"/></picture>
+\]" src="form_1395.png"/></picture>
 </p>
 <p> subject to prescribed constraints. The minimizer is obtained by solving the Laplace equation of the dim components of a displacement field that maps the current domain into one described by <code>new_points</code> . Linear finite elements with four Gaussian quadrature points in each direction are used. The difference between the vertex positions specified in <code>new_points</code> and their current value in <code>tria</code> therefore represents the prescribed values of this displacement field at the boundary of the domain, or more precisely at all of those locations for which <code>new_points</code> provides values (which may be at part of the boundary, or even in the interior of the domain). The function then evaluates this displacement field at each unconstrained vertex and uses it to place the mapped vertex where the displacement field locates it. Because the solution of the Laplace equation is smooth, this guarantees a smooth mapping from the old domain to the new one.</p>
 <dl class="params"><dt>Parameters</dt><dd>
@@ -2984,7 +2984,7 @@
 </div><div class="memdoc">
 <p>This function does the same as the previous one, i.e. it partitions a triangulation using a partitioning algorithm into a number of subdomains identified by the <code>cell-&gt;subdomain_id()</code> flag.</p>
 <p>The difference to the previous function is the second argument, a sparsity pattern that represents the connectivity pattern between cells.</p>
-<p>While the function above builds it directly from the triangulation by considering which cells neighbor each other, this function can take a more refined connectivity graph. The sparsity pattern needs to be of size <picture><source srcset="form_1216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N\times N$" src="form_1216.png"/></picture>, where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> is the number of active cells in the triangulation. If the sparsity pattern contains an entry at position <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture>, then this means that cells <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> (in the order in which they are traversed by active cell iterators) are to be considered connected; partitioning algorithm will then try to partition the domain in such a way that (i) the subdomains are of roughly equal size, and (ii) a minimal number of connections are broken.</p>
+<p>While the function above builds it directly from the triangulation by considering which cells neighbor each other, this function can take a more refined connectivity graph. The sparsity pattern needs to be of size <picture><source srcset="form_1216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N\times N$" src="form_1216.png"/></picture>, where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> is the number of active cells in the triangulation. If the sparsity pattern contains an entry at position <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture>, then this means that cells <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> (in the order in which they are traversed by active cell iterators) are to be considered connected; partitioning algorithm will then try to partition the domain in such a way that (i) the subdomains are of roughly equal size, and (ii) a minimal number of connections are broken.</p>
 <p>This function is mainly useful in cases where connections between cells exist that are not present in the triangulation alone (otherwise the previous function would be the simpler one to use). Such connections may include that certain parts of the boundary of a domain are coupled through symmetric boundary conditions or integrals (e.g. friction contact between the two sides of a crack in the domain), or if a numerical scheme is used that not only connects immediate neighbors but a larger neighborhood of cells (e.g. when solving integral equations).</p>
 <p>In addition, this function may be useful in cases where the default sparsity pattern is not entirely sufficient. This can happen because the default is to just consider face neighbors, not neighboring cells that are connected by edges or vertices. While the latter couple when using continuous finite elements, they are typically still closely connected in the neighborship graph, and partitioning algorithm will not usually cut important connections in this case. However, if there are vertices in the mesh where many cells (many more than the common 4 or 6 in 2d and 3d, respectively) come together, then there will be a significant number of cells that are connected across a vertex, but several degrees removed in the connectivity graph built only using face neighbors. In a case like this, partitioning algorithm may sometimes make bad decisions and you may want to build your own connectivity graph.</p>
 <dl class="section note"><dt>Note</dt><dd>If the <code>weight</code> signal has been attached to the <code>triangulation</code>, then this will be used and passed to the partitioner. </dd></dl>
@@ -3511,7 +3511,7 @@
 </div><div class="memdoc">
 <p>An orthogonal equality test for faces.</p>
 <p><code>face1</code> and <code>face2</code> are considered equal, if a one to one matching between its vertices can be achieved via an orthogonal equality relation.</p>
-<p>Here, two vertices <code>v_1</code> and <code>v_2</code> are considered equal, if <picture><source srcset="form_1470_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M\cdot v_1 + offset - v_2$" src="form_1470.png"/></picture> is parallel to the unit vector in unit direction <code>direction</code>. If the parameter <code>matrix</code> is a reference to a spacedim x spacedim matrix, <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> is set to <code>matrix</code>, otherwise <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> is the identity matrix.</p>
+<p>Here, two vertices <code>v_1</code> and <code>v_2</code> are considered equal, if <picture><source srcset="form_1396_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M\cdot v_1 + offset - v_2$" src="form_1396.png"/></picture> is parallel to the unit vector in unit direction <code>direction</code>. If the parameter <code>matrix</code> is a reference to a spacedim x spacedim matrix, <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> is set to <code>matrix</code>, otherwise <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> is the identity matrix.</p>
 <p>If the matching was successful, the <em>relative</em> orientation of <code>face1</code> with respect to <code>face2</code> is returned in the bitset <code>orientation</code>, where </p><div class="fragment"><div class="line">orientation[0] -&gt; face_orientation</div>
 <div class="line">orientation[1] -&gt; face_flip</div>
 <div class="line">orientation[2] -&gt; face_rotation</div>
@@ -3626,8 +3626,8 @@
 <p>This function tries to match all faces belonging to the first boundary with faces belonging to the second boundary with the help of <a class="el" href="#href_anchor">orthogonal_equality()</a>.</p>
 <p>The bitset that is returned inside of <a class="el" href="structGridTools_1_1PeriodicFacePair.html">PeriodicFacePair</a> encodes the <em>relative</em> orientation of the first face with respect to the second face, see the documentation of <a class="el" href="#href_anchor">orthogonal_equality()</a> for further details.</p>
 <p>The <code>direction</code> refers to the space direction in which periodicity is enforced. When matching periodic faces this vector component is ignored.</p>
-<p>The <code>offset</code> is a vector tangential to the faces that is added to the location of vertices of the 'first' boundary when attempting to match them to the corresponding vertices of the 'second' boundary. This can be used to implement conditions such as <picture><source srcset="form_1471_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(0,y)=u(1,y+1)$" src="form_1471.png"/></picture>.</p>
-<p>Optionally, a <picture><source srcset="form_1472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim\times dim$" src="form_1472.png"/></picture> rotation <code>matrix</code> can be specified that describes how vector valued DoFs of the first face should be modified prior to constraining to the DoFs of the second face. The <code>matrix</code> is used in two places. First, <code>matrix</code> will be supplied to <a class="el" href="#href_anchor">orthogonal_equality()</a> and used for matching faces: Two vertices <picture><source srcset="form_1473_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_1$" src="form_1473.png"/></picture> and <picture><source srcset="form_1474_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_2$" src="form_1474.png"/></picture> match if <picture><source srcset="form_1475_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{matrix}\cdot v_1 + \text{offset} - v_2$" src="form_1475.png"/></picture> is parallel to the unit vector in unit direction <code>direction</code>. (For more details see <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::make_periodicity_constraints()</a>, the glossary <a class="el" href="DEALGlossary.html#href_anchor">glossary entry on periodic conditions</a> and <a class="el" href="step_45.html">step-45</a>). Second, <code>matrix</code> will be stored in the <a class="el" href="structGridTools_1_1PeriodicFacePair.html">PeriodicFacePair</a> collection <code>matched_pairs</code> for further use.</p>
+<p>The <code>offset</code> is a vector tangential to the faces that is added to the location of vertices of the 'first' boundary when attempting to match them to the corresponding vertices of the 'second' boundary. This can be used to implement conditions such as <picture><source srcset="form_1397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(0,y)=u(1,y+1)$" src="form_1397.png"/></picture>.</p>
+<p>Optionally, a <picture><source srcset="form_1398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim\times dim$" src="form_1398.png"/></picture> rotation <code>matrix</code> can be specified that describes how vector valued DoFs of the first face should be modified prior to constraining to the DoFs of the second face. The <code>matrix</code> is used in two places. First, <code>matrix</code> will be supplied to <a class="el" href="#href_anchor">orthogonal_equality()</a> and used for matching faces: Two vertices <picture><source srcset="form_1399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_1$" src="form_1399.png"/></picture> and <picture><source srcset="form_1400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_2$" src="form_1400.png"/></picture> match if <picture><source srcset="form_1401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{matrix}\cdot v_1 + \text{offset} - v_2$" src="form_1401.png"/></picture> is parallel to the unit vector in unit direction <code>direction</code>. (For more details see <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::make_periodicity_constraints()</a>, the glossary <a class="el" href="DEALGlossary.html#href_anchor">glossary entry on periodic conditions</a> and <a class="el" href="step_45.html">step-45</a>). Second, <code>matrix</code> will be stored in the <a class="el" href="structGridTools_1_1PeriodicFacePair.html">PeriodicFacePair</a> collection <code>matched_pairs</code> for further use.</p>
 <dl class="tparams"><dt>Template Parameters</dt><dd>
   <table class="tparams">
     <tr><td class="paramname">MeshType</td><td>A type that satisfies the requirements of the <a class="el" href="group__Concepts.html#href_anchor">MeshType concept</a>.</td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators.html	2024-03-17 21:57:42.275227085 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators.html	2024-03-17 21:57:42.275227085 +0000
@@ -127,9 +127,9 @@
 <p>The namespace <a class="el" href="namespaceLocalIntegrators_1_1L2.html" title="Local integrators related to L2-inner products.">L2</a> contains functions for mass matrices and <em>L<sup>2</sup></em>-inner products.</p>
 <h3>Notational conventions</h3>
 <p>In most cases, the action of a function in this namespace can be described by a single integral. We distinguish between integrals over cells <em>Z</em> and over faces <em>F</em>. If an integral is denoted as  </p><p class="formulaDsp">
-<picture><source srcset="form_1545_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \int_Z u \otimes v \,dx,
-\]" src="form_1545.png"/></picture>
+\]" src="form_1564.png"/></picture>
 </p>
 <p> it will yield the following results, depending on the type of operation </p><ul>
 <li>
@@ -139,7 +139,7 @@
 <li>
 If the function returns a number, then this number is the integral of the two given functions <em>u</em> and <em>v</em>. </li>
 </ul>
-<p>We will use regular cursive symbols <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> for scalars and bold symbols <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> for vectors. Test functions are always <em>v</em> and trial functions are always <em>u</em>. Parameters are Greek and the face normal vectors are <picture><source srcset="form_1546_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n = \mathbf n_1 = -\mathbf n_2$" src="form_1546.png"/></picture>.</p>
+<p>We will use regular cursive symbols <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> for scalars and bold symbols <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> for vectors. Test functions are always <em>v</em> and trial functions are always <em>u</em>. Parameters are Greek and the face normal vectors are <picture><source srcset="form_1565_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n = \mathbf n_1 = -\mathbf n_2$" src="form_1565.png"/></picture>.</p>
 <h3>Signature of functions</h3>
 <p><a class="el" href="namespaceFunctions.html">Functions</a> in this namespace follow a generic signature. In the simplest case, you have two related functions </p><div class="fragment"><div class="line"><span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line"><span class="keywordtype">void</span></div>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Advection.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Advection.html	2024-03-17 21:57:42.315227332 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Advection.html	2024-03-17 21:57:42.319227356 +0000
@@ -271,8 +271,8 @@
 </div><div class="memdoc">
 <p>Vector-valued advection residual operator in strong form</p>
 <p class="formulaDsp">
-<picture><source srcset="form_1516_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ r_i = \int_Z \bigl((\mathbf w \cdot \nabla) \mathbf u\bigr)
-\cdot\mathbf v_i \, dx. \]" src="form_1516.png"/></picture>
+<picture><source srcset="form_1515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ r_i = \int_Z \bigl((\mathbf w \cdot \nabla) \mathbf u\bigr)
+\cdot\mathbf v_i \, dx. \]" src="form_1515.png"/></picture>
 </p>
 <dl class="section warning"><dt>Warning</dt><dd>This is not the residual consistent with <a class="el" href="#href_anchor">cell_matrix()</a>, but with its transpose. </dd></dl>
 
@@ -321,7 +321,7 @@
 </div><div class="memdoc">
 <p>Scalar advection residual operator in weak form</p>
 <p class="formulaDsp">
-<picture><source srcset="form_1517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ r_i = \int_Z  (\mathbf w \cdot \nabla)v\, u_i \, dx. \]" src="form_1517.png"/></picture>
+<picture><source srcset="form_1516_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ r_i = \int_Z  (\mathbf w \cdot \nabla)v\, u_i \, dx. \]" src="form_1516.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="advection_8h_source.html#href_anchor">216</a> of file <a class="el" href="advection_8h_source.html">advection.h</a>.</p>
@@ -369,8 +369,8 @@
 </div><div class="memdoc">
 <p>Vector-valued advection residual operator in weak form</p>
 <p class="formulaDsp">
-<picture><source srcset="form_1518_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ r_i = \int_Z \bigl((\mathbf w \cdot \nabla) \mathbf v\bigr)
-\cdot\mathbf u_i \, dx. \]" src="form_1518.png"/></picture>
+<picture><source srcset="form_1517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ r_i = \int_Z \bigl((\mathbf w \cdot \nabla) \mathbf v\bigr)
+\cdot\mathbf u_i \, dx. \]" src="form_1517.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="advection_8h_source.html#href_anchor">256</a> of file <a class="el" href="advection_8h_source.html">advection.h</a>.</p>
@@ -410,11 +410,11 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>Upwind flux at the boundary for weak advection operator. This is the value of the trial function at the outflow boundary and zero else:  </p><p class="formulaDsp">
-<picture><source srcset="form_1520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1518_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 a_{ij} = \int_{\partial\Omega}
 [\mathbf w\cdot\mathbf n]_+
 u_i v_j \, ds
-\]" src="form_1520.png"/></picture>
+\]" src="form_1518.png"/></picture>
 </p>
 <p>The <code>velocity</code> is provided as an <a class="el" href="classArrayView.html">ArrayView</a>, having <code>dim</code> vectors, one for each velocity component. Each of the vectors must either have only a single entry, if the advection velocity is constant, or have an entry for each quadrature point.</p>
 <p>The finite element can have several components, in which case each component is advected by the same velocity. </p>
@@ -468,13 +468,13 @@
 </table>
 </div><div class="memdoc">
 <p>Scalar case: Residual for upwind flux at the boundary for weak advection operator. This is the value of the trial function at the outflow boundary and the value of the incoming boundary condition on the inflow boundary:  </p><p class="formulaDsp">
-<picture><source srcset="form_1523_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 a_{ij} = \int_{\partial\Omega}
 (\mathbf w\cdot\mathbf n)
 \widehat u v_j \, ds
-\]" src="form_1523.png"/></picture>
+\]" src="form_1519.png"/></picture>
 </p>
-<p>Here, the numerical flux <picture><source srcset="form_1524_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widehat u$" src="form_1524.png"/></picture> is the upwind value at the face, namely the finite element function whose values are given in the argument <code>input</code> on the outflow boundary. On the inflow boundary, it is the inhomogeneous boundary value in the argument <code>data</code>.</p>
+<p>Here, the numerical flux <picture><source srcset="form_1520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widehat u$" src="form_1520.png"/></picture> is the upwind value at the face, namely the finite element function whose values are given in the argument <code>input</code> on the outflow boundary. On the inflow boundary, it is the inhomogeneous boundary value in the argument <code>data</code>.</p>
 <p>The <code>velocity</code> is provided as an <a class="el" href="classArrayView.html">ArrayView</a>, having <code>dim</code> vectors, one for each velocity component. Each of the vectors must either have only a single entry, if the advection velocity is constant, or have an entry for each quadrature point.</p>
 <p>The finite element can have several components, in which case each component is advected by the same velocity. </p>
 
@@ -527,13 +527,13 @@
 </table>
 </div><div class="memdoc">
 <p>Vector-valued case: Residual for upwind flux at the boundary for weak advection operator. This is the value of the trial function at the outflow boundary and the value of the incoming boundary condition on the inflow boundary:  </p><p class="formulaDsp">
-<picture><source srcset="form_1523_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 a_{ij} = \int_{\partial\Omega}
 (\mathbf w\cdot\mathbf n)
 \widehat u v_j \, ds
-\]" src="form_1523.png"/></picture>
+\]" src="form_1519.png"/></picture>
 </p>
-<p>Here, the numerical flux <picture><source srcset="form_1524_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widehat u$" src="form_1524.png"/></picture> is the upwind value at the face, namely the finite element function whose values are given in the argument <code>input</code> on the outflow boundary. On the inflow boundary, it is the inhomogeneous boundary value in the argument <code>data</code>.</p>
+<p>Here, the numerical flux <picture><source srcset="form_1520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widehat u$" src="form_1520.png"/></picture> is the upwind value at the face, namely the finite element function whose values are given in the argument <code>input</code> on the outflow boundary. On the inflow boundary, it is the inhomogeneous boundary value in the argument <code>data</code>.</p>
 <p>The <code>velocity</code> is provided as an <a class="el" href="classArrayView.html">ArrayView</a>, having <code>dim</code> vectors, one for each velocity component. Each of the vectors must either have only a single entry, if the advection velocity is constant, or have an entry for each quadrature point.</p>
 <p>The finite element can have several components, in which case each component is advected by the same velocity. </p>
 
@@ -599,13 +599,13 @@
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>Upwind flux in the interior for weak advection operator. Matrix entries correspond to the upwind value of the trial function, multiplied by the jump of the test functions  </p><p class="formulaDsp">
-<picture><source srcset="form_1529_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 a_{ij} = \int_F \left|\mathbf w
 \cdot \mathbf n\right|
 u^\uparrow
 (v^\uparrow-v^\downarrow)
 \,ds
-\]" src="form_1529.png"/></picture>
+\]" src="form_1521.png"/></picture>
 </p>
 <p>The <code>velocity</code> is provided as an <a class="el" href="classArrayView.html">ArrayView</a>, having <code>dim</code> vectors, one for each velocity component. Each of the vectors must either have only a single entry, if the advection velocity is constant, or have an entry for each quadrature point.</p>
 <p>The finite element can have several components, in which case each component is advected the same way. </p>
@@ -662,13 +662,13 @@
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>Scalar case: Upwind flux in the interior for weak advection operator. Matrix entries correspond to the upwind value of the trial function, multiplied by the jump of the test functions  </p><p class="formulaDsp">
-<picture><source srcset="form_1529_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 a_{ij} = \int_F \left|\mathbf w
 \cdot \mathbf n\right|
 u^\uparrow
 (v^\uparrow-v^\downarrow)
 \,ds
-\]" src="form_1529.png"/></picture>
+\]" src="form_1521.png"/></picture>
 </p>
 <p>The <code>velocity</code> is provided as an <a class="el" href="classArrayView.html">ArrayView</a>, having <code>dim</code> vectors, one for each velocity component. Each of the vectors must either have only a single entry, if the advection velocity is constant, or have an entry for each quadrature point.</p>
 <p>The finite element can have several components, in which case each component is advected the same way. </p>
@@ -725,13 +725,13 @@
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>Vector-valued case: Upwind flux in the interior for weak advection operator. Matrix entries correspond to the upwind value of the trial function, multiplied by the jump of the test functions  </p><p class="formulaDsp">
-<picture><source srcset="form_1529_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 a_{ij} = \int_F \left|\mathbf w
 \cdot \mathbf n\right|
 u^\uparrow
 (v^\uparrow-v^\downarrow)
 \,ds
-\]" src="form_1529.png"/></picture>
+\]" src="form_1521.png"/></picture>
 </p>
 <p>The <code>velocity</code> is provided as an <a class="el" href="classArrayView.html">ArrayView</a>, having <code>dim</code> vectors, one for each velocity component. Each of the vectors must either have only a single entry, if the advection velocity is constant, or have an entry for each quadrature point.</p>
 <p>The finite element can have several components, in which case each component is advected the same way. </p>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Divergence.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Divergence.html	2024-03-17 21:57:42.351227554 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Divergence.html	2024-03-17 21:57:42.355227579 +0000
@@ -157,7 +157,7 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>Cell matrix for divergence. The derivative is on the trial function. </p><p class="formulaDsp">
-<picture><source srcset="form_1515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z v\nabla \cdot \mathbf u \,dx \]" src="form_1515.png"/></picture>
+<picture><source srcset="form_1522_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z v\nabla \cdot \mathbf u \,dx \]" src="form_1522.png"/></picture>
 </p>
 <p> This is the strong divergence operator and the trial space should be at least <b>H</b><sup>div</sup>. The test functions may be discontinuous. </p>
 
@@ -193,8 +193,8 @@
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>The residual of the divergence operator in strong form. </p><p class="formulaDsp">
-<picture><source srcset="form_1521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z
-v\nabla \cdot \mathbf u \,dx \]" src="form_1521.png"/></picture>
+<picture><source srcset="form_1523_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z
+v\nabla \cdot \mathbf u \,dx \]" src="form_1523.png"/></picture>
 </p>
 <p> This is the strong divergence operator and the trial space should be at least <b>H</b><sup>div</sup>. The test functions may be discontinuous.</p>
 <p>The function <a class="el" href="#href_anchor">cell_matrix()</a> is the Frechet derivative of this function with respect to the test functions. </p>
@@ -231,8 +231,8 @@
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>The residual of the divergence operator in weak form. </p><p class="formulaDsp">
-<picture><source srcset="form_1526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ - \int_Z
-\nabla v \cdot \mathbf u \,dx \]" src="form_1526.png"/></picture>
+<picture><source srcset="form_1524_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ - \int_Z
+\nabla v \cdot \mathbf u \,dx \]" src="form_1524.png"/></picture>
 </p>
 <p> This is the weak divergence operator and the test space should be at least <b>H</b><sup>1</sup>. The trial functions may be discontinuous.</p>
 <dl class="todo"><dt><b><a class="el" href="todo.html#href_anchor">Todo</a></b></dt><dd>Verify: The function <a class="el" href="#href_anchor">cell_matrix()</a> is the Frechet derivative of this function with respect to the test functions. </dd></dl>
@@ -269,8 +269,8 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>Cell matrix for gradient. The derivative is on the trial function. </p><p class="formulaDsp">
-<picture><source srcset="form_1528_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
-\int_Z \nabla u \cdot \mathbf v\,dx \]" src="form_1528.png"/></picture>
+<picture><source srcset="form_1525_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+\int_Z \nabla u \cdot \mathbf v\,dx \]" src="form_1525.png"/></picture>
 </p>
 <p>This is the strong gradient and the trial space should be at least in <em>H</em><sup>1</sup>. The test functions can be discontinuous. </p>
 
@@ -306,8 +306,8 @@
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>The residual of the gradient operator in strong form. </p><p class="formulaDsp">
-<picture><source srcset="form_1530_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z
-\mathbf v\cdot\nabla u \,dx \]" src="form_1530.png"/></picture>
+<picture><source srcset="form_1526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z
+\mathbf v\cdot\nabla u \,dx \]" src="form_1526.png"/></picture>
 </p>
 <p> This is the strong gradient operator and the trial space should be at least <b>H</b><sup>1</sup>. The test functions may be discontinuous.</p>
 <p>The function <a class="el" href="#href_anchor">gradient_matrix()</a> is the Frechet derivative of this function with respect to the test functions. </p>
@@ -344,8 +344,8 @@
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>The residual of the gradient operator in weak form. </p><p class="formulaDsp">
-<picture><source srcset="form_1533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ -\int_Z
-\nabla\cdot \mathbf v u \,dx \]" src="form_1533.png"/></picture>
+<picture><source srcset="form_1527_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ -\int_Z
+\nabla\cdot \mathbf v u \,dx \]" src="form_1527.png"/></picture>
 </p>
 <p> This is the weak gradient operator and the test space should be at least <b>H</b><sup>div</sup>. The trial functions may be discontinuous.</p>
 <dl class="todo"><dt><b><a class="el" href="todo.html#href_anchor">Todo</a></b></dt><dd>Verify: The function <a class="el" href="#href_anchor">gradient_matrix()</a> is the Frechet derivative of this function with respect to the test functions. </dd></dl>
@@ -382,7 +382,7 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>The trace of the divergence operator, namely the product of the normal component of the vector valued trial space and the test space. </p><p class="formulaDsp">
-<picture><source srcset="form_1535_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_F (\mathbf u\cdot \mathbf n) v \,ds \]" src="form_1535.png"/></picture>
+<picture><source srcset="form_1528_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_F (\mathbf u\cdot \mathbf n) v \,ds \]" src="form_1528.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="divergence_8h_source.html#href_anchor">259</a> of file <a class="el" href="divergence_8h_source.html">divergence.h</a>.</p>
@@ -422,9 +422,9 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>The trace of the divergence operator, namely the product of the normal component of the vector valued trial space and the test space.  </p><p class="formulaDsp">
-<picture><source srcset="form_1537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1529_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F (\mathbf u\cdot \mathbf n) v \,ds
-\]" src="form_1537.png"/></picture>
+\]" src="form_1529.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="divergence_8h_source.html#href_anchor">292</a> of file <a class="el" href="divergence_8h_source.html">divergence.h</a>.</p>
@@ -459,9 +459,9 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>The trace of the gradient operator, namely the product of the normal component of the vector valued test space and the trial space.  </p><p class="formulaDsp">
-<picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1530_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F u (\mathbf v\cdot \mathbf n) \,ds
-\]" src="form_1538.png"/></picture>
+\]" src="form_1530.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="divergence_8h_source.html#href_anchor">324</a> of file <a class="el" href="divergence_8h_source.html">divergence.h</a>.</p>
@@ -521,10 +521,10 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>The trace of the divergence operator, namely the product of the jump of the normal component of the vector valued trial function and the mean value of the test function.  </p><p class="formulaDsp">
-<picture><source srcset="form_1540_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1531_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F (\mathbf u_1\cdot \mathbf n_1 + \mathbf u_2 \cdot \mathbf n_2)
 \frac{v_1+v_2}{2} \,ds
-\]" src="form_1540.png"/></picture>
+\]" src="form_1531.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="divergence_8h_source.html#href_anchor">358</a> of file <a class="el" href="divergence_8h_source.html">divergence.h</a>.</p>
@@ -574,12 +574,12 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>The jump of the normal component  </p><p class="formulaDsp">
-<picture><source srcset="form_1541_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F
  (\mathbf u_1\cdot \mathbf n_1 + \mathbf u_2 \cdot \mathbf n_2)
  (\mathbf v_1\cdot \mathbf n_1 + \mathbf v_2 \cdot \mathbf n_2)
 \,ds
-\]" src="form_1541.png"/></picture>
+\]" src="form_1532.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="divergence_8h_source.html#href_anchor">417</a> of file <a class="el" href="divergence_8h_source.html">divergence.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Elasticity.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Elasticity.html	2024-03-17 21:57:42.387227776 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Elasticity.html	2024-03-17 21:57:42.391227801 +0000
@@ -154,7 +154,7 @@
 </div><div class="memdoc">
 <p>The linear elasticity operator in weak form, namely double contraction of symmetric gradients.</p>
 <p class="formulaDsp">
-<picture><source srcset="form_1519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z \varepsilon(u): \varepsilon(v)\,dx \]" src="form_1519.png"/></picture>
+<picture><source srcset="form_1533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z \varepsilon(u): \varepsilon(v)\,dx \]" src="form_1533.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="elasticity_8h_source.html#href_anchor">51</a> of file <a class="el" href="elasticity_8h_source.html">elasticity.h</a>.</p>
@@ -197,7 +197,7 @@
 </div><div class="memdoc">
 <p>Vector-valued residual operator for linear elasticity in weak form</p>
 <p class="formulaDsp">
-<picture><source srcset="form_1522_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ - \int_Z \varepsilon(u): \varepsilon(v) \,dx \]" src="form_1522.png"/></picture>
+<picture><source srcset="form_1534_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ - \int_Z \varepsilon(u): \varepsilon(v) \,dx \]" src="form_1534.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="elasticity_8h_source.html#href_anchor">84</a> of file <a class="el" href="elasticity_8h_source.html">elasticity.h</a>.</p>
@@ -239,10 +239,10 @@
 </table>
 </div><div class="memdoc">
 <p>The matrix for the weak boundary condition of Nitsche type for linear elasticity:  </p><p class="formulaDsp">
-<picture><source srcset="form_1525_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1535_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F \Bigl(\gamma u \cdot v - n^T \epsilon(u) v - u \epsilon(v)
 n\Bigr)\;ds.
-\]" src="form_1525.png"/></picture>
+\]" src="form_1535.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="elasticity_8h_source.html#href_anchor">123</a> of file <a class="el" href="elasticity_8h_source.html">elasticity.h</a>.</p>
@@ -284,10 +284,10 @@
 </table>
 </div><div class="memdoc">
 <p>The matrix for the weak boundary condition of Nitsche type for the tangential displacement in linear elasticity:  </p><p class="formulaDsp">
-<picture><source srcset="form_1527_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1536_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F \Bigl(\gamma u_\tau \cdot v_\tau - n^T \epsilon(u_\tau) v_\tau -
 u_\tau^T \epsilon(v_\tau) n\Bigr)\;ds.
-\]" src="form_1527.png"/></picture>
+\]" src="form_1536.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="elasticity_8h_source.html#href_anchor">178</a> of file <a class="el" href="elasticity_8h_source.html">elasticity.h</a>.</p>
@@ -337,12 +337,12 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>Weak boundary condition for the elasticity operator by Nitsche, namely on the face <em>F</em> the vector  </p><p class="formulaDsp">
-<picture><source srcset="form_1531_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F \Bigl(\gamma (u-g) \cdot v - n^T \epsilon(u) v - (u-g) \epsilon(v)
 n^T\Bigr)\;ds.
-\]" src="form_1531.png"/></picture>
+\]" src="form_1537.png"/></picture>
 </p>
-<p>Here, <em>u</em> is the finite element function whose values and gradient are given in the arguments <code>input</code> and <code>Dinput</code>, respectively. <em>g</em> is the inhomogeneous boundary value in the argument <code>data</code>. <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> is the outer normal vector and <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture> is the usual penalty parameter. </p>
+<p>Here, <em>u</em> is the finite element function whose values and gradient are given in the arguments <code>input</code> and <code>Dinput</code>, respectively. <em>g</em> is the inhomogeneous boundary value in the argument <code>data</code>. <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> is the outer normal vector and <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture> is the usual penalty parameter. </p>
 
 <p class="definition">Definition at line <a class="el" href="elasticity_8h_source.html#href_anchor">257</a> of file <a class="el" href="elasticity_8h_source.html">elasticity.h</a>.</p>
 
@@ -398,10 +398,10 @@
 </table>
 </div><div class="memdoc">
 <p>The weak boundary condition of Nitsche type for the tangential displacement in linear elasticity:  </p><p class="formulaDsp">
-<picture><source srcset="form_1534_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1539_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F \Bigl(\gamma (u_\tau-g_\tau) \cdot v_\tau - n^T \epsilon(u_\tau) v
 - (u_\tau-g_\tau) \epsilon(v_\tau) n\Bigr)\;ds.
-\]" src="form_1534.png"/></picture>
+\]" src="form_1539.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="elasticity_8h_source.html#href_anchor">309</a> of file <a class="el" href="elasticity_8h_source.html">elasticity.h</a>.</p>
@@ -446,12 +446,12 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>Homogeneous weak boundary condition for the elasticity operator by Nitsche, namely on the face <em>F</em> the vector  </p><p class="formulaDsp">
-<picture><source srcset="form_1536_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1540_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F \Bigl(\gamma u \cdot v - n^T \epsilon(u) v - u \epsilon(v)
 n^T\Bigr)\;ds.
-\]" src="form_1536.png"/></picture>
+\]" src="form_1540.png"/></picture>
 </p>
-<p>Here, <em>u</em> is the finite element function whose values and gradient are given in the arguments <code>input</code> and <code>Dinput</code>, respectively. <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> is the outer normal vector and <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture> is the usual penalty parameter. </p>
+<p>Here, <em>u</em> is the finite element function whose values and gradient are given in the arguments <code>input</code> and <code>Dinput</code>, respectively. <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> is the outer normal vector and <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture> is the usual penalty parameter. </p>
 
 <p class="definition">Definition at line <a class="el" href="elasticity_8h_source.html#href_anchor">387</a> of file <a class="el" href="elasticity_8h_source.html">elasticity.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1GradDiv.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1GradDiv.html	2024-03-17 21:57:42.423227999 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1GradDiv.html	2024-03-17 21:57:42.423227999 +0000
@@ -137,9 +137,9 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>The weak form of the grad-div operator penalizing volume changes  </p><p class="formulaDsp">
-<picture><source srcset="form_1539_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1541_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \int_Z \nabla\cdot u \nabla \cdot v \,dx
-\]" src="form_1539.png"/></picture>
+\]" src="form_1541.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="grad__div_8h_source.html#href_anchor">52</a> of file <a class="el" href="grad__div_8h_source.html">grad_div.h</a>.</p>
@@ -174,9 +174,9 @@
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>The weak form of the grad-div residual  </p><p class="formulaDsp">
-<picture><source srcset="form_1539_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1541_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \int_Z \nabla\cdot u \nabla \cdot v \,dx
-\]" src="form_1539.png"/></picture>
+\]" src="form_1541.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="grad__div_8h_source.html#href_anchor">86</a> of file <a class="el" href="grad__div_8h_source.html">grad_div.h</a>.</p>
@@ -278,7 +278,7 @@
 - (\mathbf u-\mathbf g) \cdot \mathbf n \nabla \cdot v\Bigr)\;ds.
 \]" src="form_1543.png"/></picture>
 </p>
-<p>Here, <em>u</em> is the finite element function whose values and gradient are given in the arguments <code>input</code> and <code>Dinput</code>, respectively. <em>g</em> is the inhomogeneous boundary value in the argument <code>data</code>. <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture> is the usual penalty parameter. </p>
+<p>Here, <em>u</em> is the finite element function whose values and gradient are given in the arguments <code>input</code> and <code>Dinput</code>, respectively. <em>g</em> is the inhomogeneous boundary value in the argument <code>data</code>. <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture> is the usual penalty parameter. </p>
 
 <p class="definition">Definition at line <a class="el" href="grad__div_8h_source.html#href_anchor">174</a> of file <a class="el" href="grad__div_8h_source.html">grad_div.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1L2.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1L2.html	2024-03-17 21:57:42.447228147 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1L2.html	2024-03-17 21:57:42.455228197 +0000
@@ -138,12 +138,12 @@
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>The <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> for scalar or vector values finite elements. </p><p class="formulaDsp">
-<picture><source srcset="form_1547_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z
-uv\,dx \quad \text{or} \quad \int_Z \mathbf u\cdot \mathbf v\,dx \]" src="form_1547.png"/></picture>
+<picture><source srcset="form_1545_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z
+uv\,dx \quad \text{or} \quad \int_Z \mathbf u\cdot \mathbf v\,dx \]" src="form_1545.png"/></picture>
 </p>
 <p>Likewise, this term can be used on faces, where it computes the integrals </p><p class="formulaDsp">
-<picture><source srcset="form_1548_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_F uv\,ds \quad \text{or} \quad \int_F \mathbf u\cdot
-\mathbf v\,ds \]" src="form_1548.png"/></picture>
+<picture><source srcset="form_1546_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_F uv\,ds \quad \text{or} \quad \int_F \mathbf u\cdot
+\mathbf v\,ds \]" src="form_1546.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -181,18 +181,18 @@
           <td></td>
           <td class="paramtype">const std::vector&lt; double &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>weights</em></span>&#href_anchor"memdoc">
 <p>The weighted <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> for scalar or vector values finite elements.  </p><p class="formulaDsp">
-<picture><source srcset="form_1549_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z \omega(x) uv\,dx \quad \text{or} \quad \int_Z \omega(x)
-\mathbf u\cdot \mathbf v\,dx \]" src="form_1549.png"/></picture>
+<picture><source srcset="form_1547_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z \omega(x) uv\,dx \quad \text{or} \quad \int_Z \omega(x)
+\mathbf u\cdot \mathbf v\,dx \]" src="form_1547.png"/></picture>
 </p>
 <p>Likewise, this term can be used on faces, where it computes the integrals </p><p class="formulaDsp">
-<picture><source srcset="form_1550_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_F \omega(x) uv\,ds \quad \text{or} \quad \int_F
-\omega(x) \mathbf u\cdot \mathbf v\,ds \]" src="form_1550.png"/></picture>
+<picture><source srcset="form_1548_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_F \omega(x) uv\,ds \quad \text{or} \quad \int_F
+\omega(x) \mathbf u\cdot \mathbf v\,ds \]" src="form_1548.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">M</td><td>The weighted mass matrix obtained as result. </td></tr>
     <tr><td class="paramname">fe</td><td>The <a class="el" href="classFEValues.html">FEValues</a> object describing the local trial function space. <a class="el" href="group__feaccess.html#href_anchor" title="Shape function values.">update_values</a> and <a class="el" href="group__feaccess.html#href_anchor" title="Transformed quadrature weights.">update_JxW_values</a> must be set. </td></tr>
-    <tr><td class="paramname">weights</td><td>The weights, <picture><source srcset="form_1551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega(x)$" src="form_1551.png"/></picture>, evaluated at the quadrature points in the finite element (size must be equal to the number of quadrature points in the element). </td></tr>
+    <tr><td class="paramname">weights</td><td>The weights, <picture><source srcset="form_1549_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega(x)$" src="form_1549.png"/></picture>, evaluated at the quadrature points in the finite element (size must be equal to the number of quadrature points in the element). </td></tr>
   </table>
   </dd>
 </dl>
@@ -230,13 +230,13 @@
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p><em>L<sup>2</sup></em>-inner product for scalar functions.</p>
 <p class="formulaDsp">
-<picture><source srcset="form_1552_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z fv\,dx \quad \text{or} \quad \int_F fv\,ds \]" src="form_1552.png"/></picture>
+<picture><source srcset="form_1550_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z fv\,dx \quad \text{or} \quad \int_F fv\,ds \]" src="form_1550.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">result</td><td>The vector obtained as result. </td></tr>
     <tr><td class="paramname">fe</td><td>The <a class="el" href="classFEValues.html">FEValues</a> object describing the local trial function space. <a class="el" href="group__feaccess.html#href_anchor" title="Shape function values.">update_values</a> and <a class="el" href="group__feaccess.html#href_anchor" title="Transformed quadrature weights.">update_JxW_values</a> must be set. </td></tr>
-    <tr><td class="paramname">input</td><td>The representation of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> evaluated at the quadrature points in the finite element (size must be equal to the number of quadrature points in the element). </td></tr>
+    <tr><td class="paramname">input</td><td>The representation of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> evaluated at the quadrature points in the finite element (size must be equal to the number of quadrature points in the element). </td></tr>
     <tr><td class="paramname">factor</td><td>A constant that multiplies the result. </td></tr>
   </table>
   </dd>
@@ -274,14 +274,14 @@
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p><em>L<sup>2</sup></em>-inner product for a slice of a vector valued right hand side. </p><p class="formulaDsp">
-<picture><source srcset="form_1553_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z \mathbf f\cdot \mathbf v\,dx \quad \text{or}
-\quad \int_F \mathbf f\cdot \mathbf v\,ds \]" src="form_1553.png"/></picture>
+<picture><source srcset="form_1551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z \mathbf f\cdot \mathbf v\,dx \quad \text{or}
+\quad \int_F \mathbf f\cdot \mathbf v\,ds \]" src="form_1551.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">result</td><td>The vector obtained as result. </td></tr>
     <tr><td class="paramname">fe</td><td>The <a class="el" href="classFEValues.html">FEValues</a> object describing the local trial function space. <a class="el" href="group__feaccess.html#href_anchor" title="Shape function values.">update_values</a> and <a class="el" href="group__feaccess.html#href_anchor" title="Transformed quadrature weights.">update_JxW_values</a> must be set. </td></tr>
-    <tr><td class="paramname">input</td><td>The vector valued representation of <picture><source srcset="form_1554_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf f$" src="form_1554.png"/></picture> evaluated at the quadrature points in the finite element (size of each component must be equal to the number of quadrature points in the element). </td></tr>
+    <tr><td class="paramname">input</td><td>The vector valued representation of <picture><source srcset="form_1552_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf f$" src="form_1552.png"/></picture> evaluated at the quadrature points in the finite element (size of each component must be equal to the number of quadrature points in the element). </td></tr>
     <tr><td class="paramname">factor</td><td>A constant that multiplies the result. </td></tr>
   </table>
   </dd>
@@ -338,9 +338,9 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>factor2</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
-<p>The jump matrix between two cells for scalar or vector values finite elements. Note that the factor <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture> can be used to implement weighted jumps. </p><p class="formulaDsp">
-<picture><source srcset="form_1555_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_F [\gamma u][\gamma v]\,ds \quad \text{or}
-\int_F [\gamma \mathbf u]\cdot [\gamma \mathbf v]\,ds \]" src="form_1555.png"/></picture>
+<p>The jump matrix between two cells for scalar or vector values finite elements. Note that the factor <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture> can be used to implement weighted jumps. </p><p class="formulaDsp">
+<picture><source srcset="form_1553_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_F [\gamma u][\gamma v]\,ds \quad \text{or}
+\int_F [\gamma \mathbf u]\cdot [\gamma \mathbf v]\,ds \]" src="form_1553.png"/></picture>
 </p>
 <p>Using appropriate weights, this term can be used to penalize violation of conformity in <em>H<sup>1</sup></em>.</p>
 <p>Note that for the parameters that follow, the external matrix refers to the flux between cells, while the internal matrix refers to entries coupling inside the cell.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Laplace.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Laplace.html	2024-03-17 21:57:42.491228419 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Laplace.html	2024-03-17 21:57:42.495228443 +0000
@@ -152,8 +152,8 @@
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>Laplacian in weak form, namely on the cell <em>Z</em> the matrix </p><p class="formulaDsp">
-<picture><source srcset="form_1565_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
-\int_Z \nu \nabla u \cdot \nabla v \, dx. \]" src="form_1565.png"/></picture>
+<picture><source srcset="form_1554_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+\int_Z \nu \nabla u \cdot \nabla v \, dx. \]" src="form_1554.png"/></picture>
 </p>
 <p>The <a class="el" href="classFiniteElement.html">FiniteElement</a> in <code>fe</code> may be scalar or vector valued. In the latter case, the Laplacian is applied to each component separately. </p>
 
@@ -197,7 +197,7 @@
 </div><div class="memdoc">
 <p>Laplacian residual operator in weak form</p>
 <p class="formulaDsp">
-<picture><source srcset="form_1568_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z \nu \nabla u \cdot \nabla v \, dx. \]" src="form_1568.png"/></picture>
+<picture><source srcset="form_1555_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z \nu \nabla u \cdot \nabla v \, dx. \]" src="form_1555.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="laplace_8h_source.html#href_anchor">92</a> of file <a class="el" href="laplace_8h_source.html">laplace.h</a>.</p>
@@ -240,7 +240,7 @@
 </div><div class="memdoc">
 <p>Vector-valued Laplacian residual operator in weak form</p>
 <p class="formulaDsp">
-<picture><source srcset="form_1569_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z \nu \nabla u : \nabla v \, dx. \]" src="form_1569.png"/></picture>
+<picture><source srcset="form_1556_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \int_Z \nu \nabla u : \nabla v \, dx. \]" src="form_1556.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="laplace_8h_source.html#href_anchor">119</a> of file <a class="el" href="laplace_8h_source.html">laplace.h</a>.</p>
@@ -275,11 +275,11 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>Weak boundary condition of Nitsche type for the Laplacian, namely on the face <em>F</em> the matrix  </p><p class="formulaDsp">
-<picture><source srcset="form_1570_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1557_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F \Bigl(\gamma u v - \partial_n u v - u \partial_n v\Bigr)\;ds.
-\]" src="form_1570.png"/></picture>
+\]" src="form_1557.png"/></picture>
 </p>
-<p>Here, <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture> is the <code>penalty</code> parameter suitably computed with <a class="el" href="#href_anchor">compute_penalty()</a>. </p>
+<p>Here, <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture> is the <code>penalty</code> parameter suitably computed with <a class="el" href="#href_anchor">compute_penalty()</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="laplace_8h_source.html#href_anchor">157</a> of file <a class="el" href="laplace_8h_source.html">laplace.h</a>.</p>
 
@@ -313,12 +313,12 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>Weak boundary condition of Nitsche type for the Laplacian applied to the tangential component only, namely on the face <em>F</em> the matrix  </p><p class="formulaDsp">
-<picture><source srcset="form_1571_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1558_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F \Bigl(\gamma u_\tau v_\tau - \partial_n u_\tau v_\tau - u_\tau
 \partial_n v_\tau\Bigr)\;ds.
-\]" src="form_1571.png"/></picture>
+\]" src="form_1558.png"/></picture>
 </p>
-<p>Here, <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture> is the <code>penalty</code> parameter suitably computed with <a class="el" href="#href_anchor">compute_penalty()</a>. </p>
+<p>Here, <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture> is the <code>penalty</code> parameter suitably computed with <a class="el" href="#href_anchor">compute_penalty()</a>. </p>
 
 <p class="definition">Definition at line <a class="el" href="laplace_8h_source.html#href_anchor">198</a> of file <a class="el" href="laplace_8h_source.html">laplace.h</a>.</p>
 
@@ -367,12 +367,12 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>Weak boundary condition for the <a class="el" href="namespaceLocalIntegrators_1_1Laplace.html" title="Local integrators related to the Laplacian and its DG formulations.">Laplace</a> operator by Nitsche, scalar version, namely on the face <em>F</em> the vector  </p><p class="formulaDsp">
-<picture><source srcset="form_1572_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1559_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F \Bigl(\gamma (u-g) v - \partial_n u v - (u-g) \partial_n
 v\Bigr)\;ds.
-\]" src="form_1572.png"/></picture>
+\]" src="form_1559.png"/></picture>
 </p>
-<p>Here, <em>u</em> is the finite element function whose values and gradient are given in the arguments <code>input</code> and <code>Dinput</code>, respectively. <em>g</em> is the inhomogeneous boundary value in the argument <code>data</code>. <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture> is the usual penalty parameter. </p>
+<p>Here, <em>u</em> is the finite element function whose values and gradient are given in the arguments <code>input</code> and <code>Dinput</code>, respectively. <em>g</em> is the inhomogeneous boundary value in the argument <code>data</code>. <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture> is the usual penalty parameter. </p>
 
 <p class="definition">Definition at line <a class="el" href="laplace_8h_source.html#href_anchor">261</a> of file <a class="el" href="laplace_8h_source.html">laplace.h</a>.</p>
 
@@ -421,13 +421,13 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>Weak boundary condition for the <a class="el" href="namespaceLocalIntegrators_1_1Laplace.html" title="Local integrators related to the Laplacian and its DG formulations.">Laplace</a> operator by Nitsche, vector valued version, namely on the face <em>F</em> the vector  </p><p class="formulaDsp">
-<picture><source srcset="form_1573_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F \Bigl(\gamma (\mathbf u- \mathbf g) \cdot \mathbf v
 - \partial_n \mathbf u \cdot \mathbf v
 - (\mathbf u-\mathbf g) \cdot \partial_n \mathbf v\Bigr)\;ds.
-\]" src="form_1573.png"/></picture>
+\]" src="form_1560.png"/></picture>
 </p>
-<p>Here, <em>u</em> is the finite element function whose values and gradient are given in the arguments <code>input</code> and <code>Dinput</code>, respectively. <em>g</em> is the inhomogeneous boundary value in the argument <code>data</code>. <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture> is the usual penalty parameter. </p>
+<p>Here, <em>u</em> is the finite element function whose values and gradient are given in the arguments <code>input</code> and <code>Dinput</code>, respectively. <em>g</em> is the inhomogeneous boundary value in the argument <code>data</code>. <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture> is the usual penalty parameter. </p>
 
 <p class="definition">Definition at line <a class="el" href="laplace_8h_source.html#href_anchor">308</a> of file <a class="el" href="laplace_8h_source.html">laplace.h</a>.</p>
 
@@ -486,10 +486,10 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor2</em><span class="paramdefsep"> = </span><span class="paramdefval">-1.</span></span>&#href_anchor"memdoc">
 <p>Flux for the interior penalty method for the Laplacian, namely on the face <em>F</em> the matrices associated with the bilinear form  </p><p class="formulaDsp">
-<picture><source srcset="form_1574_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F \Bigl( \gamma [u][v] - \{\nabla u\}[v\mathbf n] - [u\mathbf
 n]\{\nabla v\} \Bigr) \; ds.
-\]" src="form_1574.png"/></picture>
+\]" src="form_1561.png"/></picture>
 </p>
 <p>The penalty parameter should always be the mean value of the penalties needed for stability on each side. In the case of constant coefficients, it can be computed using <a class="el" href="#href_anchor">compute_penalty()</a>.</p>
 <p>If <code>factor2</code> is missing or negative, the factor is assumed the same on both sides. If factors differ, note that the penalty parameter has to be computed accordingly. </p>
@@ -551,10 +551,10 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor2</em><span class="paramdefsep"> = </span><span class="paramdefval">-1.</span></span>&#href_anchor"memdoc">
 <p>Flux for the interior penalty method for the Laplacian applied to the tangential components of a vector field, namely on the face <em>F</em> the matrices associated with the bilinear form  </p><p class="formulaDsp">
-<picture><source srcset="form_1575_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1562_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F \Bigl( \gamma [u_\tau][v_\tau] - \{\nabla u_\tau\}[v_\tau\mathbf
 n] - [u_\tau\mathbf n]\{\nabla v_\tau\} \Bigr) \; ds.
-\]" src="form_1575.png"/></picture>
+\]" src="form_1562.png"/></picture>
 </p>
 <dl class="section warning"><dt>Warning</dt><dd>This function is still under development! </dd></dl>
 
@@ -625,10 +625,10 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>ext_factor</em><span class="paramdefsep"> = </span><span class="paramdefval">-1.</span></span>&#href_anchor"memdoc">
 <p>Residual term for the symmetric interior penalty method:  </p><p class="formulaDsp">
-<picture><source srcset="form_1574_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F \Bigl( \gamma [u][v] - \{\nabla u\}[v\mathbf n] - [u\mathbf
 n]\{\nabla v\} \Bigr) \; ds.
-\]" src="form_1574.png"/></picture>
+\]" src="form_1561.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="laplace_8h_source.html#href_anchor">544</a> of file <a class="el" href="laplace_8h_source.html">laplace.h</a>.</p>
@@ -698,11 +698,11 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>ext_factor</em><span class="paramdefsep"> = </span><span class="paramdefval">-1.</span></span>&#href_anchor"memdoc">
 <p>Vector-valued residual term for the symmetric interior penalty method:  </p><p class="formulaDsp">
-<picture><source srcset="form_1576_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1563_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F \Bigl( \gamma [\mathbf u]\cdot[\mathbf v]
 - \{\nabla \mathbf u\}[\mathbf v\otimes \mathbf n]
 - [\mathbf u\otimes \mathbf n]\{\nabla \mathbf v\} \Bigr) \; ds.
-\]" src="form_1576.png"/></picture>
+\]" src="form_1563.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="laplace_8h_source.html#href_anchor">611</a> of file <a class="el" href="laplace_8h_source.html">laplace.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Maxwell.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Maxwell.html	2024-03-17 21:57:42.523228616 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceLocalIntegrators_1_1Maxwell.html	2024-03-17 21:57:42.527228641 +0000
@@ -120,22 +120,22 @@
 <div class="textblock"><p>Local integrators related to curl operators and their traces. </p>
 <p>We use the following conventions for curl operators. First, in three space dimensions</p>
 <p class="formulaDsp">
-<picture><source srcset="form_1556_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1566_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \nabla\times \mathbf u = \begin{pmatrix}
   \partial_2 u_3 - \partial_3 u_2 \\
   \partial_3 u_1 - \partial_1 u_3 \\
   \partial_1 u_2 - \partial_2 u_1
 \end{pmatrix}.
-\]" src="form_1556.png"/></picture>
+\]" src="form_1566.png"/></picture>
 </p>
-<p>In two space dimensions, the curl is obtained by extending a vector <b>u</b> to <picture><source srcset="form_1557_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u_1, u_2, 0)^T$" src="form_1557.png"/></picture> and a scalar <em>p</em> to <picture><source srcset="form_1558_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0,0,p)^T$" src="form_1558.png"/></picture>. Computing the nonzero components, we obtain the scalar curl of a vector function and the vector curl of a scalar function. The current implementation exchanges the sign and we have:  </p><p class="formulaDsp">
-<picture><source srcset="form_1559_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>In two space dimensions, the curl is obtained by extending a vector <b>u</b> to <picture><source srcset="form_1567_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u_1, u_2, 0)^T$" src="form_1567.png"/></picture> and a scalar <em>p</em> to <picture><source srcset="form_1568_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0,0,p)^T$" src="form_1568.png"/></picture>. Computing the nonzero components, we obtain the scalar curl of a vector function and the vector curl of a scalar function. The current implementation exchanges the sign and we have:  </p><p class="formulaDsp">
+<picture><source srcset="form_1569_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \nabla \times \mathbf u = \partial_1 u_2 - \partial_2 u_1,
  \qquad
  \nabla \times p = \begin{pmatrix}
    \partial_2 p \\ -\partial_1 p
  \end{pmatrix}
-\]" src="form_1559.png"/></picture>
+\]" src="form_1569.png"/></picture>
 </p>
  </div><h2 class="groupheader">Function Documentation</h2>
 <a id="ae65eb4a1e8068fd4ac5706d9898d10b1" name="ae65eb4a1e8068fd4ac5706d9898d10b1"></a>
@@ -161,7 +161,7 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>h2</em></span>&#href_anchor"memdoc">
 <p>Auxiliary function. Given the tensors of <code>dim</code> second derivatives, compute the curl of the curl of a vector function. The result in two and three dimensions is:  </p><p class="formulaDsp">
-<picture><source srcset="form_1560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1570_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \nabla\times\nabla\times \mathbf u = \begin{pmatrix}
 \partial_1\partial_2 u_2 - \partial_2^2 u_1 \\
 \partial_1\partial_2 u_1 - \partial_1^2 u_2
@@ -175,7 +175,7 @@
 \partial_3\partial_1 u_1 + \partial_3\partial_2 u_2
 - (\partial_1^2+\partial_2^2) u_3
 \end{pmatrix}
-\]" src="form_1560.png"/></picture>
+\]" src="form_1570.png"/></picture>
 </p>
 <dl class="section note"><dt>Note</dt><dd>The third tensor argument is not used in two dimensions and can for instance duplicate one of the previous. </dd></dl>
 
@@ -211,9 +211,9 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 1, dim &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>normal</em></span>&#href_anchor"memdoc">
 <p>Auxiliary function. Given <code>dim</code> tensors of first derivatives and a normal vector, compute the tangential curl  </p><p class="formulaDsp">
-<picture><source srcset="form_1561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1571_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf n \times \nabla \times u.
-\]" src="form_1561.png"/></picture>
+\]" src="form_1571.png"/></picture>
 </p>
 <dl class="section note"><dt>Note</dt><dd>The third tensor argument is not used in two dimensions and can for instance duplicate one of the previous. </dd></dl>
 
@@ -244,10 +244,10 @@
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>The curl-curl operator  </p><p class="formulaDsp">
-<picture><source srcset="form_1562_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1572_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_Z \nabla\times u \cdot
 \nabla \times v \,dx
-\]" src="form_1562.png"/></picture>
+\]" src="form_1572.png"/></picture>
 </p>
 <p> in weak form. </p>
 
@@ -283,9 +283,9 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>The matrix for the curl operator  </p><p class="formulaDsp">
-<picture><source srcset="form_1563_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1573_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_Z \nabla \times u \cdot v \,dx.
-\]" src="form_1563.png"/></picture>
+\]" src="form_1573.png"/></picture>
 </p>
 <p>This is the standard curl operator in 3d and the scalar curl in 2d. The vector curl operator can be obtained by exchanging test and trial functions. </p>
 
@@ -327,14 +327,14 @@
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>The matrix for weak boundary condition of Nitsche type for the tangential component in <a class="el" href="namespaceLocalIntegrators_1_1Maxwell.html" title="Local integrators related to curl operators and their traces.">Maxwell</a> systems.</p>
 <p class="formulaDsp">
-<picture><source srcset="form_1564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1574_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F \biggl( 2\gamma
 (u\times n) (v\times n) -
 (u\times n)(\nu \nabla\times
 v) - (v\times
 n)(\nu \nabla\times u)
 \biggr)
-\]" src="form_1564.png"/></picture>
+\]" src="form_1574.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="maxwell_8h_source.html#href_anchor">265</a> of file <a class="el" href="maxwell_8h_source.html">maxwell.h</a>.</p>
@@ -364,10 +364,10 @@
           <td></td>
           <td class="paramtype">double</td>          <td class="paramname"><span class="paramname"><em>factor</em><span class="paramdefsep"> = </span><span class="paramdefval">1.</span></span>&#href_anchor"memdoc">
 <p>The product of two tangential traces,  </p><p class="formulaDsp">
-<picture><source srcset="form_1566_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1575_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F (u\times n)(v\times n)
 \, ds.
-\]" src="form_1566.png"/></picture>
+\]" src="form_1575.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="maxwell_8h_source.html#href_anchor">328</a> of file <a class="el" href="maxwell_8h_source.html">maxwell.h</a>.</p>
@@ -435,14 +435,14 @@
 </div><div class="memdoc">
 <p>The interior penalty fluxes for <a class="el" href="namespaceLocalIntegrators_1_1Maxwell.html" title="Local integrators related to curl operators and their traces.">Maxwell</a> systems.</p>
 <p class="formulaDsp">
-<picture><source srcset="form_1567_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1576_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_F \biggl( \gamma
 \{u\times n\}\{v\times n\} -
 \{u\times n\}\{\nu \nabla\times
 v\}- \{v\times
 n\}\{\nu \nabla\times u\}
 \biggr)\;dx
-\]" src="form_1567.png"/></picture>
+\]" src="form_1576.png"/></picture>
 </p>
  
 <p class="definition">Definition at line <a class="el" href="maxwell_8h_source.html#href_anchor">385</a> of file <a class="el" href="maxwell_8h_source.html">maxwell.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceMatrixCreator.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceMatrixCreator.html	2024-03-17 21:57:42.575228938 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceMatrixCreator.html	2024-03-17 21:57:42.579228963 +0000
@@ -150,7 +150,7 @@
 <p>At present there are functions to create the following matrices: </p><ul>
 <li>
 <p class="startli"><code>create_mass_matrix:</code> create the matrix with entries <picture><source srcset="form_2206_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_{ij} =
-\int_\Omega \phi_i(x) \phi_j(x) dx$" src="form_2206.png"/></picture> by numerical quadrature. Here, the <picture><source srcset="form_1012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i$" src="form_1012.png"/></picture> are the basis functions of the finite element space given.</p>
+\int_\Omega \phi_i(x) \phi_j(x) dx$" src="form_2206.png"/></picture> by numerical quadrature. Here, the <picture><source srcset="form_966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i$" src="form_966.png"/></picture> are the basis functions of the finite element space given.</p>
 <p class="interli">A coefficient may be given to evaluate <picture><source srcset="form_2207_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_{ij} = \int_\Omega a(x) \phi_i(x)
 \phi_j(x) dx$" src="form_2207.png"/></picture> instead.</p>
 <p class="endli"></p>
@@ -167,7 +167,7 @@
 <p>If the finite element for which the mass matrix or the Laplace matrix is to be built has more than one component, the functions accept a single coefficient as well as a vector valued coefficient function. For the latter case, the number of components must coincide with the number of components of the system finite element.</p>
 <h3>Matrices on the boundary</h3>
 <p>The <a class="el" href="#href_anchor">create_boundary_mass_matrix()</a> creates the matrix with entries <picture><source srcset="form_2210_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_{ij} =
-\int_{\Gamma} \phi_i \phi_j dx$" src="form_2210.png"/></picture>, where <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is the union of boundary parts with indicators contained in a std::map&lt;<a class="el" href="namespacetypes.html#href_anchor">types::boundary_id</a>, const Function&lt;spacedim,number&gt;*&gt; passed to the function (i.e. if you want to set up the mass matrix for the parts of the boundary with indicators zero and 2, you pass the function a map with key type <a class="el" href="namespacetypes.html#href_anchor">types::boundary_id</a> as the parameter <code>boundary_functions</code> containing the keys zero and 2). The size of the matrix is equal to the number of degrees of freedom that have support on the boundary, i.e. it is <em>not</em> a matrix on all degrees of freedom, but only a subset. (The <picture><source srcset="form_1012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i$" src="form_1012.png"/></picture> in the formula are the subset of basis functions which have at least part of their support on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>.) In order to determine which shape functions are to be considered, and in order to determine in which order, the function takes a <code>dof_to_boundary_mapping</code>; this object maps global DoF numbers to a numbering of the degrees of freedom located on the boundary, and can be obtained using the function <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::map_dof_to_boundary_indices()</a>.</p>
+\int_{\Gamma} \phi_i \phi_j dx$" src="form_2210.png"/></picture>, where <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is the union of boundary parts with indicators contained in a std::map&lt;<a class="el" href="namespacetypes.html#href_anchor">types::boundary_id</a>, const Function&lt;spacedim,number&gt;*&gt; passed to the function (i.e. if you want to set up the mass matrix for the parts of the boundary with indicators zero and 2, you pass the function a map with key type <a class="el" href="namespacetypes.html#href_anchor">types::boundary_id</a> as the parameter <code>boundary_functions</code> containing the keys zero and 2). The size of the matrix is equal to the number of degrees of freedom that have support on the boundary, i.e. it is <em>not</em> a matrix on all degrees of freedom, but only a subset. (The <picture><source srcset="form_966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i$" src="form_966.png"/></picture> in the formula are the subset of basis functions which have at least part of their support on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>.) In order to determine which shape functions are to be considered, and in order to determine in which order, the function takes a <code>dof_to_boundary_mapping</code>; this object maps global DoF numbers to a numbering of the degrees of freedom located on the boundary, and can be obtained using the function <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::map_dof_to_boundary_indices()</a>.</p>
 <p>In order to work, the function needs a matrix of the correct size, built on top of a corresponding sparsity pattern. Since we only work on a subset of the degrees of freedom, we can't use the matrices and sparsity patterns that are created for the entire set of degrees of freedom. Rather, you should use the DoFHandler::make_boundary_sparsity_pattern() function to create the correct sparsity pattern, and build a matrix on top of it.</p>
 <p>Note that at present there is no function that computes the mass matrix for <em>all</em> shape functions, though such a function would be trivial to implement.</p>
 <h3>Right hand sides</h3>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceNonMatching.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceNonMatching.html	2024-03-17 21:57:42.611229160 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceNonMatching.html	2024-03-17 21:57:42.619229209 +0000
@@ -162,8 +162,8 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Type describing how a cell or a face is located relative to the zero contour of a level set function, <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_517.png"/></picture>. The values of the type correspond to:</p>
-<p>inside if <picture><source srcset="form_2048_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x) &lt; 0$" src="form_2048.png"/></picture>, outside if <picture><source srcset="form_2049_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x) &gt; 0$" src="form_2049.png"/></picture>, intersected if <picture><source srcset="form_2050_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x)$" src="form_2050.png"/></picture> varies in sign,</p>
+<p>Type describing how a cell or a face is located relative to the zero contour of a level set function, <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_526.png"/></picture>. The values of the type correspond to:</p>
+<p>inside if <picture><source srcset="form_2059_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x) &lt; 0$" src="form_2059.png"/></picture>, outside if <picture><source srcset="form_2060_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x) &gt; 0$" src="form_2060.png"/></picture>, intersected if <picture><source srcset="form_2061_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x)$" src="form_2061.png"/></picture> varies in sign,</p>
 <p>over the cell/face. The value "unassigned" is used to describe that the location of a cell/face has not yet been determined. </p>
 <table class="fieldtable">
 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a1bfa77fdc53dc7bf833ff01c4f7967daa335cf4508dd597be4bfc9caa3e08b901" name="a1bfa77fdc53dc7bf833ff01c4f7967daa335cf4508dd597be4bfc9caa3e08b901"></a>inside&#160;</td><td class="fielddoc"></td></tr>
@@ -229,17 +229,17 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classAffineConstraints.html">AffineConstraints</a>&lt; number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>immersed_constraints</em><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="classAffineConstraints.html">AffineConstraints</a>&lt;number&gt;()</span></span>&#href_anchor"memdoc">
 <p>Create a coupling sparsity pattern for non-matching, overlapping grids.</p>
-<p>Given two non-matching triangulations, representing the domains <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> and <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>, with <picture><source srcset="form_2010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B \subseteq \Omega$" src="form_2010.png"/></picture>, and two finite element spaces <picture><source srcset="form_2011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega) = \text{span}\{v_i\}_{i=0}^n$" src="form_2011.png"/></picture> and <picture><source srcset="form_2012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q(B) =
-\text{span}\{w_j\}_{j=0}^m$" src="form_2012.png"/></picture>, compute the sparsity pattern that would be necessary to assemble the matrix  </p><p class="formulaDsp">
-<picture><source srcset="form_2013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Given two non-matching triangulations, representing the domains <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> and <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>, with <picture><source srcset="form_2009_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B \subseteq \Omega$" src="form_2009.png"/></picture>, and two finite element spaces <picture><source srcset="form_2010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega) = \text{span}\{v_i\}_{i=0}^n$" src="form_2010.png"/></picture> and <picture><source srcset="form_2011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q(B) =
+\text{span}\{w_j\}_{j=0}^m$" src="form_2011.png"/></picture>, compute the sparsity pattern that would be necessary to assemble the matrix  </p><p class="formulaDsp">
+<picture><source srcset="form_2012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 M_{ij} \dealcoloneq \int_{B} v_i(x) w_j(x) dx,
                     \quad i \in [0,n), j \in [0,m),
-\]" src="form_2013.png"/></picture>
+\]" src="form_2012.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2014_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega)$" src="form_2014.png"/></picture> is the finite element space associated with the <code>space_dh</code> passed to this function (or part of it, if specified in <code>space_comps</code>), while <picture><source srcset="form_2015_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q(B)$" src="form_2015.png"/></picture> is the finite element space associated with the <code>immersed_dh</code> passed to this function (or part of it, if specified in <code>immersed_comps</code>).</p>
-<p>The <code>sparsity</code> is filled by locating the position of quadrature points (obtained by the reference quadrature <code>quad</code>) defined on elements of <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> with respect to the embedding triangulation <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>. For each overlapping cell, the entries corresponding to <code>space_comps</code> in <code>space_dh</code> and <code>immersed_comps</code> in <code>immersed_dh</code> are added to the sparsity pattern.</p>
+<p> where <picture><source srcset="form_2013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega)$" src="form_2013.png"/></picture> is the finite element space associated with the <code>space_dh</code> passed to this function (or part of it, if specified in <code>space_comps</code>), while <picture><source srcset="form_2014_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q(B)$" src="form_2014.png"/></picture> is the finite element space associated with the <code>immersed_dh</code> passed to this function (or part of it, if specified in <code>immersed_comps</code>).</p>
+<p>The <code>sparsity</code> is filled by locating the position of quadrature points (obtained by the reference quadrature <code>quad</code>) defined on elements of <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> with respect to the embedding triangulation <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>. For each overlapping cell, the entries corresponding to <code>space_comps</code> in <code>space_dh</code> and <code>immersed_comps</code> in <code>immersed_dh</code> are added to the sparsity pattern.</p>
 <p>The <code>space_comps</code> and <code>immersed_comps</code> masks are assumed to be ordered in the same way: the first component of <code>space_comps</code> will couple with the first component of <code>immersed_comps</code>, the second with the second, and so on. If one of the two masks has more non-zero than the other, then the excess components will be ignored.</p>
-<p>If the domain <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> does not fall within <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, an exception will be thrown by the algorithm that computes the quadrature point locations. In particular, notice that this function only makes sens for <code>dim1</code> lower or equal than <code>dim0</code>. A static assert guards that this is actually the case.</p>
+<p>If the domain <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> does not fall within <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, an exception will be thrown by the algorithm that computes the quadrature point locations. In particular, notice that this function only makes sens for <code>dim1</code> lower or equal than <code>dim0</code>. A static assert guards that this is actually the case.</p>
 <p>For both spaces, it is possible to specify a custom <a class="el" href="classMapping.html" title="Abstract base class for mapping classes.">Mapping</a>, which defaults to <a class="el" href="structStaticMappingQ1.html">StaticMappingQ1</a> for both.</p>
 <p>This function will also work in parallel, provided that the immersed triangulation is of type parallel::shared::Triangulation&lt;dim1,spacedim&gt;. An exception is thrown if you use an immersed parallel::distributed::Triangulation&lt;dim1,spacedim&gt;.</p>
 <p>See the tutorial program <a class="el" href="step_60.html">step-60</a> for an example on how to use this function. </p>
@@ -357,17 +357,17 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classAffineConstraints.html">AffineConstraints</a>&lt; typename Matrix::value_type &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>immersed_constraints</em><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="classAffineConstraints.html">AffineConstraints</a>&lt;typename&#href_anchor"memdoc">
 <p>Create a coupling <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> for non-matching, overlapping grids.</p>
-<p>Given two non-matching triangulations, representing the domains <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> and <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>, with <picture><source srcset="form_2010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B \subseteq \Omega$" src="form_2010.png"/></picture>, and two finite element spaces <picture><source srcset="form_2011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega) = \text{span}\{v_i\}_{i=0}^n$" src="form_2011.png"/></picture> and <picture><source srcset="form_2012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q(B) =
-\text{span}\{w_j\}_{j=0}^m$" src="form_2012.png"/></picture>, compute the coupling matrix  </p><p class="formulaDsp">
-<picture><source srcset="form_2013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Given two non-matching triangulations, representing the domains <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> and <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>, with <picture><source srcset="form_2009_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B \subseteq \Omega$" src="form_2009.png"/></picture>, and two finite element spaces <picture><source srcset="form_2010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega) = \text{span}\{v_i\}_{i=0}^n$" src="form_2010.png"/></picture> and <picture><source srcset="form_2011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q(B) =
+\text{span}\{w_j\}_{j=0}^m$" src="form_2011.png"/></picture>, compute the coupling matrix  </p><p class="formulaDsp">
+<picture><source srcset="form_2012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 M_{ij} \dealcoloneq \int_{B} v_i(x) w_j(x) dx,
                     \quad i \in [0,n), j \in [0,m),
-\]" src="form_2013.png"/></picture>
+\]" src="form_2012.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2014_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega)$" src="form_2014.png"/></picture> is the finite element space associated with the <code>space_dh</code> passed to this function (or part of it, if specified in <code>space_comps</code>), while <picture><source srcset="form_2015_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q(B)$" src="form_2015.png"/></picture> is the finite element space associated with the <code>immersed_dh</code> passed to this function (or part of it, if specified in <code>immersed_comps</code>).</p>
-<p>The corresponding sparsity patterns can be computed by calling the make_coupling_sparsity_pattern function. The elements of the matrix are computed by locating the position of quadrature points defined on elements of <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> with respect to the embedding triangulation <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>.</p>
+<p> where <picture><source srcset="form_2013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega)$" src="form_2013.png"/></picture> is the finite element space associated with the <code>space_dh</code> passed to this function (or part of it, if specified in <code>space_comps</code>), while <picture><source srcset="form_2014_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q(B)$" src="form_2014.png"/></picture> is the finite element space associated with the <code>immersed_dh</code> passed to this function (or part of it, if specified in <code>immersed_comps</code>).</p>
+<p>The corresponding sparsity patterns can be computed by calling the make_coupling_sparsity_pattern function. The elements of the matrix are computed by locating the position of quadrature points defined on elements of <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> with respect to the embedding triangulation <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>.</p>
 <p>The <code>space_comps</code> and <code>immersed_comps</code> masks are assumed to be ordered in the same way: the first component of <code>space_comps</code> will couple with the first component of <code>immersed_comps</code>, the second with the second, and so on. If one of the two masks has more non-zero entries non-zero than the other, then the excess components will be ignored.</p>
-<p>If the domain <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> does not fall within <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, an exception will be thrown by the algorithm that computes the quadrature point locations. In particular, notice that this function only makes sense for <code>dim1</code> lower or equal than <code>dim0</code>. A static assert guards that this is actually the case.</p>
+<p>If the domain <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> does not fall within <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, an exception will be thrown by the algorithm that computes the quadrature point locations. In particular, notice that this function only makes sense for <code>dim1</code> lower or equal than <code>dim0</code>. A static assert guards that this is actually the case.</p>
 <p>For both spaces, it is possible to specify a custom <a class="el" href="classMapping.html" title="Abstract base class for mapping classes.">Mapping</a>, which defaults to <a class="el" href="structStaticMappingQ1.html">StaticMappingQ1</a> for both.</p>
 <p>This function will also work in parallel, provided that the immersed triangulation is of type parallel::shared::Triangulation&lt;dim1,spacedim&gt;. An exception is thrown if you use an immersed parallel::distributed::Triangulation&lt;dim1,spacedim&gt;.</p>
 <p>See the tutorial program <a class="el" href="step_60.html">step-60</a> for an example on how to use this function. </p>
@@ -491,16 +491,16 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classComponentMask.html">ComponentMask</a> &amp;</td>          <td class="paramname"><span class="paramname"><em>comps1</em><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="classComponentMask.html">ComponentMask</a>()</span></span>&#href_anchor"memdoc">
 <p>Create a coupling sparsity pattern for non-matching independent grids, using a convolution kernel with compact support of radius epsilon.</p>
-<p>Given two non-matching triangulations, representing the domains <picture><source srcset="form_2016_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega^0$" src="form_2016.png"/></picture> and <picture><source srcset="form_2017_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega^1$" src="form_2017.png"/></picture>, both embedded in <picture><source srcset="form_2018_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^d$" src="form_2018.png"/></picture>, and two finite element spaces <picture><source srcset="form_2019_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^0(\Omega^0) = \text{span}\{v_i\}_{i=0}^n$" src="form_2019.png"/></picture> and <picture><source srcset="form_2020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^1(\Omega^1) =
-\text{span}\{w_\alpha\}_{\alpha=0}^m$" src="form_2020.png"/></picture>, compute the sparsity pattern that would be necessary to assemble the matrix</p>
+<p>Given two non-matching triangulations, representing the domains <picture><source srcset="form_2015_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega^0$" src="form_2015.png"/></picture> and <picture><source srcset="form_2016_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega^1$" src="form_2016.png"/></picture>, both embedded in <picture><source srcset="form_2017_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^d$" src="form_2017.png"/></picture>, and two finite element spaces <picture><source srcset="form_2018_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^0(\Omega^0) = \text{span}\{v_i\}_{i=0}^n$" src="form_2018.png"/></picture> and <picture><source srcset="form_2019_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^1(\Omega^1) =
+\text{span}\{w_\alpha\}_{\alpha=0}^m$" src="form_2019.png"/></picture>, compute the sparsity pattern that would be necessary to assemble the matrix</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2021_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 M_{i\alpha} \dealcoloneq \int_{\Omega^0} \int_{\Omega^1}
 v_i(x) K^{\epsilon}(x-y) w_\alpha(y) dx \ dy,
 \quad i \in [0,n), \alpha \in [0,m),
-\]" src="form_2021.png"/></picture>
+\]" src="form_2020.png"/></picture>
 </p>
-<p>where <picture><source srcset="form_2022_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^0(\Omega^0)$" src="form_2022.png"/></picture> is the finite element space associated with the <code>dh0</code> passed to this function (or part of it, if specified in <code>comps0</code>), while <picture><source srcset="form_2023_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^1(\Omega^1)$" src="form_2023.png"/></picture> is the finite element space associated with the <code>dh1</code> passed to this function (or part of it, if specified in <code>comps1</code>), and <picture><source srcset="form_2024_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K^\epsilon$" src="form_2024.png"/></picture> is a function derived from CutOffFunctionBase with compact support included in a ball of radius <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1433.png"/></picture>.</p>
+<p>where <picture><source srcset="form_2021_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^0(\Omega^0)$" src="form_2021.png"/></picture> is the finite element space associated with the <code>dh0</code> passed to this function (or part of it, if specified in <code>comps0</code>), while <picture><source srcset="form_2022_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^1(\Omega^1)$" src="form_2022.png"/></picture> is the finite element space associated with the <code>dh1</code> passed to this function (or part of it, if specified in <code>comps1</code>), and <picture><source srcset="form_2023_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K^\epsilon$" src="form_2023.png"/></picture> is a function derived from CutOffFunctionBase with compact support included in a ball of radius <picture><source srcset="form_1435_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1435.png"/></picture>.</p>
 <p>The <code>comps0</code> and <code>comps1</code> masks are assumed to be ordered in the same way: the first component of <code>comps0</code> will couple with the first component of <code>comps1</code>, the second with the second, and so on. If one of the two masks has more active components than the other, then the excess components will be ignored.</p>
 <p>For both spaces, it is possible to specify a custom <a class="el" href="classMapping.html" title="Abstract base class for mapping classes.">Mapping</a>, which defaults to <a class="el" href="structStaticMappingQ1.html">StaticMappingQ1</a> for both.</p>
 <p>This function will also work in parallel, provided that at least one of the triangulations is of type parallel::shared::Triangulation&lt;dim1,spacedim&gt;. An exception is thrown if both triagnulations are of type parallel::distributed::Triangulation&lt;dim1,spacedim&gt;.</p>
@@ -575,15 +575,15 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classComponentMask.html">ComponentMask</a> &amp;</td>          <td class="paramname"><span class="paramname"><em>comps1</em><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="classComponentMask.html">ComponentMask</a>()</span></span>&#href_anchor"memdoc">
 <p>Create a coupling <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> for non-matching independent grids, using a convolution kernel with compact support.</p>
-<p>Given two non-matching triangulations, representing the domains <picture><source srcset="form_2016_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega^0$" src="form_2016.png"/></picture> and <picture><source srcset="form_2017_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega^1$" src="form_2017.png"/></picture>, both embedded in <picture><source srcset="form_2018_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^d$" src="form_2018.png"/></picture>, and two finite element spaces <picture><source srcset="form_2019_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^0(\Omega^0) = \text{span}\{v_i\}_{i=0}^n$" src="form_2019.png"/></picture> and <picture><source srcset="form_2025_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^1(\Omega^1) = \text{span}\{w_\alpha\}_{\alpha=0}^m$" src="form_2025.png"/></picture>, compute the matrix</p>
+<p>Given two non-matching triangulations, representing the domains <picture><source srcset="form_2015_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega^0$" src="form_2015.png"/></picture> and <picture><source srcset="form_2016_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega^1$" src="form_2016.png"/></picture>, both embedded in <picture><source srcset="form_2017_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^d$" src="form_2017.png"/></picture>, and two finite element spaces <picture><source srcset="form_2018_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^0(\Omega^0) = \text{span}\{v_i\}_{i=0}^n$" src="form_2018.png"/></picture> and <picture><source srcset="form_2024_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^1(\Omega^1) = \text{span}\{w_\alpha\}_{\alpha=0}^m$" src="form_2024.png"/></picture>, compute the matrix</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2021_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 M_{i\alpha} \dealcoloneq \int_{\Omega^0} \int_{\Omega^1}
 v_i(x) K^{\epsilon}(x-y) w_\alpha(y) dx \ dy,
 \quad i \in [0,n), \alpha \in [0,m),
-\]" src="form_2021.png"/></picture>
+\]" src="form_2020.png"/></picture>
 </p>
-<p>where <picture><source srcset="form_2022_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^0(\Omega^0)$" src="form_2022.png"/></picture> is the finite element space associated with the <code>dh0</code> passed to this function (or part of it, if specified in <code>comps0</code>), while <picture><source srcset="form_2023_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^1(\Omega^1)$" src="form_2023.png"/></picture> is the finite element space associated with the <code>dh1</code> passed to this function (or part of it, if specified in <code>comps1</code>), and <picture><source srcset="form_2024_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K^\epsilon$" src="form_2024.png"/></picture> is a function derived from CutOffFunctionBase with compact support included in a ball of radius <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1433.png"/></picture>.</p>
+<p>where <picture><source srcset="form_2021_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^0(\Omega^0)$" src="form_2021.png"/></picture> is the finite element space associated with the <code>dh0</code> passed to this function (or part of it, if specified in <code>comps0</code>), while <picture><source srcset="form_2022_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^1(\Omega^1)$" src="form_2022.png"/></picture> is the finite element space associated with the <code>dh1</code> passed to this function (or part of it, if specified in <code>comps1</code>), and <picture><source srcset="form_2023_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K^\epsilon$" src="form_2023.png"/></picture> is a function derived from CutOffFunctionBase with compact support included in a ball of radius <picture><source srcset="form_1435_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1435.png"/></picture>.</p>
 <p>The corresponding sparsity patterns can be computed by calling the make_coupling_sparsity_pattern() function.</p>
 <p>The <code>comps0</code> and <code>comps1</code> masks are assumed to be ordered in the same way: the first component of <code>comps0</code> will couple with the first component of <code>comps1</code>, the second with the second, and so on. If one of the two masks has more active components than the other, then the excess components will be ignored.</p>
 <p>For both spaces, it is possible to specify a custom <a class="el" href="classMapping.html" title="Abstract base class for mapping classes.">Mapping</a>, which defaults to <a class="el" href="structStaticMappingQ1.html">StaticMappingQ1</a> for both.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceNonMatching_1_1internal_1_1QuadratureGeneratorImplementation.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceNonMatching_1_1internal_1_1QuadratureGeneratorImplementation.html	2024-03-17 21:57:42.655229432 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceNonMatching_1_1internal_1_1QuadratureGeneratorImplementation.html	2024-03-17 21:57:42.655229432 +0000
@@ -279,7 +279,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Returns the max/min bounds on the value, taken over all the entries in the incoming vector of <a class="el" href="structNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1FunctionBounds.html">FunctionBounds</a>. That is, given the incoming function bounds, <picture><source srcset="form_2135_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L_j, U_j]$" src="form_2135.png"/></picture>, this function returns <picture><source srcset="form_2136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L, U]$" src="form_2136.png"/></picture>, where <picture><source srcset="form_2137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L = \min_{j} L_j$" src="form_2137.png"/></picture> and <picture><source srcset="form_2138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U = \max_{j} U_j$" src="form_2138.png"/></picture>. </p>
+<p>Returns the max/min bounds on the value, taken over all the entries in the incoming vector of <a class="el" href="structNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1FunctionBounds.html">FunctionBounds</a>. That is, given the incoming function bounds, <picture><source srcset="form_2125_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L_j, U_j]$" src="form_2125.png"/></picture>, this function returns <picture><source srcset="form_2126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L, U]$" src="form_2126.png"/></picture>, where <picture><source srcset="form_2127_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L = \min_{j} L_j$" src="form_2127.png"/></picture> and <picture><source srcset="form_2128_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U = \max_{j} U_j$" src="form_2128.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">201</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
@@ -301,21 +301,21 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Finds the best choice of height function direction, given the <a class="el" href="structNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1FunctionBounds.html">FunctionBounds</a> for a number of functions <picture><source srcset="form_2139_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\psi_j\}_{j=0}^{n-1}$" src="form_2139.png"/></picture>. Here, "best" is meant in the sense of the implicit function theorem.</p>
-<p>Let <picture><source srcset="form_2140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_I$" src="form_2140.png"/></picture> be the index set of the indefinite functions:</p>
-<p><picture><source srcset="form_2141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_I = \{0,..., n - 1\} \setminus \{ j : |\psi_j| &gt; 0 \}$" src="form_2141.png"/></picture>.</p>
-<p>This function converts the incoming bounds to a lower bound, <picture><source srcset="form_2142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_{ij}$" src="form_2142.png"/></picture>, on the absolute value of each component of the gradient:</p>
-<p><picture><source srcset="form_2143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\partial_k \psi_j| &gt; L_{jk}$" src="form_2143.png"/></picture>.</p>
-<p>and then returns a coordinate direction, <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>, and a lower bound <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>, such that</p>
+<p>Finds the best choice of height function direction, given the <a class="el" href="structNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1FunctionBounds.html">FunctionBounds</a> for a number of functions <picture><source srcset="form_2129_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\psi_j\}_{j=0}^{n-1}$" src="form_2129.png"/></picture>. Here, "best" is meant in the sense of the implicit function theorem.</p>
+<p>Let <picture><source srcset="form_2130_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_I$" src="form_2130.png"/></picture> be the index set of the indefinite functions:</p>
+<p><picture><source srcset="form_2131_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_I = \{0,..., n - 1\} \setminus \{ j : |\psi_j| &gt; 0 \}$" src="form_2131.png"/></picture>.</p>
+<p>This function converts the incoming bounds to a lower bound, <picture><source srcset="form_2132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_{ij}$" src="form_2132.png"/></picture>, on the absolute value of each component of the gradient:</p>
+<p><picture><source srcset="form_2133_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\partial_k \psi_j| &gt; L_{jk}$" src="form_2133.png"/></picture>.</p>
+<p>and then returns a coordinate direction, <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>, and a lower bound <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>, such that</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2134_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 i = \arg \max_{k} \min_{j \in J_I} L_{jk}, \\
 L =      \max_{k} \min_{j \in J_I} L_{jk}.
-\]" src="form_2144.png"/></picture>
+\]" src="form_2134.png"/></picture>
 </p>
-<p>This means <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> is a coordinate direction such that all functions intersected by the zero contour (i.e. those belonging to <picture><source srcset="form_2140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_I$" src="form_2140.png"/></picture>) fulfill</p>
-<p><picture><source srcset="form_2145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\partial_i \psi_j| &gt; L$" src="form_2145.png"/></picture>.</p>
-<p>Note that the estimated lower bound, <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>, can be zero or negative. This means that no suitable height function direction exists. If all of the incoming functions are positive or negative definite the returned std::optional is non-set. </p>
+<p>This means <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> is a coordinate direction such that all functions intersected by the zero contour (i.e. those belonging to <picture><source srcset="form_2130_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_I$" src="form_2130.png"/></picture>) fulfill</p>
+<p><picture><source srcset="form_2135_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\partial_i \psi_j| &gt; L$" src="form_2135.png"/></picture>.</p>
+<p>Note that the estimated lower bound, <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>, can be zero or negative. This means that no suitable height function direction exists. If all of the incoming functions are positive or negative definite the returned std::optional is non-set. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">275</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
@@ -386,7 +386,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">std::pair&lt; double, double &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>value_bounds</em></span>&#href_anchor"memdoc">
-<p>Given the incoming lower and upper bounds on the value of a function <picture><source srcset="form_2136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L, U]$" src="form_2136.png"/></picture>, return the minimum/maximum of <picture><source srcset="form_2136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L, U]$" src="form_2136.png"/></picture> and the function values at the vertices. That is, this function returns</p>
+<p>Given the incoming lower and upper bounds on the value of a function <picture><source srcset="form_2126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L, U]$" src="form_2126.png"/></picture>, return the minimum/maximum of <picture><source srcset="form_2126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L, U]$" src="form_2126.png"/></picture> and the function values at the vertices. That is, this function returns</p>
 <p><picture><source srcset="form_2686_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\min(L, L_f), \max(U, U_f)]$" src="form_2686.png"/></picture>,</p>
 <p>where <picture><source srcset="form_2687_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_f = \min_{v} f(x_v)$" src="form_2687.png"/></picture>, <picture><source srcset="form_2688_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_f = \max_{v} f(x_v)|$" src="form_2688.png"/></picture>, and <picture><source srcset="form_2689_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_v$" src="form_2689.png"/></picture> is a vertex.</p>
 <p>It is assumed that the incoming function is scalar valued. </p>
@@ -474,7 +474,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return a lower bound, <picture><source srcset="form_2690_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_a$" src="form_2690.png"/></picture>, on the absolute value of a function, <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_12.png"/></picture>:</p>
+<p>Return a lower bound, <picture><source srcset="form_2690_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_a$" src="form_2690.png"/></picture>, on the absolute value of a function, <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x)$" src="form_9.png"/></picture>:</p>
 <p><picture><source srcset="form_2691_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_a \leq |f(x)|$" src="form_2691.png"/></picture>,</p>
 <p>by estimating it from the incoming lower and upper bounds: <picture><source srcset="form_2692_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L \leq f(x) \leq U$" src="form_2692.png"/></picture>.</p>
 <p>By rewriting the lower and upper bounds as <picture><source srcset="form_2693_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F - C \leq f(x) \leq F + C$" src="form_2693.png"/></picture>, where <picture><source srcset="form_2694_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L = F - C$" src="form_2694.png"/></picture>, <picture><source srcset="form_2695_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U = F + C$" src="form_2695.png"/></picture> (or <picture><source srcset="form_2696_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F = (U + L)/2$" src="form_2696.png"/></picture>, <picture><source srcset="form_2697_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C = (U - L)/2$" src="form_2697.png"/></picture>), we get <picture><source srcset="form_2698_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|f(x) - F| \leq C$" src="form_2698.png"/></picture>. Using the inverse triangle inequality gives <picture><source srcset="form_2699_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|F| - |f(x)| \leq |f(x) - F| \leq C$" src="form_2699.png"/></picture>. Thus, <picture><source srcset="form_2700_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_a = |F| - C$" src="form_2700.png"/></picture>.</p>
@@ -663,7 +663,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1QPartitioning.html">QPartitioning</a>&lt; dim &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>q_partitioning</em></span>&#href_anchor"memdoc">
-<p>Let <picture><source srcset="form_2701_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{ y_0, ..., y_{n+1} \}$" src="form_2701.png"/></picture> be such that <picture><source srcset="form_2702_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[y_0, y_{n+1}]$" src="form_2702.png"/></picture> is the <code>interval</code> and <picture><source srcset="form_2703_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{ y_1, ..., y_n \}$" src="form_2703.png"/></picture> are the <code>roots</code>. In each subinterval, <picture><source srcset="form_2112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[y_i, y_{i+1}]$" src="form_2112.png"/></picture>, distribute point according to the 1D-quadrature rule <picture><source srcset="form_2704_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{(x_q, w_q)\}_q$" src="form_2704.png"/></picture> (<code>quadrature1D</code>). Take the tensor product with the quadrature point <picture><source srcset="form_2705_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x, w)$" src="form_2705.png"/></picture> (<code>point</code>, <code>weight</code>) to create dim-dimensional quadrature points  </p><p class="formulaDsp">
+<p>Let <picture><source srcset="form_2701_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{ y_0, ..., y_{n+1} \}$" src="form_2701.png"/></picture> be such that <picture><source srcset="form_2702_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[y_0, y_{n+1}]$" src="form_2702.png"/></picture> is the <code>interval</code> and <picture><source srcset="form_2703_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{ y_1, ..., y_n \}$" src="form_2703.png"/></picture> are the <code>roots</code>. In each subinterval, <picture><source srcset="form_2103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[y_i, y_{i+1}]$" src="form_2103.png"/></picture>, distribute point according to the 1D-quadrature rule <picture><source srcset="form_2704_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{(x_q, w_q)\}_q$" src="form_2704.png"/></picture> (<code>quadrature1D</code>). Take the tensor product with the quadrature point <picture><source srcset="form_2705_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x, w)$" src="form_2705.png"/></picture> (<code>point</code>, <code>weight</code>) to create dim-dimensional quadrature points  </p><p class="formulaDsp">
 <picture><source srcset="form_2706_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 X_q = x_I \times (y_i + (y_{i+1} - y_i) x_q),
 W_q = w_I (y_{i+1} - y_i) w_q,
@@ -748,7 +748,7 @@
           <td></td>
           <td class="paramtype">const std_cxx17::optional&lt; <a class="el" href="structNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1HeightDirectionData.html">HeightDirectionData</a> &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>height_direction_data</em></span>&#href_anchor"memdoc">
 <p>Return the coordinate direction that the box should be split in, assuming that the box should be split it half.</p>
-<p>If the box is larger in one coordante direction, this direction is returned. If the box have the same extent in all directions, we choose the coordinate direction which is closest to being a height-function direction. That is, the direction <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> that has a least negative estimate of <picture><source srcset="form_2707_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\partial_i \psi_j|$" src="form_2707.png"/></picture>. As a last resort, we choose the direction 0, if <code>height_direction_data</code> non-set. </p>
+<p>If the box is larger in one coordante direction, this direction is returned. If the box have the same extent in all directions, we choose the coordinate direction which is closest to being a height-function direction. That is, the direction <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> that has a least negative estimate of <picture><source srcset="form_2707_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\partial_i \psi_j|$" src="form_2707.png"/></picture>. As a last resort, we choose the direction 0, if <code>height_direction_data</code> non-set. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8cc_source.html#href_anchor">995</a> of file <a class="el" href="quadrature__generator_8cc_source.html">quadrature_generator.cc</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceParticles_1_1Utilities.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceParticles_1_1Utilities.html	2024-03-17 21:57:42.683229605 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceParticles_1_1Utilities.html	2024-03-17 21:57:42.687229629 +0000
@@ -141,21 +141,21 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classComponentMask.html">ComponentMask</a> &amp;</td>          <td class="paramname"><span class="paramname"><em>space_comps</em><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="classComponentMask.html">ComponentMask</a>()</span></span>&#href_anchor"memdoc">
 <p>Create an interpolation sparsity pattern for particles.</p>
-<p>Given a triangulation representing the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, a particle handler of particles in <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, and a scalar finite element space <picture><source srcset="form_2422_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega) = \text{span}\{v_j\}_{j=0}^n$" src="form_2422.png"/></picture>, compute the sparsity pattern that would be necessary to assemble the matrix  </p><p class="formulaDsp">
-<picture><source srcset="form_2423_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Given a triangulation representing the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, a particle handler of particles in <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, and a scalar finite element space <picture><source srcset="form_2423_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega) = \text{span}\{v_j\}_{j=0}^n$" src="form_2423.png"/></picture>, compute the sparsity pattern that would be necessary to assemble the matrix  </p><p class="formulaDsp">
+<picture><source srcset="form_2424_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 M_{i,j} \dealcoloneq v_j(x_i) ,
-\]" src="form_2423.png"/></picture>
+\]" src="form_2424.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2014_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega)$" src="form_2014.png"/></picture> is the finite element space associated with the <code>space_dh</code>, and the index <code>i</code> is given by the particle id whose position is <code>x_i</code>.</p>
+<p> where <picture><source srcset="form_2013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega)$" src="form_2013.png"/></picture> is the finite element space associated with the <code>space_dh</code>, and the index <code>i</code> is given by the particle id whose position is <code>x_i</code>.</p>
 <p>In the case of vector valued finite element spaces, the components on which interpolation must be performed can be selected using a component mask. Only primitive finite element spaces are supported.</p>
 <p>When selecting more than one component, the resulting sparsity will have dimension equal to <code>particle_handler.n_global_particles() * mask.n_selected_components()</code> times <code>space_dh.n_dofs()</code>, and the corresponding matrix entries are given by  </p><p class="formulaDsp">
-<picture><source srcset="form_2424_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2425_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  M_{(i*n_comps+k),j} \dealcoloneq v_j(x_i) \cdot e_{comp_j},
-\]" src="form_2424.png"/></picture>
+\]" src="form_2425.png"/></picture>
 </p>
-<p> where <code>comp_j</code> is the only non zero component of the vector valued basis function <code>v_j</code> (equal to <code>fe.system_to_component_index(j).first</code>), <code>k</code> corresponds to its index within the selected components of the mask, and <picture><source srcset="form_2425_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_{comp_j}$" src="form_2425.png"/></picture> is the unit vector in the direction <code>comp_j</code>.</p>
-<p>The <code>sparsity</code> is filled by locating the position of the particle with index <code>i</code> within the particle handler with respect to the embedding triangulation <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, and coupling it with all the local degrees of freedom specified in the component mask <code>space_comps</code>, following the ordering in which they are selected in the mask <code>space_comps</code>.</p>
-<p>If a particle does not fall within <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, it is ignored, and the corresponding rows of the sparsity will be empty.</p>
+<p> where <code>comp_j</code> is the only non zero component of the vector valued basis function <code>v_j</code> (equal to <code>fe.system_to_component_index(j).first</code>), <code>k</code> corresponds to its index within the selected components of the mask, and <picture><source srcset="form_2426_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_{comp_j}$" src="form_2426.png"/></picture> is the unit vector in the direction <code>comp_j</code>.</p>
+<p>The <code>sparsity</code> is filled by locating the position of the particle with index <code>i</code> within the particle handler with respect to the embedding triangulation <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, and coupling it with all the local degrees of freedom specified in the component mask <code>space_comps</code>, following the ordering in which they are selected in the mask <code>space_comps</code>.</p>
+<p>If a particle does not fall within <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, it is ignored, and the corresponding rows of the sparsity will be empty.</p>
 <p>Constraints of the form supported by the <a class="el" href="classAffineConstraints.html">AffineConstraints</a> class may be supplied with the <code>constraints</code> argument. The method <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::add_entries_local_to_global()</a> is used to fill the final sparsity pattern. </p>
 
 <p class="definition">Definition at line <a class="el" href="particles_2utilities_8cc_source.html#href_anchor">32</a> of file <a class="el" href="particles_2utilities_8cc_source.html">utilities.cc</a>.</p>
@@ -192,21 +192,21 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classComponentMask.html">ComponentMask</a> &amp;</td>          <td class="paramname"><span class="paramname"><em>space_comps</em><span class="paramdefsep"> = </span><span class="paramdefval"><a class="el" href="classComponentMask.html">ComponentMask</a>()</span></span>&#href_anchor"memdoc">
 <p>Create an interpolation matrix for particles.</p>
-<p>Given a triangulation representing the domains <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, a particle handler of particles in <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, and a scalar finite element space <picture><source srcset="form_2422_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega) = \text{span}\{v_j\}_{j=0}^n$" src="form_2422.png"/></picture>, compute the matrix  </p><p class="formulaDsp">
+<p>Given a triangulation representing the domains <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, a particle handler of particles in <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, and a scalar finite element space <picture><source srcset="form_2423_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega) = \text{span}\{v_j\}_{j=0}^n$" src="form_2423.png"/></picture>, compute the matrix  </p><p class="formulaDsp">
 <picture><source srcset="form_2427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 M_{ij} \dealcoloneq v_j(x_i) ,
 \]" src="form_2427.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2014_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega)$" src="form_2014.png"/></picture> is the finite element space associated with the <code>space_dh</code>, and the index <code>i</code> is given by the particle id whose position is <code>x_i</code>.</p>
+<p> where <picture><source srcset="form_2013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega)$" src="form_2013.png"/></picture> is the finite element space associated with the <code>space_dh</code>, and the index <code>i</code> is given by the particle id whose position is <code>x_i</code>.</p>
 <p>In the case of vector valued finite element spaces, the components on which interpolation must be performed can be selected using a component mask. Only primitive finite element spaces are supported.</p>
 <p>When selecting more than one component, the resulting sparsity will have dimension equal to <code>particle_handler.n_global_particles() * mask.n_selected_components()</code> times <code>space_dh.n_dofs()</code>, and the corresponding matrix entries are given by  </p><p class="formulaDsp">
-<picture><source srcset="form_2424_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2425_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  M_{(i*n_comps+k),j} \dealcoloneq v_j(x_i) \cdot e_{comp_j},
-\]" src="form_2424.png"/></picture>
+\]" src="form_2425.png"/></picture>
 </p>
-<p> where <code>comp_j</code> is the only non zero component of the vector valued basis function <code>v_j</code> (equal to <code>fe.system_to_component_index(j).first</code>), <code>k</code> corresponds to its index within the selected components of the mask, and <picture><source srcset="form_2425_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_{comp_j}$" src="form_2425.png"/></picture> is the unit vector in the direction <code>comp_j</code>.</p>
-<p>The matrix is filled by locating the position of the particle with index <code>i</code> within the particle handler with respect to the embedding triangulation <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, and coupling it with all the local degrees of freedom specified in the component mask <code>space_comps</code>, following the ordering in which they are selected in the mask <code>space_comps</code>.</p>
-<p>If a particle does not fall within <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, it is ignored, and the corresponding rows of the matrix will be zero.</p>
+<p> where <code>comp_j</code> is the only non zero component of the vector valued basis function <code>v_j</code> (equal to <code>fe.system_to_component_index(j).first</code>), <code>k</code> corresponds to its index within the selected components of the mask, and <picture><source srcset="form_2426_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_{comp_j}$" src="form_2426.png"/></picture> is the unit vector in the direction <code>comp_j</code>.</p>
+<p>The matrix is filled by locating the position of the particle with index <code>i</code> within the particle handler with respect to the embedding triangulation <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, and coupling it with all the local degrees of freedom specified in the component mask <code>space_comps</code>, following the ordering in which they are selected in the mask <code>space_comps</code>.</p>
+<p>If a particle does not fall within <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, it is ignored, and the corresponding rows of the matrix will be zero.</p>
 <p>Constraints of the form supported by the <a class="el" href="classAffineConstraints.html">AffineConstraints</a> class may be supplied with the <code>constraints</code> argument. The method <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::distribute_local_to_global()</a> is used to distribute the entries of the matrix to respect the given constraints. </p>
 
 <p class="definition">Definition at line <a class="el" href="particles_2utilities_8cc_source.html#href_anchor">114</a> of file <a class="el" href="particles_2utilities_8cc_source.html">utilities.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Elasticity_1_1Kinematics.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Elasticity_1_1Kinematics.html	2024-03-17 21:57:42.715229802 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Elasticity_1_1Kinematics.html	2024-03-17 21:57:42.723229852 +0000
@@ -149,14 +149,14 @@
       </table>
 </div><div class="memdoc">
 <p>Return the deformation gradient tensor, as constructed from the material displacement gradient tensor <code>Grad_u</code>. The result is expressed as  </p><p class="formulaDsp">
-<picture><source srcset="form_2449_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2428_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{F}
    \dealcoloneq \nabla_{0} \boldsymbol{\varphi}
    \left( \mathbf{X} \right)
     =\mathbf{I} + \nabla_{0}\mathbf{u}
-\]" src="form_2449.png"/></picture>
+\]" src="form_2428.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2450_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} = \mathbf{u}\left(\mathbf{X}\right)$" src="form_2450.png"/></picture> is the displacement at position <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture> in the referential configuration. The differential operator <picture><source srcset="form_239_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_{0}$" src="form_239.png"/></picture> is defined as <picture><source srcset="form_251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial}{\partial \mathbf{X}}$" src="form_251.png"/></picture>.</p>
+<p> where <picture><source srcset="form_2429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} = \mathbf{u}\left(\mathbf{X}\right)$" src="form_2429.png"/></picture> is the displacement at position <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture> in the referential configuration. The differential operator <picture><source srcset="form_239_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_{0}$" src="form_239.png"/></picture> is defined as <picture><source srcset="form_251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial}{\partial \mathbf{X}}$" src="form_251.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For a discussion of the background of this function, see P. Wriggers: "Nonlinear finite element methods" (2008), and in particular formula (3.14) on p. 23 (or thereabouts). </dd>
 <dd>
 For a discussion of the background of this function, see G. A. Holzapfel: "Nonlinear solid mechanics. A Continuum Approach for Engineering" (2007), and in particular formula (2.39) on p. 71 (or thereabouts). </dd></dl>
@@ -180,11 +180,11 @@
       </table>
 </div><div class="memdoc">
 <p>Return the isochoric counterpart of the deformation gradient tensor <code>F</code> . The result is expressed as  </p><p class="formulaDsp">
-<picture><source srcset="form_2451_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{F}^{\text{iso}} \dealcoloneq J^{-1/\textrm{dim}} \mathbf{F}
-\]" src="form_2451.png"/></picture>
+\]" src="form_2430.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2452_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J = \text{det}\left(\mathbf{F}\right)$" src="form_2452.png"/></picture>.</p>
+<p> where <picture><source srcset="form_2431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J = \text{det}\left(\mathbf{F}\right)$" src="form_2431.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For a discussion of the background of this function, see P. Wriggers: "Nonlinear finite element methods" (2008), and in particular formula (3.28) on p. 29 (or thereabouts). </dd>
 <dd>
 For a discussion of the background of this function, see G. A. Holzapfel: "Nonlinear solid mechanics. A Continuum Approach for Engineering" (2007), and in particular formula (6.79) on p. 228 (or thereabouts). </dd></dl>
@@ -208,11 +208,11 @@
       </table>
 </div><div class="memdoc">
 <p>Return the volumetric counterpart of the deformation gradient tensor <code>F</code> . The result is expressed as  </p><p class="formulaDsp">
-<picture><source srcset="form_2453_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2432_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{F}^{\text{vol}} \dealcoloneq J^{1/\textrm{dim}} \mathbf{I}
-\]" src="form_2453.png"/></picture>
+\]" src="form_2432.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2452_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J = \text{det}\left(\mathbf{F}\right)$" src="form_2452.png"/></picture>.</p>
+<p> where <picture><source srcset="form_2431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J = \text{det}\left(\mathbf{F}\right)$" src="form_2431.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For a discussion of the background of this function, see P. Wriggers: "Nonlinear finite element methods" (2008), and in particular formula (3.28) on p. 29 (or thereabouts). </dd>
 <dd>
 For a discussion of the background of this function, see G. A. Holzapfel: "Nonlinear solid mechanics. A Continuum Approach for Engineering" (2007), and in particular formula (6.79) on p. 228 (or thereabouts). </dd></dl>
@@ -236,9 +236,9 @@
       </table>
 </div><div class="memdoc">
 <p>Return the symmetric right Cauchy-Green deformation tensor, as constructed from the deformation gradient tensor <code>F</code>. The result is expressed as  </p><p class="formulaDsp">
-<picture><source srcset="form_2454_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{C} \dealcoloneq \mathbf{F}^{T}\cdot\mathbf{F} \, .
-\]" src="form_2454.png"/></picture>
+\]" src="form_2433.png"/></picture>
 </p>
 <dl class="section note"><dt>Note</dt><dd>For a discussion of the background of this function, see P. Wriggers: "Nonlinear finite element methods" (2008), and in particular formula (3.15) on p. 23 (or thereabouts). </dd>
 <dd>
@@ -263,9 +263,9 @@
       </table>
 </div><div class="memdoc">
 <p>Return the symmetric left Cauchy-Green deformation tensor, as constructed from the deformation gradient tensor <code>F</code>. The result is expressed as  </p><p class="formulaDsp">
-<picture><source srcset="form_2455_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2434_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{b} \dealcoloneq \mathbf{F}\cdot\mathbf{F}^{T} \, .
-\]" src="form_2455.png"/></picture>
+\]" src="form_2434.png"/></picture>
 </p>
 <dl class="section note"><dt>Note</dt><dd>For a discussion of the background of this function, see P. Wriggers: "Nonlinear finite element methods" (2008), and in particular formula (3.25) on p. 28 (or thereabouts). </dd>
 <dd>
@@ -290,10 +290,10 @@
       </table>
 </div><div class="memdoc">
 <p>Return the symmetric Green-Lagrange strain tensor, as constructed from the deformation gradient tensor <code>F</code>. The result is expressed as  </p><p class="formulaDsp">
-<picture><source srcset="form_2456_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2435_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{E} \dealcoloneq \frac{1}{2}
  \left[ \mathbf{F}^{T}\cdot\mathbf{F} - \mathbf{I} \right] \, .
-\]" src="form_2456.png"/></picture>
+\]" src="form_2435.png"/></picture>
 </p>
 <dl class="section note"><dt>Note</dt><dd>For a discussion of the background of this function, see P. Wriggers: "Nonlinear finite element methods" (2008), and in particular formula (3.15) on p. 23 (or thereabouts). </dd>
 <dd>
@@ -318,12 +318,12 @@
       </table>
 </div><div class="memdoc">
 <p>Return the symmetric small strain tensor, as constructed from the displacement gradient tensor <code>Grad_u</code>. The result is expressed as  </p><p class="formulaDsp">
-<picture><source srcset="form_2471_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2436_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \boldsymbol{\varepsilon} \dealcoloneq \frac{1}{2}
  \left[ \nabla_{0}\mathbf{u} + [\nabla_{0}\mathbf{u}]^{T} \right] \, .
-\]" src="form_2471.png"/></picture>
+\]" src="form_2436.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} = \mathbf{u}(\mathbf{X})$" src="form_2472.png"/></picture> is the displacement at position <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture> in the referential configuration. The differential operator <picture><source srcset="form_239_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_{0}$" src="form_239.png"/></picture> is defined as <picture><source srcset="form_251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial}{\partial \mathbf{X}}$" src="form_251.png"/></picture>.</p>
+<p> where <picture><source srcset="form_2437_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} = \mathbf{u}(\mathbf{X})$" src="form_2437.png"/></picture> is the displacement at position <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture> in the referential configuration. The differential operator <picture><source srcset="form_239_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_{0}$" src="form_239.png"/></picture> is defined as <picture><source srcset="form_251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial}{\partial \mathbf{X}}$" src="form_251.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For a discussion of the background of this function, see P. Wriggers: "Nonlinear finite element methods" (2008), and in particular formula (3.17) on p. 24 (or thereabouts). </dd></dl>
 
 </div>
@@ -345,10 +345,10 @@
       </table>
 </div><div class="memdoc">
 <p>Return the symmetric Almansi strain tensor, as constructed from the deformation gradient tensor <code>F</code>. The result is expressed as  </p><p class="formulaDsp">
-<picture><source srcset="form_2477_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{e} \dealcoloneq \frac{1}{2} \left[ \mathbf{I}
   - \mathbf{F}^{-T}\cdot\mathbf{F}^{-1} \right] \, .
-\]" src="form_2477.png"/></picture>
+\]" src="form_2438.png"/></picture>
 </p>
 <dl class="section note"><dt>Note</dt><dd>For a discussion of the background of this function, see P. Wriggers: "Nonlinear finite element methods" (2008), and in particular formula (3.35) on p. 30 (or thereabouts). </dd>
 <dd>
@@ -374,9 +374,9 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>dF_dt</em></span>&#href_anchor"memdoc">
 <p>Return the spatial velocity gradient tensor, as constructed from the deformation gradient tensor <code>F</code> and its material time derivative <code>dF_dt</code> (the material velocity gradient). The result is expressed as  </p><p class="formulaDsp">
-<picture><source srcset="form_2478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{l} \dealcoloneq \dot{\mathbf{F}}\cdot\mathbf{F}^{-1} \, .
-\]" src="form_2478.png"/></picture>
+\]" src="form_2439.png"/></picture>
 </p>
 <dl class="section note"><dt>Note</dt><dd>For a discussion of the background of this function, see P. Wriggers: "Nonlinear finite element methods" (2008), and in particular formula (3.47) on p. 32 (or thereabouts). </dd>
 <dd>
@@ -402,15 +402,15 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>dF_dt</em></span>&#href_anchor"memdoc">
 <p>Return the rate of deformation tensor (also known as the rate of strain tensor), as constructed from the deformation gradient tensor <code>F</code> and its material time derivative <code>dF_dt</code> (the material velocity gradient). The result is expressed as  </p><p class="formulaDsp">
-<picture><source srcset="form_2479_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{d} \dealcoloneq \frac{1}{2}
  \left[ \mathbf{l} + \mathbf{l}^{T} \right]
-\]" src="form_2479.png"/></picture>
+\]" src="form_2440.png"/></picture>
 </p>
 <p> where  </p><p class="formulaDsp">
-<picture><source srcset="form_2480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{l} = \dot{\mathbf{F}}\cdot\mathbf{F}^{-1}
-\]" src="form_2480.png"/></picture>
+\]" src="form_2441.png"/></picture>
 </p>
 <p> is the spatial velocity gradient tensor.</p>
 <dl class="section note"><dt>Note</dt><dd>For a discussion of the background of this function, see P. Wriggers: "Nonlinear finite element methods" (2008), and in particular formula (3.49) on p. 32 (or thereabouts). </dd>
@@ -437,15 +437,15 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>dF_dt</em></span>&#href_anchor"memdoc">
 <p>Return the rate of rotation tensor (also known as the vorticity tensor), as constructed from the deformation gradient tensor <code>F</code> and its material time derivative <code>dF_dt</code> (the material velocity gradient). The result is expressed as  </p><p class="formulaDsp">
-<picture><source srcset="form_2481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{w} \dealcoloneq \frac{1}{2}
  \left[ \mathbf{l} - \mathbf{l}^{T} \right]
-\]" src="form_2481.png"/></picture>
+\]" src="form_2442.png"/></picture>
 </p>
 <p> where  </p><p class="formulaDsp">
-<picture><source srcset="form_2480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{l} = \dot{\mathbf{F}}\cdot\mathbf{F}^{-1}
-\]" src="form_2480.png"/></picture>
+\]" src="form_2441.png"/></picture>
 </p>
 <p> is the spatial velocity gradient tensor.</p>
 <dl class="section note"><dt>Note</dt><dd>For a discussion of the background of this function, see G. A. Holzapfel: "Nonlinear solid mechanics. A Continuum Approach for Engineering" (2007), and in particular formula (2.149) on p. 97 (or thereabouts). </dd></dl>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Notation_1_1Kelvin.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Notation_1_1Kelvin.html	2024-03-17 21:57:42.771230148 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Notation_1_1Kelvin.html	2024-03-17 21:57:42.771230148 +0000
@@ -168,8 +168,8 @@
 <tr class="memitem:a8fad001f36f68e9c39ecdbab22c0081d"><td class="memTemplItemLeft" align="right" valign="top">TensorType&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="#href_anchor">to_tensor</a> (const <a class="el" href="classFullMatrix.html">FullMatrix</a>&lt; Number &gt; &amp;vec)</td></tr>
 <tr class="separator:a8fad001f36f68e9c39ecdbab22c0081d"><td class="memSeparator" colspan="2">&#href_anchor"details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>A namespace with functions that assist in the conversion of vectors and tensors to and from a compressed format using <a class="el" href="namespacePhysics_1_1Notation_1_1Kelvin.html" title="A namespace with functions that assist in the conversion of vectors and tensors to and from a compres...">Kelvin</a> notation and weighting. </p>
-<p>Both <a class="el" href="namespacePhysics_1_1Notation_1_1Kelvin.html" title="A namespace with functions that assist in the conversion of vectors and tensors to and from a compres...">Kelvin</a> and Voigt notation adopt the same indexing convention. With specific reference to the spatial dimension 3 case, for a rank-2 symmetric tensor <picture><source srcset="form_2457_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{S}$" src="form_2457.png"/></picture> we enumerate its tensor components  </p><p class="formulaDsp">
-<picture><source srcset="form_2458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Both <a class="el" href="namespacePhysics_1_1Notation_1_1Kelvin.html" title="A namespace with functions that assist in the conversion of vectors and tensors to and from a compres...">Kelvin</a> and Voigt notation adopt the same indexing convention. With specific reference to the spatial dimension 3 case, for a rank-2 symmetric tensor <picture><source srcset="form_2464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{S}$" src="form_2464.png"/></picture> we enumerate its tensor components  </p><p class="formulaDsp">
+<picture><source srcset="form_2465_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf{S} \dealcoloneq \left[ \begin{array}{ccc}
  S_{00}          &amp; S_{01}          &amp; S_{02} \\
  S_{10} = S_{01} &amp; S_{11}          &amp; S_{12} \\
@@ -181,10 +181,10 @@
  sym   &amp; n = 1 &amp; n = 3 \\
  sym   &amp; sym   &amp; n = 2
 \end{array} \right] ,
-\]" src="form_2458.png"/></picture>
+\]" src="form_2465.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> denotes the <a class="el" href="namespacePhysics_1_1Notation_1_1Kelvin.html" title="A namespace with functions that assist in the conversion of vectors and tensors to and from a compres...">Kelvin</a> index for the tensor component, while for a general rank-2 tensor <picture><source srcset="form_2459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}$" src="form_2459.png"/></picture>  </p><p class="formulaDsp">
-<picture><source srcset="form_2460_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> denotes the <a class="el" href="namespacePhysics_1_1Notation_1_1Kelvin.html" title="A namespace with functions that assist in the conversion of vectors and tensors to and from a compres...">Kelvin</a> index for the tensor component, while for a general rank-2 tensor <picture><source srcset="form_2466_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}$" src="form_2466.png"/></picture>  </p><p class="formulaDsp">
+<picture><source srcset="form_2467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf{T} \dealcoloneq \left[ \begin{array}{ccc}
  T_{00} &amp; T_{01} &amp; T_{02} \\
  T_{10} &amp; T_{11} &amp; T_{12} \\
@@ -196,10 +196,10 @@
  n = 6 &amp; n = 1 &amp; n = 3 \\
  n = 7 &amp; n = 8 &amp; n = 2
 \end{array}\right] ,
-\]" src="form_2460.png"/></picture>
+\]" src="form_2467.png"/></picture>
 </p>
-<p> and for a rank-1 tensor <picture><source srcset="form_2461_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}$" src="form_2461.png"/></picture>  </p><p class="formulaDsp">
-<picture><source srcset="form_2462_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> and for a rank-1 tensor <picture><source srcset="form_2468_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}$" src="form_2468.png"/></picture>  </p><p class="formulaDsp">
+<picture><source srcset="form_2469_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf{v} \dealcoloneq \left[ \begin{array}{c}
  v_{0} \\ v_{1} \\ v_{2}
 \end{array}\right]
@@ -207,7 +207,7 @@
 \left[ \begin{array}{c}
  n = 0 \\ n = 1 \\ n = 2
 \end{array}\right] .
-\]" src="form_2462.png"/></picture>
+\]" src="form_2469.png"/></picture>
 </p>
 <p> To summarize, the relationship between tensor and <a class="el" href="namespacePhysics_1_1Notation_1_1Kelvin.html" title="A namespace with functions that assist in the conversion of vectors and tensors to and from a compres...">Kelvin</a> indices for both the three-dimensional case and the analogously discerned two-dimensional case outlined in the following table: </p><table class="doxtable">
 <tr>
@@ -249,23 +249,23 @@
 </table>
 </td></tr>
 </table>
-<p>To illustrate the purpose of this notation, consider the rank-2 symmetric tensors <picture><source srcset="form_2457_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{S}$" src="form_2457.png"/></picture> and <picture><source srcset="form_2463_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{E}$" src="form_2463.png"/></picture> that are related to one another by <picture><source srcset="form_2464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{S} = \cal{C} : \mathbf{E}$" src="form_2464.png"/></picture>, where the operator <picture><source srcset="form_2465_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cal{C}$" src="form_2465.png"/></picture> is a fourth-order symmetric tensor. As opposed to the commonly used Voigt notation, <a class="el" href="namespacePhysics_1_1Notation_1_1Kelvin.html" title="A namespace with functions that assist in the conversion of vectors and tensors to and from a compres...">Kelvin</a> (or Mandel) notation keeps the same definition of the inner product <picture><source srcset="form_2466_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{S} : \mathbf{E}$" src="form_2466.png"/></picture> when both <picture><source srcset="form_2457_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{S}$" src="form_2457.png"/></picture> and <picture><source srcset="form_2463_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{E}$" src="form_2463.png"/></picture> are symmetric. In general, the inner product of all symmetric and general tensors remain the same regardless of the notation with which it is represented.</p>
+<p>To illustrate the purpose of this notation, consider the rank-2 symmetric tensors <picture><source srcset="form_2464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{S}$" src="form_2464.png"/></picture> and <picture><source srcset="form_2470_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{E}$" src="form_2470.png"/></picture> that are related to one another by <picture><source srcset="form_2471_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{S} = \cal{C} : \mathbf{E}$" src="form_2471.png"/></picture>, where the operator <picture><source srcset="form_2472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cal{C}$" src="form_2472.png"/></picture> is a fourth-order symmetric tensor. As opposed to the commonly used Voigt notation, <a class="el" href="namespacePhysics_1_1Notation_1_1Kelvin.html" title="A namespace with functions that assist in the conversion of vectors and tensors to and from a compres...">Kelvin</a> (or Mandel) notation keeps the same definition of the inner product <picture><source srcset="form_2473_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{S} : \mathbf{E}$" src="form_2473.png"/></picture> when both <picture><source srcset="form_2464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{S}$" src="form_2464.png"/></picture> and <picture><source srcset="form_2470_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{E}$" src="form_2470.png"/></picture> are symmetric. In general, the inner product of all symmetric and general tensors remain the same regardless of the notation with which it is represented.</p>
 <p>To achieve these two properties, namely that  </p><p class="formulaDsp">
-<picture><source srcset="form_2467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2474_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf{S} = \cal{C} : \mathbf{E}
 \quad \Rightarrow   \quad
 \tilde{\mathbf{S}} = \tilde{\cal{C}} \; \tilde{\mathbf{E}}
-\]" src="form_2467.png"/></picture>
+\]" src="form_2474.png"/></picture>
 </p>
 <p> and  </p><p class="formulaDsp">
-<picture><source srcset="form_2468_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2475_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf{S} : \mathbf{E}
 \, \equiv \,
 \tilde{\mathbf{S}} \cdot \tilde{\mathbf{E}} ,
-\]" src="form_2468.png"/></picture>
+\]" src="form_2475.png"/></picture>
 </p>
-<p> it holds that the Kelvin-condensed equivalents of the previously defined symmetric tensors, indicated by the <picture><source srcset="form_2469_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\left(\bullet\right)}$" src="form_2469.png"/></picture>, must be defined as  </p><p class="formulaDsp">
-<picture><source srcset="form_2470_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> it holds that the Kelvin-condensed equivalents of the previously defined symmetric tensors, indicated by the <picture><source srcset="form_2476_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\left(\bullet\right)}$" src="form_2476.png"/></picture>, must be defined as  </p><p class="formulaDsp">
+<picture><source srcset="form_2477_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \tilde{\mathbf{S}}
   = \left[ \begin{array}{c}
   S_{00} \\ S_{11} \\ S_{22} \\ \sqrt{2} S_{12} \\ \sqrt{2} S_{02} \\
@@ -274,10 +274,10 @@
   = \left[ \begin{array}{c}
   E_{00} \\ E_{11} \\ E_{22} \\ \sqrt{2} E_{12} \\ \sqrt{2} E_{02} \\
 \sqrt{2} E_{01} \end{array}\right] .
-\]" src="form_2470.png"/></picture>
+\]" src="form_2477.png"/></picture>
 </p>
 <p> The corresponding and consistent condensed fourth-order symmetric tensor is  </p><p class="formulaDsp">
-<picture><source srcset="form_2473_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \tilde{\cal{C}}
   = \left[ \begin{array}{cccccc}
   \tilde{\cal{C}}_{00} &amp; \tilde{\cal{C}}_{01} &amp; \tilde{\cal{C}}_{02} &amp;
@@ -312,10 +312,10 @@
 {\cal{C}}_{0201}        \\ \sqrt{2} {\cal{C}}_{0100}  &amp; \sqrt{2}
 {\cal{C}}_{0111} &amp; \sqrt{2} {\cal{C}}_{0122}  &amp; 2 {\cal{C}}_{0112} &amp; 2
 {\cal{C}}_{0102}         &amp; 2 {\cal{C}}_{0101} \end{array}\right] .
-\]" src="form_2473.png"/></picture>
+\]" src="form_2478.png"/></picture>
 </p>
-<p> The mapping from the two <a class="el" href="namespacePhysics_1_1Notation_1_1Kelvin.html" title="A namespace with functions that assist in the conversion of vectors and tensors to and from a compres...">Kelvin</a> indices of the <a class="el" href="classFullMatrix.html">FullMatrix</a> <picture><source srcset="form_2474_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\cal{C}}$" src="form_2474.png"/></picture> to the rank-4 <a class="el" href="classSymmetricTensor.html">SymmetricTensor</a> <picture><source srcset="form_2465_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cal{C}$" src="form_2465.png"/></picture> can be inferred using the table shown above.</p>
-<p>An important observation is that both the left-hand side tensor <picture><source srcset="form_2475_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\mathbf{S}}$" src="form_2475.png"/></picture> and right-hand side tensor <picture><source srcset="form_2476_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\mathbf{E}}$" src="form_2476.png"/></picture> have the same form; this is a property that is not present in Voigt notation. The various factors introduced into <picture><source srcset="form_2475_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\mathbf{S}}$" src="form_2475.png"/></picture>, <picture><source srcset="form_2476_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\mathbf{E}}$" src="form_2476.png"/></picture> and <picture><source srcset="form_2474_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\cal{C}}$" src="form_2474.png"/></picture> account for the symmetry of the tensors. The <a class="el" href="namespacePhysics_1_1Notation_1_1Kelvin.html" title="A namespace with functions that assist in the conversion of vectors and tensors to and from a compres...">Kelvin</a> description of their non-symmetric counterparts include no such factors.</p>
+<p> The mapping from the two <a class="el" href="namespacePhysics_1_1Notation_1_1Kelvin.html" title="A namespace with functions that assist in the conversion of vectors and tensors to and from a compres...">Kelvin</a> indices of the <a class="el" href="classFullMatrix.html">FullMatrix</a> <picture><source srcset="form_2479_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\cal{C}}$" src="form_2479.png"/></picture> to the rank-4 <a class="el" href="classSymmetricTensor.html">SymmetricTensor</a> <picture><source srcset="form_2472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cal{C}$" src="form_2472.png"/></picture> can be inferred using the table shown above.</p>
+<p>An important observation is that both the left-hand side tensor <picture><source srcset="form_2480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\mathbf{S}}$" src="form_2480.png"/></picture> and right-hand side tensor <picture><source srcset="form_2481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\mathbf{E}}$" src="form_2481.png"/></picture> have the same form; this is a property that is not present in Voigt notation. The various factors introduced into <picture><source srcset="form_2480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\mathbf{S}}$" src="form_2480.png"/></picture>, <picture><source srcset="form_2481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\mathbf{E}}$" src="form_2481.png"/></picture> and <picture><source srcset="form_2479_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\cal{C}}$" src="form_2479.png"/></picture> account for the symmetry of the tensors. The <a class="el" href="namespacePhysics_1_1Notation_1_1Kelvin.html" title="A namespace with functions that assist in the conversion of vectors and tensors to and from a compres...">Kelvin</a> description of their non-symmetric counterparts include no such factors.</p>
 <p>Some useful references that show how this notation works include, amongst others, </p><div class="fragment"><div class="line">@article{Nagel2016,</div>
 <div class="line">  author  = {Nagel, T. and G{\&quot;o}rke, U-J. and Moerman, K. and Kolditz,</div>
 <div class="line">             O.},</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations.html	2024-03-17 21:57:42.795230296 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations.html	2024-03-17 21:57:42.803230346 +0000
@@ -123,7 +123,7 @@
 <tr class="separator:a423a5e61f23f89c08bb6ee7d7cb63cac"><td class="memSeparator" colspan="2">&#href_anchor"details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>A collection of operations to assist in the transformation of tensor quantities from the reference to spatial configuration, and vice versa. These types of transformation are typically used to re-express quantities measured or computed in one configuration in terms of a second configuration.</p>
 <h3><a class="el" href="namespacePhysics_1_1Notation.html">Notation</a></h3>
-<p>We will use the same notation for the coordinates <picture><source srcset="form_238_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}, \mathbf{x}$" src="form_238.png"/></picture>, transformations <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>, differential operator <picture><source srcset="form_239_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_{0}$" src="form_239.png"/></picture> and deformation gradient <picture><source srcset="form_240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{F}$" src="form_240.png"/></picture> as discussed for namespace <a class="el" href="namespacePhysics_1_1Elasticity.html">Physics::Elasticity</a>.</p>
+<p>We will use the same notation for the coordinates <picture><source srcset="form_238_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}, \mathbf{x}$" src="form_238.png"/></picture>, transformations <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>, differential operator <picture><source srcset="form_239_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_{0}$" src="form_239.png"/></picture> and deformation gradient <picture><source srcset="form_240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{F}$" src="form_240.png"/></picture> as discussed for namespace <a class="el" href="namespacePhysics_1_1Elasticity.html">Physics::Elasticity</a>.</p>
 <p>As a further point on notation, we will follow Holzapfel (2007) and denote the push forward transformation as <picture><source srcset="form_241_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left(\bullet\right)$" src="form_241.png"/></picture> and the pull back transformation as <picture><source srcset="form_242_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi^{-1}\left(\bullet\right)$" src="form_242.png"/></picture>. We will also use the annotation <picture><source srcset="form_243_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(\bullet\right)^{\sharp}$" src="form_243.png"/></picture> to indicate that a tensor <picture><source srcset="form_244_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(\bullet\right)$" src="form_244.png"/></picture> is a contravariant tensor, and <picture><source srcset="form_245_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(\bullet\right)^{\flat}$" src="form_245.png"/></picture> that it is covariant. In other words, these indices do not actually change the tensor, they just indicate the <em>kind</em> of object a particular tensor is.</p>
 <dl class="section note"><dt>Note</dt><dd>For these transformations, unless otherwise stated, we will strictly assume that all indices of the transformed tensors derive from one coordinate system; that is to say that they are not multi-point tensors (such as the <a class="el" href="namespacePhysics_1_1Transformations_1_1Piola.html">Piola</a> stress in elasticity). </dd></dl>
 </div><h2 class="groupheader">Function Documentation</h2>
@@ -186,18 +186,18 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>B</em></span>&#href_anchor"memdoc">
 <p>Return a vector with a changed basis, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2509_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{V}^{\prime} \dealcoloneq \mathbf{B} \cdot \mathbf{V}
-\]" src="form_2509.png"/></picture>
+\]" src="form_2506.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">V</td><td>The vector to be transformed <picture><source srcset="form_1856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{V}$" src="form_1856.png"/></picture> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">B</td><td>The transformation matrix <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_836.png"/></picture> </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">V</td><td>The vector to be transformed <picture><source srcset="form_1826_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{V}$" src="form_1826.png"/></picture> </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">B</td><td>The transformation matrix <picture><source srcset="form_830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_830.png"/></picture> </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{V}^{\prime}$" src="form_2510.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2507_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{V}^{\prime}$" src="form_2507.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -219,19 +219,19 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>B</em></span>&#href_anchor"memdoc">
 <p>Return a rank-2 tensor with a changed basis, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{T}^{\prime} \dealcoloneq \mathbf{B} \cdot \mathbf{T} \cdot
 \mathbf{B}^{T}
-\]" src="form_2511.png"/></picture>
+\]" src="form_2508.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">T</td><td>The tensor to be transformed <picture><source srcset="form_2459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}$" src="form_2459.png"/></picture> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">B</td><td>The transformation matrix <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_836.png"/></picture> </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">T</td><td>The tensor to be transformed <picture><source srcset="form_2466_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}$" src="form_2466.png"/></picture> </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">B</td><td>The transformation matrix <picture><source srcset="form_830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_830.png"/></picture> </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}^{\prime}$" src="form_2512.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2509_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}^{\prime}$" src="form_2509.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -253,19 +253,19 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>B</em></span>&#href_anchor"memdoc">
 <p>Return a symmetric rank-2 tensor with a changed basis, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{T}^{\prime} \dealcoloneq \mathbf{B} \cdot \mathbf{T} \cdot
 \mathbf{B}^{T}
-\]" src="form_2511.png"/></picture>
+\]" src="form_2508.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">T</td><td>The tensor to be transformed <picture><source srcset="form_2459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}$" src="form_2459.png"/></picture> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">B</td><td>The transformation matrix <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_836.png"/></picture> </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">T</td><td>The tensor to be transformed <picture><source srcset="form_2466_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}$" src="form_2466.png"/></picture> </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">B</td><td>The transformation matrix <picture><source srcset="form_830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_830.png"/></picture> </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}^{\prime}$" src="form_2512.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2509_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}^{\prime}$" src="form_2509.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -287,18 +287,18 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>B</em></span>&#href_anchor"memdoc">
 <p>Return a rank-4 tensor with a changed basis, i.e. (in index notation):  </p><p class="formulaDsp">
-<picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  H_{ijkl}^{\prime} \dealcoloneq B_{iI} B_{jJ} H_{IJKL} B_{kK} B_{lL}
-\]" src="form_2513.png"/></picture>
+\]" src="form_2510.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">H</td><td>The tensor to be transformed <picture><source srcset="form_2459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}$" src="form_2459.png"/></picture> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">B</td><td>The transformation matrix <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_836.png"/></picture> </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">H</td><td>The tensor to be transformed <picture><source srcset="form_2466_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}$" src="form_2466.png"/></picture> </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">B</td><td>The transformation matrix <picture><source srcset="form_830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_830.png"/></picture> </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2514_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}^{\prime}$" src="form_2514.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}^{\prime}$" src="form_2511.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -320,18 +320,18 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>B</em></span>&#href_anchor"memdoc">
 <p>Return a symmetric rank-4 tensor with a changed basis, i.e. (in index notation):  </p><p class="formulaDsp">
-<picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  H_{ijkl}^{\prime} \dealcoloneq B_{iI} B_{jJ} H_{IJKL} B_{kK} B_{lL}
-\]" src="form_2513.png"/></picture>
+\]" src="form_2510.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">H</td><td>The tensor to be transformed <picture><source srcset="form_2459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}$" src="form_2459.png"/></picture> </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">B</td><td>The transformation matrix <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_836.png"/></picture> </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">H</td><td>The tensor to be transformed <picture><source srcset="form_2466_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}$" src="form_2466.png"/></picture> </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">B</td><td>The transformation matrix <picture><source srcset="form_830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{B}$" src="form_830.png"/></picture> </td></tr>
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2514_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}^{\prime}$" src="form_2514.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}^{\prime}$" src="form_2511.png"/></picture> </dd></dl>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Contravariant.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Contravariant.html	2024-03-17 21:57:42.827230494 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Contravariant.html	2024-03-17 21:57:42.835230543 +0000
@@ -149,10 +149,10 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the push forward transformation on a contravariant vector, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2522_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \chi\left(\bullet\right)^{\sharp}
    \dealcoloneq \mathbf{F} \cdot \left(\bullet\right)^{\sharp}
-\]" src="form_2522.png"/></picture>
+\]" src="form_2517.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -162,7 +162,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2523_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{V} \right)$" src="form_2523.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2518_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{V} \right)$" src="form_2518.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -184,11 +184,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the push forward transformation on a rank-2 contravariant tensor, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2524_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \chi\left(\bullet\right)^{\sharp}
    \dealcoloneq \mathbf{F} \cdot \left(\bullet\right)^{\sharp} \cdot
 \mathbf{F}^{T}
-\]" src="form_2524.png"/></picture>
+\]" src="form_2519.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -198,7 +198,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2525_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{T} \right)$" src="form_2525.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{T} \right)$" src="form_2520.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -220,11 +220,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the push forward transformation on a rank-2 contravariant symmetric tensor, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2524_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \chi\left(\bullet\right)^{\sharp}
    \dealcoloneq \mathbf{F} \cdot \left(\bullet\right)^{\sharp} \cdot
 \mathbf{F}^{T}
-\]" src="form_2524.png"/></picture>
+\]" src="form_2519.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -234,7 +234,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2525_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{T} \right)$" src="form_2525.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{T} \right)$" src="form_2520.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -256,11 +256,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the push forward transformation on a rank-4 contravariant tensor, i.e. (in index notation):  </p><p class="formulaDsp">
-<picture><source srcset="form_2526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \left[ \chi\left(\bullet\right)^{\sharp} \right]_{ijkl}
    \dealcoloneq F_{iI} F_{jJ}
    \left(\bullet\right)^{\sharp}_{IJKL} F_{kK} F_{lL}
-\]" src="form_2526.png"/></picture>
+\]" src="form_2521.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -270,7 +270,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2527_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{H} \right)$" src="form_2527.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2522_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{H} \right)$" src="form_2522.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -292,11 +292,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the push forward transformation on a rank-4 contravariant symmetric tensor, i.e. (in index notation):  </p><p class="formulaDsp">
-<picture><source srcset="form_2526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \left[ \chi\left(\bullet\right)^{\sharp} \right]_{ijkl}
    \dealcoloneq F_{iI} F_{jJ}
    \left(\bullet\right)^{\sharp}_{IJKL} F_{kK} F_{lL}
-\]" src="form_2526.png"/></picture>
+\]" src="form_2521.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -306,7 +306,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2527_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{H} \right)$" src="form_2527.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2522_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{H} \right)$" src="form_2522.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -328,10 +328,10 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the pull back transformation on a contravariant vector, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2528_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2523_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \chi^{-1}\left(\bullet\right)^{\sharp}
    \dealcoloneq \mathbf{F}^{-1} \cdot \left(\bullet\right)^{\sharp}
-\]" src="form_2528.png"/></picture>
+\]" src="form_2523.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -341,7 +341,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2529_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi^{-1}\left( \mathbf{v} \right)$" src="form_2529.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2524_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi^{-1}\left( \mathbf{v} \right)$" src="form_2524.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -363,11 +363,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the pull back transformation on a rank-2 contravariant tensor, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2530_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2525_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \chi^{-1}\left(\bullet\right)^{\sharp}
    \dealcoloneq \mathbf{F}^{-1} \cdot \left(\bullet\right)^{\sharp}
    \cdot \mathbf{F}^{-T}
-\]" src="form_2530.png"/></picture>
+\]" src="form_2525.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -377,7 +377,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2531_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi^{-1}\left( \mathbf{t} \right)$" src="form_2531.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi^{-1}\left( \mathbf{t} \right)$" src="form_2526.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -399,11 +399,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the pull back transformation on a rank-2 contravariant symmetric tensor, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2530_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2525_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \chi^{-1}\left(\bullet\right)^{\sharp}
    \dealcoloneq \mathbf{F}^{-1} \cdot \left(\bullet\right)^{\sharp}
    \cdot \mathbf{F}^{-T}
-\]" src="form_2530.png"/></picture>
+\]" src="form_2525.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -413,7 +413,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2531_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi^{-1}\left( \mathbf{t} \right)$" src="form_2531.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi^{-1}\left( \mathbf{t} \right)$" src="form_2526.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -435,11 +435,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the pull back transformation on a rank-4 contravariant tensor, i.e. (in index notation):  </p><p class="formulaDsp">
-<picture><source srcset="form_2532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2527_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \left[ \chi^{-1}\left(\bullet\right)^{\sharp} \right]_{IJKL}
    \dealcoloneq F^{-1}_{Ii} F^{-1}_{Jj}
 \left(\bullet\right)^{\sharp}_{ijkl} F^{-1}_{Kk} F^{-1}_{Ll}
-\]" src="form_2532.png"/></picture>
+\]" src="form_2527.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -449,7 +449,7 @@
   </table>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Covariant.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Covariant.html	2024-03-17 21:57:42.859230692 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Covariant.html	2024-03-17 21:57:42.867230741 +0000
@@ -149,10 +149,10 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the push forward transformation on a covariant vector, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2535_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2530_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \chi\left(\bullet\right)^{\flat}
    \dealcoloneq \mathbf{F}^{-T} \cdot \left(\bullet\right)^{\flat}
-\]" src="form_2535.png"/></picture>
+\]" src="form_2530.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -162,7 +162,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2523_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{V} \right)$" src="form_2523.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2518_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{V} \right)$" src="form_2518.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -184,11 +184,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the push forward transformation on a rank-2 covariant tensor, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2536_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2531_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \chi\left(\bullet\right)^{\flat}
    \dealcoloneq \mathbf{F}^{-T} \cdot \left(\bullet\right)^{\flat}
    \cdot \mathbf{F}^{-1}
-\]" src="form_2536.png"/></picture>
+\]" src="form_2531.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -198,7 +198,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2525_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{T} \right)$" src="form_2525.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{T} \right)$" src="form_2520.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -220,11 +220,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the push forward transformation on a rank-2 covariant symmetric tensor, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2536_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2531_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \chi\left(\bullet\right)^{\flat}
    \dealcoloneq \mathbf{F}^{-T} \cdot \left(\bullet\right)^{\flat}
    \cdot \mathbf{F}^{-1}
-\]" src="form_2536.png"/></picture>
+\]" src="form_2531.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -234,7 +234,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2525_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{T} \right)$" src="form_2525.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{T} \right)$" src="form_2520.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -256,11 +256,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the push forward transformation on a rank-4 covariant tensor, i.e. (in index notation):  </p><p class="formulaDsp">
-<picture><source srcset="form_2537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \left[ \chi\left(\bullet\right)^{\flat} \right]_{ijkl}
    \dealcoloneq F^{-T}_{iI} F^{-T}_{jJ}
    \left(\bullet\right)^{\flat}_{IJKL} F^{-T}_{kK} F^{-T}_{lL}
-\]" src="form_2537.png"/></picture>
+\]" src="form_2532.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -270,7 +270,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2527_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{H} \right)$" src="form_2527.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2522_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{H} \right)$" src="form_2522.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -292,11 +292,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the push forward transformation on a rank-4 covariant symmetric tensor, i.e. (in index notation):  </p><p class="formulaDsp">
-<picture><source srcset="form_2537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \left[ \chi\left(\bullet\right)^{\flat} \right]_{ijkl}
    \dealcoloneq F^{-T}_{iI} F^{-T}_{jJ}
    \left(\bullet\right)^{\flat}_{IJKL} F^{-T}_{kK} F^{-T}_{lL}
-\]" src="form_2537.png"/></picture>
+\]" src="form_2532.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -306,7 +306,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2527_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{H} \right)$" src="form_2527.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2522_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi\left( \mathbf{H} \right)$" src="form_2522.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -328,10 +328,10 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the pull back transformation on a covariant vector, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \chi^{-1}\left(\bullet\right)^{\flat}
    \dealcoloneq \mathbf{F}^{T} \cdot \left(\bullet\right)^{\flat}
-\]" src="form_2538.png"/></picture>
+\]" src="form_2533.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -341,7 +341,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2529_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi^{-1}\left( \mathbf{v} \right)$" src="form_2529.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2524_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi^{-1}\left( \mathbf{v} \right)$" src="form_2524.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -363,11 +363,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the pull back transformation on a rank-2 covariant tensor, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2539_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2534_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \chi^{-1}\left(\bullet\right)^{\flat}
    \dealcoloneq \mathbf{F}^{T} \cdot \left(\bullet\right)^{\flat} \cdot
 \mathbf{F}
-\]" src="form_2539.png"/></picture>
+\]" src="form_2534.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -377,7 +377,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2531_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi^{-1}\left( \mathbf{t} \right)$" src="form_2531.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi^{-1}\left( \mathbf{t} \right)$" src="form_2526.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -399,11 +399,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the pull back transformation on a rank-2 covariant symmetric tensor, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2540_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2535_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \chi^{-1}\left(\bullet\right)^{\flat}
    \dealcoloneq \mathbf{F}^{T} \cdot \left(\bullet\right)^{\flat}
    \cdot \mathbf{F}
-\]" src="form_2540.png"/></picture>
+\]" src="form_2535.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -413,7 +413,7 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2531_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi^{-1}\left( \mathbf{t} \right)$" src="form_2531.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi^{-1}\left( \mathbf{t} \right)$" src="form_2526.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -435,11 +435,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the pull back transformation on a rank-4 contravariant tensor, i.e. (in index notation):  </p><p class="formulaDsp">
-<picture><source srcset="form_2541_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2536_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \left[ \chi^{-1}\left(\bullet\right)^{\flat} \right]_{IJKL}
  \dealcoloneq F^{T}_{Ii} F^{T}_{Jj}
  \left(\bullet\right)^{\flat}_{ijkl} F^{T}_{Kk} F^{T}_{Ll}
-\]" src="form_2541.png"/></picture>
+\]" src="form_2536.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -449,7 +449,7 @@
   </table>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Piola.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Piola.html	2024-03-17 21:57:42.895230914 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Piola.html	2024-03-17 21:57:42.899230939 +0000
@@ -140,11 +140,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the push forward transformation on a contravariant vector, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2542_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \textrm{det} \mathbf{F}^{-1} \; \chi\left(\bullet\right)^{\sharp}
  \dealcoloneq \frac{1}{\textrm{det} \mathbf{F}} \; \mathbf{F} \cdot
  \left(\bullet\right)^{\sharp}
-\]" src="form_2542.png"/></picture>
+\]" src="form_2537.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -154,8 +154,8 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2543_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{1}{\textrm{det} \mathbf{F}} \; \chi\left(
-\mathbf{V} \right)$" src="form_2543.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{1}{\textrm{det} \mathbf{F}} \; \chi\left(
+\mathbf{V} \right)$" src="form_2538.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -177,11 +177,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the push forward transformation on a rank-2 contravariant tensor, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2544_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2539_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \textrm{det} \mathbf{F}^{-1} \; \chi\left(\bullet\right)^{\sharp}
    \dealcoloneq \frac{1}{\textrm{det} \mathbf{F}} \; \mathbf{F} \cdot
 \left(\bullet\right)^{\sharp} \cdot \mathbf{F}^{T}
-\]" src="form_2544.png"/></picture>
+\]" src="form_2539.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -191,8 +191,8 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2545_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{1}{\textrm{det} \mathbf{F}} \; \chi\left(
-\mathbf{T} \right)$" src="form_2545.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2540_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{1}{\textrm{det} \mathbf{F}} \; \chi\left(
+\mathbf{T} \right)$" src="form_2540.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -214,11 +214,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the push forward transformation on a rank-2 contravariant symmetric tensor, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2544_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2539_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \textrm{det} \mathbf{F}^{-1} \; \chi\left(\bullet\right)^{\sharp}
    \dealcoloneq \frac{1}{\textrm{det} \mathbf{F}} \; \mathbf{F} \cdot
 \left(\bullet\right)^{\sharp} \cdot \mathbf{F}^{T}
-\]" src="form_2544.png"/></picture>
+\]" src="form_2539.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -228,8 +228,8 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2545_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{1}{\textrm{det} \mathbf{F}} \; \chi\left(
-\mathbf{T} \right)$" src="form_2545.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2540_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{1}{\textrm{det} \mathbf{F}} \; \chi\left(
+\mathbf{T} \right)$" src="form_2540.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -251,12 +251,12 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the push forward transformation on a rank-4 contravariant tensor, i.e. (in index notation):  </p><p class="formulaDsp">
-<picture><source srcset="form_2546_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2541_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \textrm{det} \mathbf{F}^{-1} \; \left[
 \chi\left(\bullet\right)^{\sharp} \right]_{ijkl}
    \dealcoloneq \frac{1}{\textrm{det} \mathbf{F}} \; F_{iI} F_{jJ}
 \left(\bullet\right)^{\sharp}_{IJKL} F_{kK} F_{lL}
-\]" src="form_2546.png"/></picture>
+\]" src="form_2541.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -266,8 +266,8 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2547_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{1}{\textrm{det} \mathbf{F}} \; \chi\left(
-\mathbf{H} \right)$" src="form_2547.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2542_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{1}{\textrm{det} \mathbf{F}} \; \chi\left(
+\mathbf{H} \right)$" src="form_2542.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -289,12 +289,12 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the push forward transformation on a rank-4 contravariant symmetric tensor, i.e. (in index notation):  </p><p class="formulaDsp">
-<picture><source srcset="form_2546_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2541_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \textrm{det} \mathbf{F}^{-1} \; \left[
 \chi\left(\bullet\right)^{\sharp} \right]_{ijkl}
    \dealcoloneq \frac{1}{\textrm{det} \mathbf{F}} \; F_{iI} F_{jJ}
 \left(\bullet\right)^{\sharp}_{IJKL} F_{kK} F_{lL}
-\]" src="form_2546.png"/></picture>
+\]" src="form_2541.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -304,8 +304,8 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2547_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{1}{\textrm{det} \mathbf{F}} \; \chi\left(
-\mathbf{H} \right)$" src="form_2547.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2542_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{1}{\textrm{det} \mathbf{F}} \; \chi\left(
+\mathbf{H} \right)$" src="form_2542.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -327,11 +327,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the pull back transformation on a contravariant vector, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2548_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2543_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \textrm{det} \mathbf{F} \; \chi^{-1}\left(\bullet\right)^{\sharp}
    \dealcoloneq \textrm{det} \mathbf{F} \; \mathbf{F}^{-1} \cdot
 \left(\bullet\right)^{\sharp}
-\]" src="form_2548.png"/></picture>
+\]" src="form_2543.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -341,8 +341,8 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2549_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{det} \mathbf{F} \; \chi^{-1}\left( \mathbf{v}
-\right)$" src="form_2549.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2544_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{det} \mathbf{F} \; \chi^{-1}\left( \mathbf{v}
+\right)$" src="form_2544.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -364,11 +364,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the pull back transformation on a rank-2 contravariant tensor, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2550_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2545_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \textrm{det} \mathbf{F} \; \chi^{-1}\left(\bullet\right)^{\sharp}
    \dealcoloneq \textrm{det} \mathbf{F} \; \mathbf{F}^{-1} \cdot
 \left(\bullet\right)^{\sharp} \cdot \mathbf{F}^{-T}
-\]" src="form_2550.png"/></picture>
+\]" src="form_2545.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -378,8 +378,8 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{det} \mathbf{F} \; \chi^{-1}\left( \mathbf{t}
-\right)$" src="form_2551.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2546_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{det} \mathbf{F} \; \chi^{-1}\left( \mathbf{t}
+\right)$" src="form_2546.png"/></picture> </dd></dl>
 
 </div>
 </div>
@@ -401,11 +401,11 @@
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 2, dim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>F</em></span>&#href_anchor"memdoc">
 <p>Return the result of the pull back transformation on a rank-2 contravariant symmetric tensor, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_2550_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2545_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \textrm{det} \mathbf{F} \; \chi^{-1}\left(\bullet\right)^{\sharp}
    \dealcoloneq \textrm{det} \mathbf{F} \; \mathbf{F}^{-1} \cdot
 \left(\bullet\right)^{\sharp} \cdot \mathbf{F}^{-T}
-\]" src="form_2550.png"/></picture>
+\]" src="form_2545.png"/></picture>
 </p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -415,8 +415,8 @@
   </table>
   </dd>
 </dl>
-<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{det} \mathbf{F} \; \chi^{-1}\left( \mathbf{t}
-\right)$" src="form_2551.png"/></picture> </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd><picture><source srcset="form_2546_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{det} \mathbf{F} \; \chi^{-1}\left( \mathbf{t}
/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Rotations.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Rotations.html	2024-03-17 21:57:42.923231087 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1Transformations_1_1Rotations.html	2024-03-17 21:57:42.927231112 +0000
@@ -125,14 +125,14 @@
       </table>
 </div><div class="memdoc">
 <p>Return the rotation matrix for 2-d Euclidean space, namely  </p><p class="formulaDsp">
-<picture><source srcset="form_2518_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{R} \dealcoloneq \left[ \begin{array}{cc}
  cos(\theta) &amp; -sin(\theta) \\
  sin(\theta) &amp; cos(\theta)
 \end{array}\right]
-\]" src="form_2518.png"/></picture>
+\]" src="form_2512.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2506.png"/></picture> is the rotation angle given in radians. In particular, this describes the counter-clockwise rotation of a vector relative to a <a href="http://mathworld.wolfram.com/RotationMatrix.html">fixed set of right-handed axes</a>.</p>
+<p> where <picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2513.png"/></picture> is the rotation angle given in radians. In particular, this describes the counter-clockwise rotation of a vector relative to a <a href="http://mathworld.wolfram.com/RotationMatrix.html">fixed set of right-handed axes</a>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">angle</td><td>The rotation angle (about the z-axis) in radians </td></tr>
@@ -160,12 +160,12 @@
           <td></td>
           <td class="paramtype">const Number &amp;</td>          <td class="paramname"><span class="paramname"><em>angle</em></span>&#href_anchor"memdoc">
 <p>Return the rotation matrix for 3-d Euclidean space. Most concisely stated using the Rodrigues' rotation formula, this function returns the equivalent of  </p><p class="formulaDsp">
-<picture><source srcset="form_2519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2514_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{R} \dealcoloneq cos(\theta)\mathbf{I} + sin(\theta)\mathbf{W}
              + (1-cos(\theta))\mathbf{u}\otimes\mathbf{u}
-\]" src="form_2519.png"/></picture>
+\]" src="form_2514.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2520.png"/></picture> is the axial vector (an axial vector) and <picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2506.png"/></picture> is the rotation angle given in radians, <picture><source srcset="form_252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{I}$" src="form_252.png"/></picture> is the identity tensor and <picture><source srcset="form_2521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{W}$" src="form_2521.png"/></picture> is the skew symmetric tensor of <picture><source srcset="form_2520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2520.png"/></picture>.</p>
+<p> where <picture><source srcset="form_2515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2515.png"/></picture> is the axial vector (an axial vector) and <picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2513.png"/></picture> is the rotation angle given in radians, <picture><source srcset="form_252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{I}$" src="form_252.png"/></picture> is the identity tensor and <picture><source srcset="form_2516_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{W}$" src="form_2516.png"/></picture> is the skew symmetric tensor of <picture><source srcset="form_2515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2515.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For a discussion of the background of this function, see P. Wriggers: "Nonlinear finite element methods" (2008), and in particular formula (9.194) on p. 374 (or thereabouts). This presents Rodrigues' rotation formula, but the implementation used in this function is described in this <a href="https://en.wikipedia.org/wiki/Rotation_matrix#href_anchor">wikipedia link</a>. In particular, this describes the counter-clockwise rotation of a vector <a href="http://mathworld.wolfram.com/RotationMatrix.html">in a plane with its normal</a>. defined by the <code>axis</code> of rotation. An alternative implementation is discussed at <a href="https://www.gamedev.net/resources/_/technical/math-and-physics/do-we-really-need-quaternions-r1199">this link</a>, but is inconsistent (sign-wise) with the Rodrigues' rotation formula as it describes the rotation of a coordinate system.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
@@ -197,12 +197,12 @@
 
 <p></p>
 <p>Return the rotation matrix for 3-d Euclidean space. Most concisely stated using the Rodrigues' rotation formula, this function returns the equivalent of  </p><p class="formulaDsp">
-<picture><source srcset="form_2519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2514_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  \mathbf{R} \dealcoloneq cos(\theta)\mathbf{I} + sin(\theta)\mathbf{W}
              + (1-cos(\theta))\mathbf{u}\otimes\mathbf{u}
-\]" src="form_2519.png"/></picture>
+\]" src="form_2514.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2520.png"/></picture> is the axial vector (an axial vector) and <picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2506.png"/></picture> is the rotation angle given in radians, <picture><source srcset="form_252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{I}$" src="form_252.png"/></picture> is the identity tensor and <picture><source srcset="form_2521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{W}$" src="form_2521.png"/></picture> is the skew symmetric tensor of <picture><source srcset="form_2520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2520.png"/></picture>.</p>
+<p> where <picture><source srcset="form_2515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2515.png"/></picture> is the axial vector (an axial vector) and <picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2513.png"/></picture> is the rotation angle given in radians, <picture><source srcset="form_252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{I}$" src="form_252.png"/></picture> is the identity tensor and <picture><source srcset="form_2516_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{W}$" src="form_2516.png"/></picture> is the skew symmetric tensor of <picture><source srcset="form_2515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2515.png"/></picture>.</p>
 <dl class="section note"><dt>Note</dt><dd>For a discussion of the background of this function, see P. Wriggers: "Nonlinear finite element methods" (2008), and in particular formula (9.194) on p. 374 (or thereabouts). This presents Rodrigues' rotation formula, but the implementation used in this function is described in this <a href="https://en.wikipedia.org/wiki/Rotation_matrix#href_anchor">wikipedia link</a>. In particular, this describes the counter-clockwise rotation of a vector <a href="http://mathworld.wolfram.com/RotationMatrix.html">in a plane with its normal</a>. defined by the <code>axis</code> of rotation. An alternative implementation is discussed at <a href="https://www.gamedev.net/resources/_/technical/math-and-physics/do-we-really-need-quaternions-r1199">this link</a>, but is inconsistent (sign-wise) with the Rodrigues' rotation formula as it describes the rotation of a coordinate system.</dd></dl>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
/usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1VectorRelations.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1VectorRelations.html	2024-03-17 21:57:42.947231235 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespacePhysics_1_1VectorRelations.html	2024-03-17 21:57:42.947231235 +0000
@@ -123,11 +123,11 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 1, spacedim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>b</em></span>&#href_anchor"memdoc">
-<p>Calculate the angle <picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2506.png"/></picture> between two vectors <code>a</code> and <code>b</code>. The returned angle will be in the range <picture><source srcset="form_2507_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, \pi]$" src="form_2507.png"/></picture>.</p>
+<p>Calculate the angle <picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2513.png"/></picture> between two vectors <code>a</code> and <code>b</code>. The returned angle will be in the range <picture><source srcset="form_2549_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0, \pi]$" src="form_2549.png"/></picture>.</p>
 <p>This function uses the geometric definition of the scalar product.  </p><p class="formulaDsp">
-<picture><source srcset="form_2508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2550_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \vec{a} \cdot \vec{b} = \|\vec{a}\| \|\vec{b}\| \cos(\theta)
-\]" src="form_2508.png"/></picture>
+\]" src="form_2550.png"/></picture>
 </p>
  
 </div>
@@ -154,21 +154,21 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classTensor.html">Tensor</a>&lt; 1, spacedim, Number &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>axis</em></span>&#href_anchor"memdoc">
-<p>Calculate the angle <picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2506.png"/></picture> between two vectors <code>a</code> and <code>b</code>, where both vectors are located in a plane described by a normal vector <code>axis</code>.</p>
-<p>The angle computed by this function corresponds to the rotation angle that would transform the vector <code>a</code> into the vector <code>b</code> around the vector <code>axis</code>. Thus, contrary to the function above, we get a <em>signed</em> angle which will be in the range <picture><source srcset="form_2515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-\pi, \pi]$" src="form_2515.png"/></picture>.</p>
+<p>Calculate the angle <picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2513.png"/></picture> between two vectors <code>a</code> and <code>b</code>, where both vectors are located in a plane described by a normal vector <code>axis</code>.</p>
+<p>The angle computed by this function corresponds to the rotation angle that would transform the vector <code>a</code> into the vector <code>b</code> around the vector <code>axis</code>. Thus, contrary to the function above, we get a <em>signed</em> angle which will be in the range <picture><source srcset="form_2551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-\pi, \pi]$" src="form_2551.png"/></picture>.</p>
 <p>The vector <code>axis</code> needs to be a unit vector and be perpendicular to both vectors <code>a</code> and <code>b</code>.</p>
 <p>This function uses the geometric definitions of both the scalar and cross product.  </p><p class="formulaDsp">
-<picture><source srcset="form_2516_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_2552_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \vec{a} \cdot  \vec{b} &amp;= \|\vec{a}\| \|\vec{b}\| \cos(\theta) \\
   \vec{a} \times \vec{b} &amp;= \|\vec{a}\| \|\vec{b}\| \sin(\theta) \vec{n}
-\end{align*}" src="form_2516.png"/></picture>
+\end{align*}" src="form_2552.png"/></picture>
 </p>
 <p> We can create the tangent of the angle using both products.  </p><p class="formulaDsp">
-<picture><source srcset="form_2517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2553_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \tan{\theta}
   = \frac{\sin(\theta)}{\cos(theta)}
   = \frac{(\vec{a} \times \vec{b}) \cdot \vec{n}}{\vec{a} \cdot \vec{b}}
-\]" src="form_2517.png"/></picture>
+\]" src="form_2553.png"/></picture>
 </p>
 <dl class="section note"><dt>Note</dt><dd>Only applicable for three-dimensional vectors <code>spacedim == 3</code>. </dd></dl>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSLEPcWrappers.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSLEPcWrappers.html	2024-03-17 21:57:42.975231408 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSLEPcWrappers.html	2024-03-17 21:57:42.983231458 +0000
@@ -110,13 +110,13 @@
 <tr class="separator:"><td class="memSeparator" colspan="2">&#href_anchor"memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSLEPcWrappers_1_1TransformationSpectrumFolding.html">TransformationSpectrumFolding</a></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#href_anchor"details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>Base namespace for solver classes using the SLEPc solvers which are selected based on flags passed to the eigenvalue problem solver context. Derived classes set the right flags to set the right solver.</p>
-<p>The SLEPc solvers are intended to be used for solving the generalized eigenspectrum problem <picture><source srcset="form_1577_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(A-\lambda B)x=0$" src="form_1577.png"/></picture>, for <picture><source srcset="form_1578_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x\neq0$" src="form_1578.png"/></picture>; where <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is a system matrix, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is a <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>, and <picture><source srcset="form_1579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda, x$" src="form_1579.png"/></picture> are a set of eigenvalues and eigenvectors respectively. The emphasis is on methods and techniques appropriate for problems in which the associated matrices are sparse. Most of the methods offered by the SLEPc library are projection methods or other methods with similar properties; and wrappers are provided to interface to SLEPc solvers that handle both of these problem sets.</p>
+<p>The SLEPc solvers are intended to be used for solving the generalized eigenspectrum problem <picture><source srcset="form_1590_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(A-\lambda B)x=0$" src="form_1590.png"/></picture>, for <picture><source srcset="form_1591_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x\neq0$" src="form_1591.png"/></picture>; where <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is a system matrix, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is a <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>, and <picture><source srcset="form_1592_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda, x$" src="form_1592.png"/></picture> are a set of eigenvalues and eigenvectors respectively. The emphasis is on methods and techniques appropriate for problems in which the associated matrices are sparse. Most of the methods offered by the SLEPc library are projection methods or other methods with similar properties; and wrappers are provided to interface to SLEPc solvers that handle both of these problem sets.</p>
 <p><a class="el" href="namespaceSLEPcWrappers.html">SLEPcWrappers</a> can be implemented in application codes in the following way: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classSolverControl.html">SolverControl</a> solver_control (1000, 1e-9);</div>
 <div class="line"><a class="code hl_class" href="classSLEPcWrappers_1_1SolverArnoldi.html">SolverArnoldi</a> system (solver_control, mpi_communicator);</div>
 <div class="line">system.solve (A, B, lambda, x, size_of_spectrum);</div>
 <div class="ttc" id="aclassSLEPcWrappers_1_1SolverArnoldi_html"><div class="ttname"><a href="classSLEPcWrappers_1_1SolverArnoldi.html">SLEPcWrappers::SolverArnoldi</a></div><div class="ttdef"><b>Definition</b> <a href="slepc__solver_8h_source.html#href_anchor">slepc_solver.h:433</a></div></div>
 <div class="ttc" id="aclassSolverControl_html"><div class="ttname"><a href="classSolverControl.html">SolverControl</a></div><div class="ttdef"><b>Definition</b> <a href="solver__control_8h_source.html#href_anchor">solver_control.h:68</a></div></div>
-</div><!-- fragment --><p> for the generalized eigenvalue problem <picture><source srcset="form_1580_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=B\lambda x$" src="form_1580.png"/></picture>, where the variable <code>const unsigned int size_of_spectrum</code> tells SLEPc the number of eigenvector/eigenvalue pairs to solve for. Additional options and solver parameters can be passed to the SLEPc solvers before calling <code>solve()</code>. For example, if the matrices of the general eigenspectrum problem are not hermitian and the lower eigenvalues are wanted only, the following code can be implemented before calling <code>solve()</code>: </p><div class="fragment"><div class="line">system.set_problem_type (EPS_NHEP);</div>
+</div><!-- fragment --><p> for the generalized eigenvalue problem <picture><source srcset="form_1593_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=B\lambda x$" src="form_1593.png"/></picture>, where the variable <code>const unsigned int size_of_spectrum</code> tells SLEPc the number of eigenvector/eigenvalue pairs to solve for. Additional options and solver parameters can be passed to the SLEPc solvers before calling <code>solve()</code>. For example, if the matrices of the general eigenspectrum problem are not hermitian and the lower eigenvalues are wanted only, the following code can be implemented before calling <code>solve()</code>: </p><div class="fragment"><div class="line">system.set_problem_type (EPS_NHEP);</div>
 <div class="line">system.set_which_eigenpairs (EPS_SMALLEST_REAL);</div>
 </div><!-- fragment --><p> These options can also be set at the command line.</p>
 <p>See also <code><a class="el" href="step_36.html">step-36</a></code> for a hands-on example.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSUNDIALS.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSUNDIALS.html	2024-03-17 21:57:43.003231581 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSUNDIALS.html	2024-03-17 21:57:43.007231606 +0000
@@ -142,7 +142,7 @@
 <div class="line">                       <span class="keyword">const</span> VectorType &amp;                  b,</div>
 <div class="line">                       <span class="keywordtype">double</span>                              tol)&gt;</div>
 </div><!-- fragment --><p>Type of function objects to interface with <a class="el" href="namespaceSUNDIALS.html">SUNDIALS</a>' linear solvers</p>
-<p>This function type encapsulates the action of solving <picture><source srcset="form_2679_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^{-1}Ax=P^{-1}b$" src="form_2679.png"/></picture>. The <a class="el" href="classLinearOperator.html">LinearOperator</a> <code>op</code> encapsulates the matrix vector product <picture><source srcset="form_2672_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax$" src="form_2672.png"/></picture> and the <a class="el" href="classLinearOperator.html">LinearOperator</a> <code>prec</code> encapsulates the application of the preconditioner <picture><source srcset="form_2680_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^{-1}z$" src="form_2680.png"/></picture>. The user can specify function objects of this type to attach custom linear solver routines to <a class="el" href="namespaceSUNDIALS.html">SUNDIALS</a>. The two LinearOperators <code>op</code> and <code>prec</code> are built internally by <a class="el" href="namespaceSUNDIALS.html">SUNDIALS</a> based on user settings. The parameters are interpreted as follows:</p>
+<p>This function type encapsulates the action of solving <picture><source srcset="form_2679_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^{-1}Ax=P^{-1}b$" src="form_2679.png"/></picture>. The <a class="el" href="classLinearOperator.html">LinearOperator</a> <code>op</code> encapsulates the matrix vector product <picture><source srcset="form_2606_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax$" src="form_2606.png"/></picture> and the <a class="el" href="classLinearOperator.html">LinearOperator</a> <code>prec</code> encapsulates the application of the preconditioner <picture><source srcset="form_2680_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^{-1}z$" src="form_2680.png"/></picture>. The user can specify function objects of this type to attach custom linear solver routines to <a class="el" href="namespaceSUNDIALS.html">SUNDIALS</a>. The two LinearOperators <code>op</code> and <code>prec</code> are built internally by <a class="el" href="namespaceSUNDIALS.html">SUNDIALS</a> based on user settings. The parameters are interpreted as follows:</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramdir">[in]</td><td class="paramname">op</td><td>A <a class="el" href="classLinearOperator.html">LinearOperator</a> that applies the matrix vector product </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSmoothnessEstimator_1_1Fourier.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSmoothnessEstimator_1_1Fourier.html	2024-03-17 21:57:43.031231754 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSmoothnessEstimator_1_1Fourier.html	2024-03-17 21:57:43.035231779 +0000
@@ -109,19 +109,19 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>Smoothness estimation strategy based on the decay of <a class="el" href="namespaceSmoothnessEstimator_1_1Fourier.html">Fourier</a> expansion coefficients.</p>
-<p>From the definition, we can write our <a class="el" href="namespaceSmoothnessEstimator_1_1Fourier.html">Fourier</a> series expansion <picture><source srcset="form_2364_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{\bf k}$" src="form_2364.png"/></picture> of the finite element solution on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> with polynomial degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> as a matrix product  </p><p class="formulaDsp">
-<picture><source srcset="form_2365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>From the definition, we can write our <a class="el" href="namespaceSmoothnessEstimator_1_1Fourier.html">Fourier</a> series expansion <picture><source srcset="form_2227_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{\bf k}$" src="form_2227.png"/></picture> of the finite element solution on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> with polynomial degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> as a matrix product  </p><p class="formulaDsp">
+<picture><source srcset="form_2228_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
    u_h({\bf x}) &amp;=&amp; \sum_j u_j \varphi_j ({\bf x}) \\
    u_{h, {\bf k}}({\bf x}) &amp;=&amp;
      \sum_{{\bf k}, \|{\bf k}\|\le p} a_{\bf k} \phi_{\bf k}({\bf x}),
      \quad a_{\bf k} = \sum_j {\cal F}_{{\bf k},j} u_j
-\end{eqnarray*}" src="form_2365.png"/></picture>
+\end{eqnarray*}" src="form_2228.png"/></picture>
 </p>
-<p> with <picture><source srcset="form_2355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_j$" src="form_2355.png"/></picture> the degrees of freedom and <picture><source srcset="form_1017_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j$" src="form_1017.png"/></picture> the corresponding shape functions. <picture><source srcset="form_2366_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\phi_{\bf k}({\bf x}) = \exp(i \, 2 \pi \, {\bf k} \cdot
-{\bf x}) \}$" src="form_2366.png"/></picture> are exponential functions on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. <picture><source srcset="form_2364_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{\bf k}$" src="form_2364.png"/></picture> and <picture><source srcset="form_2367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal
-F}_{{\bf k},j}$" src="form_2367.png"/></picture> are coefficients and transformation matrices from the <a class="el" href="namespaceSmoothnessEstimator_1_1Fourier.html">Fourier</a> expansion of each shape function. For practical reasons, we will perform the calculation of these matrices and coefficients only on the reference cell <picture><source srcset="form_267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat K$" src="form_267.png"/></picture>. We only have to calculate the transformation matrices once this way. However, results are only applicable if mapping from the reference cell to the actual cell is linear. We use the class <a class="el" href="classFESeries_1_1Fourier.html">FESeries::Fourier</a> to determine all coefficients <picture><source srcset="form_2364_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{\bf k}$" src="form_2364.png"/></picture>.</p>
-<p>If the finite element approximation on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is part of the Hilbert space <picture><source srcset="form_2368_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^s(K)$" src="form_2368.png"/></picture>, then the following integral must exist for both the finite element and spectral representation of our solution  </p><p class="formulaDsp">
-<picture><source srcset="form_2369_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> with <picture><source srcset="form_2218_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_j$" src="form_2218.png"/></picture> the degrees of freedom and <picture><source srcset="form_971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j$" src="form_971.png"/></picture> the corresponding shape functions. <picture><source srcset="form_2229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\phi_{\bf k}({\bf x}) = \exp(i \, 2 \pi \, {\bf k} \cdot
+{\bf x}) \}$" src="form_2229.png"/></picture> are exponential functions on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. <picture><source srcset="form_2227_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{\bf k}$" src="form_2227.png"/></picture> and <picture><source srcset="form_2230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal
+F}_{{\bf k},j}$" src="form_2230.png"/></picture> are coefficients and transformation matrices from the <a class="el" href="namespaceSmoothnessEstimator_1_1Fourier.html">Fourier</a> expansion of each shape function. For practical reasons, we will perform the calculation of these matrices and coefficients only on the reference cell <picture><source srcset="form_267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat K$" src="form_267.png"/></picture>. We only have to calculate the transformation matrices once this way. However, results are only applicable if mapping from the reference cell to the actual cell is linear. We use the class <a class="el" href="classFESeries_1_1Fourier.html">FESeries::Fourier</a> to determine all coefficients <picture><source srcset="form_2227_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{\bf k}$" src="form_2227.png"/></picture>.</p>
+<p>If the finite element approximation on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is part of the Hilbert space <picture><source srcset="form_2231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^s(K)$" src="form_2231.png"/></picture>, then the following integral must exist for both the finite element and spectral representation of our solution  </p><p class="formulaDsp">
+<picture><source srcset="form_2232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \| \nabla^s u_h({\bf x}) \|_{L^2(K)}^2 &amp;=&amp;
     \int\limits_K \left| \nabla^s u_h({\bf x}) \right|^2 d{\bf x} &lt;
     \infty \\
@@ -130,40 +130,40 @@
     a_{\bf k} \, \phi_{\bf k}({\bf x}) \right|^2 d{\bf x} =
     (2 \pi)^{2s} \sum\limits_{\bf k} \left| a_{\bf k} \right|^2
     \|{\bf k}\|_2^{2s} &lt; \infty
-\end{eqnarray*}" src="form_2369.png"/></picture>
+\end{eqnarray*}" src="form_2232.png"/></picture>
 </p>
 <p> The sum is finite only if the summands decay at least with order  </p><p class="formulaDsp">
-<picture><source srcset="form_2370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2233_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   |a_{\bf k}|^2 \|{\bf k}\|_2^{2s} \|{\bf k}\|_2^{d - 1} =
     {\cal O}\left( \|{\bf k}\|_2^{-1-\epsilon} \right)
-\]" src="form_2370.png"/></picture>
+\]" src="form_2233.png"/></picture>
 </p>
-<p> for all <picture><source srcset="form_2371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon &gt; 0$" src="form_2371.png"/></picture>. The additional factor stems from the fact that, since we sum over all multi-indices <picture><source srcset="form_2372_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf k}$" src="form_2372.png"/></picture> that are located on a dim-dimensional sphere, we actually have, up to a constant, <picture><source srcset="form_2373_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|{\bf k}\|_2^{d-1}$" src="form_2373.png"/></picture> modes located in each increment <picture><source srcset="form_2374_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|{\bf k}\|_2 +
-d\|{\bf k}\|_2$" src="form_2374.png"/></picture> that need to be taken into account. By a comparison of exponents, we can rewrite this condition as  </p><p class="formulaDsp">
-<picture><source srcset="form_2375_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> for all <picture><source srcset="form_2234_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon &gt; 0$" src="form_2234.png"/></picture>. The additional factor stems from the fact that, since we sum over all multi-indices <picture><source srcset="form_2235_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf k}$" src="form_2235.png"/></picture> that are located on a dim-dimensional sphere, we actually have, up to a constant, <picture><source srcset="form_2236_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|{\bf k}\|_2^{d-1}$" src="form_2236.png"/></picture> modes located in each increment <picture><source srcset="form_2237_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|{\bf k}\|_2 +
+d\|{\bf k}\|_2$" src="form_2237.png"/></picture> that need to be taken into account. By a comparison of exponents, we can rewrite this condition as  </p><p class="formulaDsp">
+<picture><source srcset="form_2238_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   |a_{\bf k}| = {\cal O}\left(\|{\bf k}\|_2^
     {-\left(s + \frac d2 + \epsilon \right)} \right)
-\]" src="form_2375.png"/></picture>
+\]" src="form_2238.png"/></picture>
 </p>
-<p>The next step is to estimate how fast these coefficients decay with <picture><source srcset="form_2376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|{\bf k}\|_2$" src="form_2376.png"/></picture>. Thus, we perform a least-squares fit  </p><p class="formulaDsp">
-<picture><source srcset="form_2377_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>The next step is to estimate how fast these coefficients decay with <picture><source srcset="form_2239_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|{\bf k}\|_2$" src="form_2239.png"/></picture>. Thus, we perform a least-squares fit  </p><p class="formulaDsp">
+<picture><source srcset="form_2240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \min_{\alpha,\sigma}
    \frac 12 \sum_{{\bf k}, \|{\bf k}\|_2 \le p}
    \left( |a_{\bf k}| - \alpha \|{\bf k}\|_2^{-\sigma}\right)^2
-\]" src="form_2377.png"/></picture>
+\]" src="form_2240.png"/></picture>
 </p>
-<p> with regression coefficients <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> and <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture>. For simplification, we apply a logarithm on our minimization problem  </p><p class="formulaDsp">
-<picture><source srcset="form_2378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> with regression coefficients <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> and <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture>. For simplification, we apply a logarithm on our minimization problem  </p><p class="formulaDsp">
+<picture><source srcset="form_2241_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \min_{\beta,\sigma}
    Q(\beta,\sigma) =
    \frac 12 \sum_{{\bf k}, \|{\bf k}\|_2 \le p}
    \left( \ln |a_{\bf k}| - \beta + \sigma \ln \|{\bf k}\|_2
 \right)^2,
-\]" src="form_2378.png"/></picture>
+\]" src="form_2241.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2379_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta=\ln \alpha$" src="form_2379.png"/></picture>. This is now a problem for which the optimality conditions <picture><source srcset="form_2380_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial Q}{\partial\beta}=0,
-\frac{\partial Q}{\partial\sigma}=0$" src="form_2380.png"/></picture>, are linear in <picture><source srcset="form_2381_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta,\sigma$" src="form_2381.png"/></picture>. We can write these conditions as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_2382_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_2242_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta=\ln \alpha$" src="form_2242.png"/></picture>. This is now a problem for which the optimality conditions <picture><source srcset="form_2243_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial Q}{\partial\beta}=0,
+\frac{\partial Q}{\partial\sigma}=0$" src="form_2243.png"/></picture>, are linear in <picture><source srcset="form_2244_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta,\sigma$" src="form_2244.png"/></picture>. We can write these conditions as follows:  </p><p class="formulaDsp">
+<picture><source srcset="form_2245_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \left(\begin{array}{cc}
    \sum_{{\bf k}, \|{\bf k}\|_2 \le p} 1 &amp;
    \sum_{{\bf k}, \|{\bf k}\|_2 \le p} \ln \|{\bf k}\|_2
@@ -180,10 +180,10 @@
    \\
    \sum_{{\bf k}, \|{\bf k}\|_2\le p} \ln |a_{{\bf k}}| \ln \|{\bf
 k}\|_2 \end{array}\right)
-\]" src="form_2382.png"/></picture>
+\]" src="form_2245.png"/></picture>
 </p>
-<p> Solving for <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> and <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture> is just a linear regression fit and to do that we will use <a class="el" href="namespaceFESeries.html#href_anchor">FESeries::linear_regression()</a>.</p>
-<p>While we are not particularly interested in the actual value of <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture>, the formula above gives us a means to calculate the value of the exponent <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture> that we can then use to determine that <picture><source srcset="form_2383_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\hat{\bf x})$" src="form_2383.png"/></picture> is in <picture><source srcset="form_2368_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^s(K)$" src="form_2368.png"/></picture> with <picture><source srcset="form_2384_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s=\sigma-\frac d2$" src="form_2384.png"/></picture>. The decay rates <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture> will suffice as our smoothness indicators and will be calculated on each cell for any provided solution.</p>
+<p> Solving for <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> and <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture> is just a linear regression fit and to do that we will use <a class="el" href="namespaceFESeries.html#href_anchor">FESeries::linear_regression()</a>.</p>
+<p>While we are not particularly interested in the actual value of <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture>, the formula above gives us a means to calculate the value of the exponent <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture> that we can then use to determine that <picture><source srcset="form_2246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\hat{\bf x})$" src="form_2246.png"/></picture> is in <picture><source srcset="form_2231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^s(K)$" src="form_2231.png"/></picture> with <picture><source srcset="form_2247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s=\sigma-\frac d2$" src="form_2247.png"/></picture>. The decay rates <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture> will suffice as our smoothness indicators and will be calculated on each cell for any provided solution.</p>
 <dl class="section note"><dt>Note</dt><dd>An extensive demonstration of the use of these functions is provided in <a class="el" href="step_27.html">step-27</a>. </dd></dl>
 </div><h2 class="groupheader">Function Documentation</h2>
 <a id="aae63069820e030e1f012e3e84d28e6f8" name="aae63069820e030e1f012e3e84d28e6f8"></a>
@@ -228,17 +228,17 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>only_flagged_cells</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
-<p>In this variant of the estimation strategy for higher dimensions, we will consider all mode vectors <picture><source srcset="form_2385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf k$" src="form_2385.png"/></picture> describing <a class="el" href="namespaceSmoothnessEstimator_1_1Fourier.html">Fourier</a> polynomials <picture><source srcset="form_2394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_{\bf k}$" src="form_2394.png"/></picture> and perform one least-squares fit over all coefficients at once. If there are multiple coefficients corresponding to the same absolute value of modes <picture><source srcset="form_2395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\bf k\|_2$" src="form_2395.png"/></picture>, we take the maximum among those. Thus, the least-squares fit is performed on  </p><p class="formulaDsp">
-<picture><source srcset="form_2396_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>In this variant of the estimation strategy for higher dimensions, we will consider all mode vectors <picture><source srcset="form_2248_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf k$" src="form_2248.png"/></picture> describing <a class="el" href="namespaceSmoothnessEstimator_1_1Fourier.html">Fourier</a> polynomials <picture><source srcset="form_2257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_{\bf k}$" src="form_2257.png"/></picture> and perform one least-squares fit over all coefficients at once. If there are multiple coefficients corresponding to the same absolute value of modes <picture><source srcset="form_2258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\bf k\|_2$" src="form_2258.png"/></picture>, we take the maximum among those. Thus, the least-squares fit is performed on  </p><p class="formulaDsp">
+<picture><source srcset="form_2259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \ln \left( \max\limits_{\|{\bf k}\|_2} |a_{\bf k}| \right) \sim
     C - \sigma \ln \|{\bf k}\|_2
-\]" src="form_2396.png"/></picture>
+\]" src="form_2259.png"/></picture>
 </p>
-<p> for <picture><source srcset="form_2389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf k}=(k_1,\ldots,k_d)$" src="form_2389.png"/></picture> and <picture><source srcset="form_2390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_i=0,\ldots,p$" src="form_2390.png"/></picture>, with <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> the polynomial degree of the finite element. We exclude the <picture><source srcset="form_2397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|{\bf k}\|_2=0$" src="form_2397.png"/></picture> modes to avoid the singularity of the logarithm.</p>
-<p>The <code>regression_strategy</code> parameter determines which norm will be used on the subset of coefficients <picture><source srcset="form_2385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf k$" src="form_2385.png"/></picture> with the same absolute value <picture><source srcset="form_2376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|{\bf k}\|_2$" src="form_2376.png"/></picture>. Default is <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::Linfty_norm</a> for a maximum approximation.</p>
-<p>For a provided solution vector <code>solution</code> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> <code>dof_handler</code>, this function returns a vector <code>smoothness_indicators</code> with as many elements as there are cells where each element contains the estimated regularity <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture>.</p>
+<p> for <picture><source srcset="form_2252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf k}=(k_1,\ldots,k_d)$" src="form_2252.png"/></picture> and <picture><source srcset="form_2253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_i=0,\ldots,p$" src="form_2253.png"/></picture>, with <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> the polynomial degree of the finite element. We exclude the <picture><source srcset="form_2260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|{\bf k}\|_2=0$" src="form_2260.png"/></picture> modes to avoid the singularity of the logarithm.</p>
+<p>The <code>regression_strategy</code> parameter determines which norm will be used on the subset of coefficients <picture><source srcset="form_2248_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf k$" src="form_2248.png"/></picture> with the same absolute value <picture><source srcset="form_2239_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|{\bf k}\|_2$" src="form_2239.png"/></picture>. Default is <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::Linfty_norm</a> for a maximum approximation.</p>
+<p>For a provided solution vector <code>solution</code> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> <code>dof_handler</code>, this function returns a vector <code>smoothness_indicators</code> with as many elements as there are cells where each element contains the estimated regularity <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture>.</p>
 <p>A series expansion object <code>fe_fourier</code> has to be supplied, which needs to be constructed with the same FECollection object as the <code>dof_handler</code>.</p>
-<p>The parameter <code>smallest_abs_coefficient</code> allows to ignore small (in absolute value) coefficients within the linear regression fit. In case there are less than two nonzero coefficients for a coordinate direction, this direction will be skipped. If all coefficients are zero, the returned value for this cell will be <picture><source srcset="form_2391_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma=\infty$" src="form_2391.png"/></picture>.</p>
+<p>The parameter <code>smallest_abs_coefficient</code> allows to ignore small (in absolute value) coefficients within the linear regression fit. In case there are less than two nonzero coefficients for a coordinate direction, this direction will be skipped. If all coefficients are zero, the returned value for this cell will be <picture><source srcset="form_2254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma=\infty$" src="form_2254.png"/></picture>.</p>
 <p>Smoothness indicators are usually used to decide whether to perform h- or p-adaptation. So in most cases, we only need to calculate those indicators on cells flagged for refinement or coarsening. The parameter <code>only_flagged_cells</code> controls whether this particular subset or all cells will be considered. By default, all cells will be considered. When only flagged cells are supposed to be considered, smoothness indicators will only be set on those vector entries of flagged cells; the others will be set to a signaling NaN. </p>
 
 <p class="definition">Definition at line <a class="el" href="smoothness__estimator_8cc_source.html#href_anchor">370</a> of file <a class="el" href="smoothness__estimator_8cc_source.html">smoothness_estimator.cc</a>.</p>
@@ -287,11 +287,11 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>only_flagged_cells</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
-<p>In this variant of the estimation strategy for higher dimensions, we only consider modes in each coordinate direction, i.e., only mode vectors <picture><source srcset="form_2385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf k$" src="form_2385.png"/></picture> with one nonzero entry. We perform the least-squares fit in each coordinate direction separately and take the lowest decay rate <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture> among them.</p>
-<p>The <code>coefficients_predicate</code> parameter selects <a class="el" href="namespaceSmoothnessEstimator_1_1Fourier.html">Fourier</a> coefficients <picture><source srcset="form_2392_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_j$" src="form_2392.png"/></picture>, <picture><source srcset="form_2393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=0,\ldots,p$" src="form_2393.png"/></picture> for linear regression in each coordinate direction. The user is responsible for updating the vector of <code>flags</code> provided to this function. Note that its size is <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>, where <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> is the polynomial degree of the FE basis on a given element. The default implementation will use all <a class="el" href="namespaceSmoothnessEstimator_1_1Fourier.html">Fourier</a> coefficients in each coordinate direction, i.e., set all the elements of the vector to <code>true</code>.</p>
-<p>For a provided solution vector <code>solution</code> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> <code>dof_handler</code>, this function returns a vector <code>smoothness_indicators</code> with as many elements as there are cells where each element contains the estimated regularity <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture>.</p>
+<p>In this variant of the estimation strategy for higher dimensions, we only consider modes in each coordinate direction, i.e., only mode vectors <picture><source srcset="form_2248_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf k$" src="form_2248.png"/></picture> with one nonzero entry. We perform the least-squares fit in each coordinate direction separately and take the lowest decay rate <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture> among them.</p>
+<p>The <code>coefficients_predicate</code> parameter selects <a class="el" href="namespaceSmoothnessEstimator_1_1Fourier.html">Fourier</a> coefficients <picture><source srcset="form_2255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_j$" src="form_2255.png"/></picture>, <picture><source srcset="form_2256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=0,\ldots,p$" src="form_2256.png"/></picture> for linear regression in each coordinate direction. The user is responsible for updating the vector of <code>flags</code> provided to this function. Note that its size is <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>, where <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> is the polynomial degree of the FE basis on a given element. The default implementation will use all <a class="el" href="namespaceSmoothnessEstimator_1_1Fourier.html">Fourier</a> coefficients in each coordinate direction, i.e., set all the elements of the vector to <code>true</code>.</p>
+<p>For a provided solution vector <code>solution</code> defined on a <a class="el" href="classDoFHandler.html">DoFHandler</a> <code>dof_handler</code>, this function returns a vector <code>smoothness_indicators</code> with as many elements as there are cells where each element contains the estimated regularity <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture>.</p>
 <p>A series expansion object <code>fe_fourier</code> has to be supplied, which needs to be constructed with the same FECollection object as the <code>dof_handler</code>.</p>
-<p>The parameter <code>smallest_abs_coefficient</code> allows to ignore small (in absolute value) coefficients within the linear regression fit. In case there are fewer than two nonzero coefficients for a coordinate direction, this direction will be skipped. If all coefficients are zero, the returned value for this cell will be <picture><source srcset="form_2391_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma=\infty$" src="form_2391.png"/></picture>.</p>
+<p>The parameter <code>smallest_abs_coefficient</code> allows to ignore small (in absolute value) coefficients within the linear regression fit. In case there are fewer than two nonzero coefficients for a coordinate direction, this direction will be skipped. If all coefficients are zero, the returned value for this cell will be <picture><source srcset="form_2254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma=\infty$" src="form_2254.png"/></picture>.</p>
 <p>Smoothness indicators are usually used to decide whether to perform h- or p-adaptation. So in most cases, we only need to calculate those indicators on cells flagged for refinement or coarsening. The parameter <code>only_flagged_cells</code> controls whether this particular subset or all cells will be considered. By default, all cells will be considered. When only flagged cells are supposed to be considered, smoothness indicators will only be set on those vector entries of flagged cells; the others will be set to a signaling NaN. </p>
 
 <p class="definition">Definition at line <a class="el" href="smoothness__estimator_8cc_source.html#href_anchor">468</a> of file <a class="el" href="smoothness__estimator_8cc_source.html">smoothness_estimator.cc</a>.</p>
@@ -319,7 +319,7 @@
       </table>
 </div><div class="memdoc">
 <p>Returns a <a class="el" href="classFESeries_1_1Fourier.html">FESeries::Fourier</a> object for <a class="el" href="namespaceSmoothnessEstimator_1_1Fourier.html">Fourier</a> series expansions with the default configuration for smoothness estimation purposes.</p>
-<p>For each finite element of the provided <code>fe_collection</code>, we use as many modes as its polynomial degree plus two. Further for each element, we use a 5-point Gaussian quarature iterated in each dimension by the maximal wave number, which is the number of modes decreased by one since we start with <picture><source srcset="form_2398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k = 0$" src="form_2398.png"/></picture>.</p>
+<p>For each finite element of the provided <code>fe_collection</code>, we use as many modes as its polynomial degree plus two. Further for each element, we use a 5-point Gaussian quarature iterated in each dimension by the maximal wave number, which is the number of modes decreased by one since we start with <picture><source srcset="form_2261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k = 0$" src="form_2261.png"/></picture>.</p>
 <p>As the <a class="el" href="namespaceSmoothnessEstimator_1_1Fourier.html">Fourier</a> expansion can only be performed on scalar fields, this class does not operate on vector-valued finite elements and will therefore throw an assertion. However, each component of a finite element field can be treated as a scalar field, respectively, on which <a class="el" href="namespaceSmoothnessEstimator_1_1Fourier.html">Fourier</a> expansions are again possible. For this purpose, the optional parameter <code>component</code> defines which component of each <a class="el" href="classFiniteElement.html">FiniteElement</a> will be used. The default value of <code>component</code> only applies to scalar FEs, in which case it indicates that the sole component is to be decomposed. For vector-valued FEs, a non-default value must be explicitly provided. </p>
 
 <p class="definition">Definition at line <a class="el" href="smoothness__estimator_8cc_source.html#href_anchor">577</a> of file <a class="el" href="smoothness__estimator_8cc_source.html">smoothness_estimator.cc</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSmoothnessEstimator_1_1Legendre.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSmoothnessEstimator_1_1Legendre.html	2024-03-17 21:57:43.067231976 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSmoothnessEstimator_1_1Legendre.html	2024-03-17 21:57:43.075232026 +0000
@@ -109,25 +109,25 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>Smoothness estimation strategy based on the decay of <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">Legendre</a> expansion coefficients.</p>
-<p>In one dimension, the finite element solution on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> with polynomial degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> can be written as  </p><p class="formulaDsp">
-<picture><source srcset="form_2354_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>In one dimension, the finite element solution on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> with polynomial degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> can be written as  </p><p class="formulaDsp">
+<picture><source srcset="form_2217_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
    u_h(x) &amp;=&amp; \sum_j u_j \varphi_j (x) \\
    u_{h, k}(x) &amp;=&amp; \sum_{k=0}^{p} a_k \widetilde P_k (x),
    \quad a_k = \sum_j {\cal L}_{k,j} u_j
-\end{eqnarray*}" src="form_2354.png"/></picture>
+\end{eqnarray*}" src="form_2217.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_j$" src="form_2355.png"/></picture> are degrees of freedom and <picture><source srcset="form_1017_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j$" src="form_1017.png"/></picture> are the corresponding shape functions. <picture><source srcset="form_2356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\widetilde P_k(x)\}$" src="form_2356.png"/></picture> are <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">Legendre</a> polynomials on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. <picture><source srcset="form_2357_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_k$" src="form_2357.png"/></picture> and <picture><source srcset="form_2358_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal L}_{k,j}$" src="form_2358.png"/></picture> are coefficients and transformation matrices from the <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">Legendre</a> expansion of each shape function. For practical reasons, we will perform the calculation of these matrices and coefficients only on the reference cell <picture><source srcset="form_267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat K$" src="form_267.png"/></picture>. We only have to calculate the transformation matrices once this way. However, results are only applicable if the mapping from the reference cell to the actual cell is affine. We use the class <a class="el" href="classFESeries_1_1Legendre.html">FESeries::Legendre</a> to determine all coefficients <picture><source srcset="form_2357_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_k$" src="form_2357.png"/></picture>.</p>
+<p> where <picture><source srcset="form_2218_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_j$" src="form_2218.png"/></picture> are degrees of freedom and <picture><source srcset="form_971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j$" src="form_971.png"/></picture> are the corresponding shape functions. <picture><source srcset="form_2219_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\widetilde P_k(x)\}$" src="form_2219.png"/></picture> are <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">Legendre</a> polynomials on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. <picture><source srcset="form_2220_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_k$" src="form_2220.png"/></picture> and <picture><source srcset="form_2221_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal L}_{k,j}$" src="form_2221.png"/></picture> are coefficients and transformation matrices from the <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">Legendre</a> expansion of each shape function. For practical reasons, we will perform the calculation of these matrices and coefficients only on the reference cell <picture><source srcset="form_267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat K$" src="form_267.png"/></picture>. We only have to calculate the transformation matrices once this way. However, results are only applicable if the mapping from the reference cell to the actual cell is affine. We use the class <a class="el" href="classFESeries_1_1Legendre.html">FESeries::Legendre</a> to determine all coefficients <picture><source srcset="form_2220_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_k$" src="form_2220.png"/></picture>.</p>
 <p>A function is analytic, i.e., representable by a power series, if and only if their <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">Legendre</a> expansion coefficients decay as (see <b>[eibner2007hp]</b>)  </p><p class="formulaDsp">
-<picture><source srcset="form_2359_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   |a_k| \sim c \, \exp(-\sigma k)
-\]" src="form_2359.png"/></picture>
+\]" src="form_2222.png"/></picture>
 </p>
-<p> We determine their decay rate <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture> by performing the linear regression fit of  </p><p class="formulaDsp">
-<picture><source srcset="form_2361_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> We determine their decay rate <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture> by performing the linear regression fit of  </p><p class="formulaDsp">
+<picture><source srcset="form_2224_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \ln |a_k| \sim C - \sigma k
-\]" src="form_2361.png"/></picture>
+\]" src="form_2224.png"/></picture>
 </p>
-<p> for <picture><source srcset="form_2362_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=0,\ldots,p$" src="form_2362.png"/></picture>, with <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> the polynomial degree of the finite element. The rate of the decay <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture> can be used to estimate the smoothness. For example, one strategy to implement hp-refinement criteria is to perform p-refinement if <picture><source srcset="form_2363_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma&gt;1$" src="form_2363.png"/></picture> (see <b>[mavriplis1994hp]</b>). </p>
+<p> for <picture><source srcset="form_2225_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=0,\ldots,p$" src="form_2225.png"/></picture>, with <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> the polynomial degree of the finite element. The rate of the decay <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture> can be used to estimate the smoothness. For example, one strategy to implement hp-refinement criteria is to perform p-refinement if <picture><source srcset="form_2226_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma&gt;1$" src="form_2226.png"/></picture> (see <b>[mavriplis1994hp]</b>). </p>
 </div><h2 class="groupheader">Function Documentation</h2>
 <a id="af6d025a69f8a4d1e9fc5914e5d648463" name="af6d025a69f8a4d1e9fc5914e5d648463"></a>
 <h2 class="memtitle"><span class="permalink"><a href="#href_anchor">&#9670;&#160;</a></span>coefficient_decay()</h2>
@@ -171,24 +171,24 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>only_flagged_cells</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
-<p>In this variant of the estimation strategy for higher dimensions, we will consider all mode vectors <picture><source srcset="form_2385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf k$" src="form_2385.png"/></picture> describing <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">Legendre</a> polynomials <picture><source srcset="form_2386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widetilde P_{\bf k}$" src="form_2386.png"/></picture> and perform one least-squares fit over all coefficients at once. If there are multiple coefficients corresponding to the same absolute value of modes <picture><source srcset="form_2387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|{\bf k}\|_1$" src="form_2387.png"/></picture>, we take the maximum among those. Thus, the least-squares fit is performed on  </p><p class="formulaDsp">
-<picture><source srcset="form_2388_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>In this variant of the estimation strategy for higher dimensions, we will consider all mode vectors <picture><source srcset="form_2248_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf k$" src="form_2248.png"/></picture> describing <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">Legendre</a> polynomials <picture><source srcset="form_2249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widetilde P_{\bf k}$" src="form_2249.png"/></picture> and perform one least-squares fit over all coefficients at once. If there are multiple coefficients corresponding to the same absolute value of modes <picture><source srcset="form_2250_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|{\bf k}\|_1$" src="form_2250.png"/></picture>, we take the maximum among those. Thus, the least-squares fit is performed on  </p><p class="formulaDsp">
+<picture><source srcset="form_2251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \widetilde P_{\bf k}({\bf x}) &amp;=&amp;
     \widetilde P_{k_1} (x_1) \ldots \widetilde P_{k_d} (x_d) \\
   \ln \left( \max\limits_{\|{\bf k}\|_1} |a_{\bf k}| \right) &amp;\sim&amp;
     C - \sigma \|{\bf k}\|_1
-\end{eqnarray*}" src="form_2388.png"/></picture>
+\end{eqnarray*}" src="form_2251.png"/></picture>
 </p>
-<p> for <picture><source srcset="form_2389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf k}=(k_1,\ldots,k_d)$" src="form_2389.png"/></picture> and <picture><source srcset="form_2390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_i=0,\ldots,p$" src="form_2390.png"/></picture>, with <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> the polynomial degree of the finite element.</p>
+<p> for <picture><source srcset="form_2252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf k}=(k_1,\ldots,k_d)$" src="form_2252.png"/></picture> and <picture><source srcset="form_2253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_i=0,\ldots,p$" src="form_2253.png"/></picture>, with <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> the polynomial degree of the finite element.</p>
 <p>For a finite element approximation <code>solution</code>, this function writes the decay rate for every cell into the output vector <code>smoothness_indicators</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">fe_legendre</td><td><a class="el" href="classFESeries_1_1Legendre.html">FESeries::Legendre</a> object to calculate coefficients. This object needs to be initialized to have at least <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture> coefficients in each direction for every finite element in the collection, where <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> is its polynomial degree. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">fe_legendre</td><td><a class="el" href="classFESeries_1_1Legendre.html">FESeries::Legendre</a> object to calculate coefficients. This object needs to be initialized to have at least <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture> coefficients in each direction for every finite element in the collection, where <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> is its polynomial degree. </td></tr>
     <tr><td class="paramdir">[in]</td><td class="paramname">dof_handler</td><td>A <a class="el" href="classDoFHandler.html">DoFHandler</a>. </td></tr>
     <tr><td class="paramdir">[in]</td><td class="paramname">solution</td><td>A solution vector. </td></tr>
     <tr><td class="paramdir">[out]</td><td class="paramname">smoothness_indicators</td><td>A vector for smoothness indicators. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">regression_strategy</td><td>Determines which norm will be used on the subset of coefficients <picture><source srcset="form_1038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{k}$" src="form_1038.png"/></picture> with the same absolute value <picture><source srcset="form_2387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|{\bf k}\|_1$" src="form_2387.png"/></picture>. Default is <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::Linfty_norm</a> for a maximum approximation. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">smallest_abs_coefficient</td><td>The smallest absolute value of the coefficient to be used in linear regression. Note that <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">Legendre</a> coefficients of some functions may have a repeating pattern of zero coefficients (i.e. for functions that are locally symmetric or antisymmetric about the midpoint of the element in any coordinate direction). Thus this parameters allows to ignore small (in absolute value) coefficients within the linear regression fit. In case there are less than two nonzero coefficients, the returned value for this cell will be <picture><source srcset="form_2391_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma=\infty$" src="form_2391.png"/></picture>. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">regression_strategy</td><td>Determines which norm will be used on the subset of coefficients <picture><source srcset="form_992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{k}$" src="form_992.png"/></picture> with the same absolute value <picture><source srcset="form_2250_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|{\bf k}\|_1$" src="form_2250.png"/></picture>. Default is <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::Linfty_norm</a> for a maximum approximation. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">smallest_abs_coefficient</td><td>The smallest absolute value of the coefficient to be used in linear regression. Note that <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">Legendre</a> coefficients of some functions may have a repeating pattern of zero coefficients (i.e. for functions that are locally symmetric or antisymmetric about the midpoint of the element in any coordinate direction). Thus this parameters allows to ignore small (in absolute value) coefficients within the linear regression fit. In case there are less than two nonzero coefficients, the returned value for this cell will be <picture><source srcset="form_2254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma=\infty$" src="form_2254.png"/></picture>. </td></tr>
     <tr><td class="paramdir">[in]</td><td class="paramname">only_flagged_cells</td><td>Smoothness indicators are usually used to decide whether to perform h- or p-adaptation. So in most cases, we only need to calculate those indicators on cells flagged for refinement or coarsening. This parameter controls whether this particular subset or all cells will be considered. By default, all cells will be considered. When only flagged cells are supposed to be considered, smoothness indicators will only be set on those vector entries of flagged cells; the others will be set to a signaling NaN.</td></tr>
   </table>
   </dd>
@@ -241,16 +241,16 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const <a class="el" href="classbool.html">bool</a></td>          <td class="paramname"><span class="paramname"><em>only_flagged_cells</em><span class="paramdefsep"> = </span><span class="paramdefval">false</span></span>&#href_anchor"memdoc">
-<p>In this variant of the estimation strategy for higher dimensions, we only consider modes in each coordinate direction, i.e., only mode vectors <picture><source srcset="form_2385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf k$" src="form_2385.png"/></picture> with one nonzero entry. We perform the least-squares fit in each coordinate direction separately and take the lowest decay rate <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture> among them.</p>
+<p>In this variant of the estimation strategy for higher dimensions, we only consider modes in each coordinate direction, i.e., only mode vectors <picture><source srcset="form_2248_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bf k$" src="form_2248.png"/></picture> with one nonzero entry. We perform the least-squares fit in each coordinate direction separately and take the lowest decay rate <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture> among them.</p>
 <p>For a finite element approximation <code>solution</code>, this function writes the decay rate for every cell into the output vector <code>smoothness_indicators</code>.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
-    <tr><td class="paramdir">[in]</td><td class="paramname">fe_legendre</td><td><a class="el" href="classFESeries_1_1Legendre.html">FESeries::Legendre</a> object to calculate coefficients. This object needs to be initialized to have at least <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture> coefficients in each direction, where <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> is the maximum polynomial degree to be used. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">fe_legendre</td><td><a class="el" href="classFESeries_1_1Legendre.html">FESeries::Legendre</a> object to calculate coefficients. This object needs to be initialized to have at least <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture> coefficients in each direction, where <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> is the maximum polynomial degree to be used. </td></tr>
     <tr><td class="paramdir">[in]</td><td class="paramname">dof_handler</td><td>A <a class="el" href="classDoFHandler.html">DoFHandler</a> </td></tr>
     <tr><td class="paramdir">[in]</td><td class="paramname">solution</td><td>A solution vector </td></tr>
     <tr><td class="paramdir">[out]</td><td class="paramname">smoothness_indicators</td><td>A vector for smoothness indicators </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">coefficients_predicate</td><td>A predicate to select <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">Legendre</a> coefficients <picture><source srcset="form_2392_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_j$" src="form_2392.png"/></picture>, <picture><source srcset="form_2393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=0,\ldots,p$" src="form_2393.png"/></picture> for linear regression in each coordinate direction. The user is responsible for updating the vector of <code>flags</code> provided to this function. Note that its size is <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>, where <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> is the polynomial degree of the FE basis on a given element. The default implementation will use all <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">Legendre</a> coefficients in each coordinate direction, i.e. set all elements of the vector to <code>true</code>. </td></tr>
-    <tr><td class="paramdir">[in]</td><td class="paramname">smallest_abs_coefficient</td><td>The smallest absolute value of the coefficient to be used in linear regression in each coordinate direction. Note that <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">Legendre</a> coefficients of some functions may have a repeating pattern of zero coefficients (i.e. for functions that are locally symmetric or antisymmetric about the midpoint of the element in any coordinate direction). Thus this parameters allows to ignore small (in absolute value) coefficients within the linear regression fit. In case there are less than two nonzero coefficients for a coordinate direction, this direction will be skipped. If all coefficients are zero, the returned value for this cell will be <picture><source srcset="form_2391_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma=\infty$" src="form_2391.png"/></picture>. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">coefficients_predicate</td><td>A predicate to select <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">Legendre</a> coefficients <picture><source srcset="form_2255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_j$" src="form_2255.png"/></picture>, <picture><source srcset="form_2256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=0,\ldots,p$" src="form_2256.png"/></picture> for linear regression in each coordinate direction. The user is responsible for updating the vector of <code>flags</code> provided to this function. Note that its size is <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>, where <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> is the polynomial degree of the FE basis on a given element. The default implementation will use all <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">Legendre</a> coefficients in each coordinate direction, i.e. set all elements of the vector to <code>true</code>. </td></tr>
+    <tr><td class="paramdir">[in]</td><td class="paramname">smallest_abs_coefficient</td><td>The smallest absolute value of the coefficient to be used in linear regression in each coordinate direction. Note that <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">Legendre</a> coefficients of some functions may have a repeating pattern of zero coefficients (i.e. for functions that are locally symmetric or antisymmetric about the midpoint of the element in any coordinate direction). Thus this parameters allows to ignore small (in absolute value) coefficients within the linear regression fit. In case there are less than two nonzero coefficients for a coordinate direction, this direction will be skipped. If all coefficients are zero, the returned value for this cell will be <picture><source srcset="form_2254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma=\infty$" src="form_2254.png"/></picture>. </td></tr>
     <tr><td class="paramdir">[in]</td><td class="paramname">only_flagged_cells</td><td>Smoothness indicators are usually used to decide whether to perform h- or p-adaptation. So in most cases, we only need to calculate those indicators on cells flagged for refinement or coarsening. This parameter controls whether this particular subset or all cells will be considered. By default, all cells will be considered. When only flagged cells are supposed to be considered, smoothness indicators will only be set on those vector entries of flagged cells; the others will be set to NaN.</td></tr>
   </table>
   </dd>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSparseMatrixTools.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSparseMatrixTools.html	2024-03-17 21:57:43.103232199 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceSparseMatrixTools.html	2024-03-17 21:57:43.103232199 +0000
@@ -139,18 +139,18 @@
           <td></td>
           <td class="paramtype">SparsityPatternType2 &amp;</td>          <td class="paramname"><span class="paramname"><em>sparsity_pattern_out</em></span>&#href_anchor"memdoc">
 <p>Given a sparse matrix (<code>system_matrix</code>, <code>sparsity_pattern</code>), construct a new sparse matrix (<code>system_matrix_out</code>, <code>sparsity_pattern_out</code>) by restriction  </p><p class="formulaDsp">
-<picture><source srcset="form_1919_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1926_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  A_i = R_i A R_i^T,
-\]" src="form_1919.png"/></picture>
+\]" src="form_1926.png"/></picture>
 </p>
-<p> where the Boolean matrix <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R_i$" src="form_520.png"/></picture> is defined by the entries of <code>requested_is</code>.</p>
-<p>The function can be called by multiple processes with different sets of indices, allowing to assign each process a different <picture><source srcset="form_1920_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_i$" src="form_1920.png"/></picture>.</p>
+<p> where the Boolean matrix <picture><source srcset="form_529_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R_i$" src="form_529.png"/></picture> is defined by the entries of <code>requested_is</code>.</p>
+<p>The function can be called by multiple processes with different sets of indices, allowing to assign each process a different <picture><source srcset="form_1927_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_i$" src="form_1927.png"/></picture>.</p>
 <p>Such a function is useful to implement Schwarz methods, where operations of type  </p><p class="formulaDsp">
-<picture><source srcset="form_1921_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_1928_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  u^{n} = u^{n-1} + \sum_{i} R_i^T A_i^{-1} R_i (f - A u^{n-1})
-\]" src="form_1921.png"/></picture>
+\]" src="form_1928.png"/></picture>
 </p>
-<p> are performed to iteratively solve a system of type <picture><source srcset="form_1593_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Au=f$" src="form_1593.png"/></picture>.</p>
+<p> are performed to iteratively solve a system of type <picture><source srcset="form_1587_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Au=f$" src="form_1587.png"/></picture>.</p>
 <dl class="section warning"><dt>Warning</dt><dd>This is a collective call that needs to be executed by all processes in the communicator of <code>sparse_matrix_in</code>. </dd></dl>
 
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceTensorAccessors.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceTensorAccessors.html	2024-03-17 21:57:43.123232322 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceTensorAccessors.html	2024-03-17 21:57:43.127232347 +0000
@@ -177,7 +177,7 @@
 <dl class="section note"><dt>Note</dt><dd>This function returns an internal class object consisting of an array subscript operator <code>operator[](unsigned int)</code> and an alias <code>value_type</code> describing its return value.</dd></dl>
 <dl class="tparams"><dt>Template Parameters</dt><dd>
   <table class="tparams">
-    <tr><td class="paramname">index</td><td>The index to be shifted to the end. Indices are counted from 0, thus the valid range is <picture><source srcset="form_849_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0\le\text{index}&lt;\text{rank}$" src="form_849.png"/></picture>. </td></tr>
+    <tr><td class="paramname">index</td><td>The index to be shifted to the end. Indices are counted from 0, thus the valid range is <picture><source srcset="form_864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0\le\text{index}&lt;\text{rank}$" src="form_864.png"/></picture>. </td></tr>
     <tr><td class="paramname">rank</td><td>Rank of the tensorial object <code>t</code> </td></tr>
     <tr><td class="paramname">T</td><td>A tensorial object of rank <code>rank</code>. <code>T</code> must provide a local alias <code>value_type</code> and an index operator <code>operator[]()</code> that returns a (const or non-const) reference of <code>value_type</code>. </td></tr>
   </table>
@@ -261,12 +261,12 @@
 </div><div class="memdoc">
 <p>This function contracts two tensorial objects <code>left</code> and <code>right</code> and stores the result in <code>result</code>. The contraction is done over the <em>last</em> <code>no_contr</code> indices of both tensorial objects:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_850_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \text{result}_{i_1,..,i_{r1},j_1,..,j_{r2}}
   = \sum_{k_1,..,k_{\mathrm{no\_contr}}}
     \mathrm{left}_{i_1,..,i_{r1},k_1,..,k_{\mathrm{no\_contr}}}
     \mathrm{right}_{j_1,..,j_{r2},k_1,..,k_{\mathrm{no\_contr}}}
-\]" src="form_850.png"/></picture>
+\]" src="form_865.png"/></picture>
 </p>
 <p>Calling this function is equivalent of writing the following low level code: </p><div class="fragment"><div class="line"><span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_0 = 0; i_0 &lt; dim; ++i_0)</div>
 <div class="line">  ...</div>
@@ -321,12 +321,12 @@
 </div><div class="memdoc">
 <p>Full contraction of three tensorial objects:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_851_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \sum_{i_1,..,i_{r1},j_1,..,j_{r2}}
   \text{left}_{i_1,..,i_{r1}}
   \text{middle}_{i_1,..,i_{r1},j_1,..,j_{r2}}
   \text{right}_{j_1,..,j_{r2}}
-\]" src="form_851.png"/></picture>
+\]" src="form_866.png"/></picture>
 </p>
 <p>Calling this function is equivalent of writing the following low level code: </p><div class="fragment"><div class="line">T1 result = T1();</div>
 <div class="line"><span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i_0 = 0; i_0 &lt; dim; ++i_0)</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceUtilities_1_1LinearAlgebra.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceUtilities_1_1LinearAlgebra.html	2024-03-17 21:57:43.151232495 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceUtilities_1_1LinearAlgebra.html	2024-03-17 21:57:43.155232520 +0000
@@ -134,8 +134,8 @@
       </table>
 </div><div class="memdoc">
 <p>Return the elements of a continuous Givens rotation matrix and the norm of the input vector.</p>
-<p>That is for a given pair <code>x</code> and <code>y</code>, return <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture> , <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> and <picture><source srcset="form_1959_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{x^2+y^2}$" src="form_1959.png"/></picture> such that  </p><p class="formulaDsp">
-<picture><source srcset="form_1960_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>That is for a given pair <code>x</code> and <code>y</code>, return <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture> , <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> and <picture><source srcset="form_1963_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{x^2+y^2}$" src="form_1963.png"/></picture> such that  </p><p class="formulaDsp">
+<picture><source srcset="form_1964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \begin{bmatrix}
 c  &amp; s \\
 -s &amp; c
@@ -149,7 +149,7 @@
 \sqrt{x^2+y^2} \\
 0
 \end{bmatrix}
-\]" src="form_1960.png"/></picture>
+\]" src="form_1964.png"/></picture>
 </p>
 <dl class="section note"><dt>Note</dt><dd>The function is implemented for real valued numbers only. </dd></dl>
 
@@ -176,8 +176,8 @@
       </table>
 </div><div class="memdoc">
 <p>Return the elements of a hyperbolic rotation matrix.</p>
-<p>That is for a given pair <code>x</code> and <code>y</code>, return <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture> , <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> and <picture><source srcset="form_414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_414.png"/></picture> such that  </p><p class="formulaDsp">
-<picture><source srcset="form_1961_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>That is for a given pair <code>x</code> and <code>y</code>, return <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture> , <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> and <picture><source srcset="form_378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_378.png"/></picture> such that  </p><p class="formulaDsp">
+<picture><source srcset="form_1965_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \begin{bmatrix}
 c  &amp; -s \\
 -s &amp; c
@@ -191,9 +191,9 @@
 r \\
 0
 \end{bmatrix}
-\]" src="form_1961.png"/></picture>
+\]" src="form_1965.png"/></picture>
 </p>
-<p>Real valued solution only exists if <picture><source srcset="form_1962_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|x|&gt;|g|$" src="form_1962.png"/></picture>, the function will throw an error otherwise.</p>
+<p>Real valued solution only exists if <picture><source srcset="form_1966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|x|&gt;|g|$" src="form_1966.png"/></picture>, the function will throw an error otherwise.</p>
 <dl class="section note"><dt>Note</dt><dd>The function is implemented for real valued numbers only. </dd></dl>
 
 </div>
@@ -230,7 +230,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">std::vector&lt; double &gt; *</td>          <td class="paramname"><span class="paramname"><em>eigenvalues</em><span class="paramdefsep"> = </span><span class="paramdefval">nullptr</span></span>&#href_anchor"memdoc">
-<p>Estimate an upper bound for the largest eigenvalue of <code>H</code> by a <code>k</code> -step Lanczos process starting from the initial vector <code>v0</code>. Typical values of <code>k</code> are below 10. This estimator computes a k-step Lanczos decomposition <picture><source srcset="form_1963_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H V_k=V_k T_k+f_k e_k^T$" src="form_1963.png"/></picture> where <picture><source srcset="form_1964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_k$" src="form_1964.png"/></picture> contains k Lanczos basis, <picture><source srcset="form_1965_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_k^TV_k=I_k$" src="form_1965.png"/></picture>, <picture><source srcset="form_1966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_k$" src="form_1966.png"/></picture> is the tridiagonal Lanczos matrix, <picture><source srcset="form_1967_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_k$" src="form_1967.png"/></picture> is a residual vector <picture><source srcset="form_1968_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_k^TV_k=0$" src="form_1968.png"/></picture>, and <picture><source srcset="form_1969_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_k$" src="form_1969.png"/></picture> is the k-th canonical basis of <picture><source srcset="form_1970_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^k$" src="form_1970.png"/></picture>. The returned value is <picture><source srcset="form_1971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ ||T_k||_2 + ||f_k||_2$" src="form_1971.png"/></picture>. If <code>eigenvalues</code> is not <code>nullptr</code>, the eigenvalues of <picture><source srcset="form_1966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_k$" src="form_1966.png"/></picture> will be written there.</p>
+<p>Estimate an upper bound for the largest eigenvalue of <code>H</code> by a <code>k</code> -step Lanczos process starting from the initial vector <code>v0</code>. Typical values of <code>k</code> are below 10. This estimator computes a k-step Lanczos decomposition <picture><source srcset="form_1967_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H V_k=V_k T_k+f_k e_k^T$" src="form_1967.png"/></picture> where <picture><source srcset="form_1968_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_k$" src="form_1968.png"/></picture> contains k Lanczos basis, <picture><source srcset="form_1969_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_k^TV_k=I_k$" src="form_1969.png"/></picture>, <picture><source srcset="form_1970_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_k$" src="form_1970.png"/></picture> is the tridiagonal Lanczos matrix, <picture><source srcset="form_1971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_k$" src="form_1971.png"/></picture> is a residual vector <picture><source srcset="form_1972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_k^TV_k=0$" src="form_1972.png"/></picture>, and <picture><source srcset="form_1973_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_k$" src="form_1973.png"/></picture> is the k-th canonical basis of <picture><source srcset="form_1974_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^k$" src="form_1974.png"/></picture>. The returned value is <picture><source srcset="form_1975_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ ||T_k||_2 + ||f_k||_2$" src="form_1975.png"/></picture>. If <code>eigenvalues</code> is not <code>nullptr</code>, the eigenvalues of <picture><source srcset="form_1970_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_k$" src="form_1970.png"/></picture> will be written there.</p>
 <p><code>vector_memory</code> is used to allocate memory for temporary vectors. OperatorType has to provide <code>vmult</code> operation with VectorType.</p>
 <p>This function implements the algorithm from </p><div class="fragment"><div class="line">@article{Zhou2006,</div>
 <div class="line">  Title   = {Self-consistent-field Calculations Using Chebyshev-filtered</div>
@@ -242,7 +242,7 @@
 <div class="line">  Volume  = {219},</div>
 <div class="line">  Pages   = {172--184},</div>
 <div class="line">}</div>
-</div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>This function uses Lapack routines to compute the largest eigenvalue of <picture><source srcset="form_1966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_k$" src="form_1966.png"/></picture>.</dd>
+</div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>This function uses Lapack routines to compute the largest eigenvalue of <picture><source srcset="form_1970_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_k$" src="form_1970.png"/></picture>.</dd>
 <dd>
 This function provides an alternate estimate to that obtained from several steps of <a class="el" href="classSolverCG.html">SolverCG</a> with <a class="el" href="classSolverCG.html#href_anchor">SolverCG&lt;VectorType&gt;::connect_eigenvalues_slot()</a>. </dd></dl>
 
@@ -285,19 +285,19 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype"><a class="el" href="classVectorMemory.html">VectorMemory</a>&lt; VectorType &gt; &amp;</td>          <td class="paramname"><span class="paramname"><em>vector_memory</em></span>&#href_anchor"memdoc">
-<p>Apply Chebyshev polynomial of the operator <code>H</code> to <code>x</code>. For a non-defective operator <picture><source srcset="form_1769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H$" src="form_1769.png"/></picture> with a complete set of eigenpairs <picture><source srcset="form_1972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H \psi_i = \lambda_i \psi_i$" src="form_1972.png"/></picture>, the action of a polynomial filter <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> is given by <picture><source srcset="form_1973_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p(H)x =\sum_i a_i p(\lambda_i) \psi_i$" src="form_1973.png"/></picture>, where <picture><source srcset="form_1974_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=: \sum_i a_i
-\psi_i$" src="form_1974.png"/></picture>. Thus by appropriately choosing the polynomial filter, one can alter the eigenmodes contained in <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>.</p>
-<p>This function uses Chebyshev polynomials of first kind. Below is an example of polynomial <picture><source srcset="form_1975_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_n(x)$" src="form_1975.png"/></picture> of degree <picture><source srcset="form_1976_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=8$" src="form_1976.png"/></picture> normalized to unity at <picture><source srcset="form_1977_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-1.2$" src="form_1977.png"/></picture>. </p><table class="doxtable">
+<p>Apply Chebyshev polynomial of the operator <code>H</code> to <code>x</code>. For a non-defective operator <picture><source srcset="form_1768_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H$" src="form_1768.png"/></picture> with a complete set of eigenpairs <picture><source srcset="form_1976_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H \psi_i = \lambda_i \psi_i$" src="form_1976.png"/></picture>, the action of a polynomial filter <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> is given by <picture><source srcset="form_1977_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p(H)x =\sum_i a_i p(\lambda_i) \psi_i$" src="form_1977.png"/></picture>, where <picture><source srcset="form_1978_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=: \sum_i a_i
+\psi_i$" src="form_1978.png"/></picture>. Thus by appropriately choosing the polynomial filter, one can alter the eigenmodes contained in <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>.</p>
+<p>This function uses Chebyshev polynomials of first kind. Below is an example of polynomial <picture><source srcset="form_1979_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_n(x)$" src="form_1979.png"/></picture> of degree <picture><source srcset="form_1980_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=8$" src="form_1980.png"/></picture> normalized to unity at <picture><source srcset="form_1981_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-1.2$" src="form_1981.png"/></picture>. </p><table class="doxtable">
 <tr>
 <td align="center"><div class="image">
 <img src="chebyshev8.png" alt=""/>
 </div>
    </td></tr>
 </table>
-<p>By introducing a linear mapping <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture> from <code>unwanted_spectrum</code> to <picture><source srcset="form_582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]$" src="form_582.png"/></picture>, we can dump the corresponding modes in <code>x</code>. The higher the polynomial degree <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>, the more rapid it grows outside of the <picture><source srcset="form_582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]$" src="form_582.png"/></picture>. In order to avoid numerical overflow, we normalize polynomial filter to unity at <code>tau</code>. Thus, the filtered operator is <picture><source srcset="form_1978_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p(H) = T_n(L(H))/T_n(L(\tau))$" src="form_1978.png"/></picture>.</p>
-<p>The action of the Chebyshev filter only requires evaluation of <code>vmult()</code> of <code>H</code> and is based on the recursion equation for Chebyshev polynomial of degree <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>: <picture><source srcset="form_1979_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_{n}(x) = 2x T_{n-1}(x) - T_{n-2}(x)$" src="form_1979.png"/></picture> with <picture><source srcset="form_1980_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_0(x)=1$" src="form_1980.png"/></picture> and <picture><source srcset="form_1981_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_1(x)=x$" src="form_1981.png"/></picture>.</p>
+<p>By introducing a linear mapping <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture> from <code>unwanted_spectrum</code> to <picture><source srcset="form_582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]$" src="form_582.png"/></picture>, we can dump the corresponding modes in <code>x</code>. The higher the polynomial degree <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>, the more rapid it grows outside of the <picture><source srcset="form_582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]$" src="form_582.png"/></picture>. In order to avoid numerical overflow, we normalize polynomial filter to unity at <code>tau</code>. Thus, the filtered operator is <picture><source srcset="form_1982_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p(H) = T_n(L(H))/T_n(L(\tau))$" src="form_1982.png"/></picture>.</p>
+<p>The action of the Chebyshev filter only requires evaluation of <code>vmult()</code> of <code>H</code> and is based on the recursion equation for Chebyshev polynomial of degree <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>: <picture><source srcset="form_1983_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_{n}(x) = 2x T_{n-1}(x) - T_{n-2}(x)$" src="form_1983.png"/></picture> with <picture><source srcset="form_1984_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_0(x)=1$" src="form_1984.png"/></picture> and <picture><source srcset="form_1985_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_1(x)=x$" src="form_1985.png"/></picture>.</p>
 <p><code>vector_memory</code> is used to allocate memory for temporary objects.</p>
-<p>This function implements the algorithm (with a minor fix of sign of <picture><source srcset="form_1982_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_1$" src="form_1982.png"/></picture>) from </p><div class="fragment"><div class="line">@article{Zhou2014,</div>
+<p>This function implements the algorithm (with a minor fix of sign of <picture><source srcset="form_1986_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_1$" src="form_1986.png"/></picture>) from </p><div class="fragment"><div class="line">@article{Zhou2014,</div>
 <div class="line">  Title   = {Chebyshev-filtered subspace iteration method free of sparse</div>
 <div class="line">             diagonalization for solving the Kohn--Sham equation},</div>
 <div class="line">  Author  = {Zhou, Yunkai and Chelikowsky, James R and Saad, Yousef},</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceUtilities_1_1MPI_1_1ConsensusAlgorithms.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceUtilities_1_1MPI_1_1ConsensusAlgorithms.html	2024-03-17 21:57:43.187232717 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceUtilities_1_1MPI_1_1ConsensusAlgorithms.html	2024-03-17 21:57:43.191232742 +0000
@@ -137,7 +137,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>A namespace for algorithms that implement the task of communicating in a dynamic-sparse way. In computer science, this is often called a <a href="https://en.wikipedia.org/wiki/Consensus_algorithm">consensus problem</a>.</p>
-<p>The problem consensus algorithms are trying to solve is this: Let's say you have <picture><source srcset="form_175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_175.png"/></picture> processes that work together via <a class="el" href="namespaceUtilities_1_1MPI.html">MPI</a>. Each (or at least some) of these want to send information to some of the other processes, or request information from other processes. No process knows which other process wants to communicate with them. The challenge is to determine who needs to talk to whom and what information needs to be sent, and to come up with an algorithm that ensures that this communication happens.</p>
+<p>The problem consensus algorithms are trying to solve is this: Let's say you have <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_149.png"/></picture> processes that work together via <a class="el" href="namespaceUtilities_1_1MPI.html">MPI</a>. Each (or at least some) of these want to send information to some of the other processes, or request information from other processes. No process knows which other process wants to communicate with them. The challenge is to determine who needs to talk to whom and what information needs to be sent, and to come up with an algorithm that ensures that this communication happens.</p>
 <p>That this is not a trivial problem can be seen by an analogy of the postal service. There, some senders may request information from some other participants in the postal service. So they send a letter that requests the information, but the recipients do not know how many such letters they need to expect (or that they should expect any at all). They also do not know how long they need to keep checking their mailbox for incoming requests. The recipients can be considered reliable, however: We can assume that everyone who is sent a request puts a letter with the answer in the mail. This time at least the recipients of these answers know that they are waiting for these answers because they have previously sent a request. They do not know in advance, however, when the answer will arrive and how long to wait. The goal of a consensus algorithm is then to come up with a strategy in which every participant can say who they want to send requests to, what that request is, and is then guaranteed an answer. The algorithm will only return when all requests by all participants have been answered and the answer delivered to the requesters.</p>
 <p>The problem is generally posed in terms of <em>requests</em> and <em>answers</em>. In practice, either of these two may be empty messages. For example, processes may simply want to send information to others that they know these others need; in this case, the "answer" message may be empty and its meaning is simply an affirmation that the information was received. Similarly, in some cases processes simply need to inform others that they want information, but the destination process knows what information is being requested (based on where in the program the request happens) and can send that information without there be any identifying information in the request; in that case, the request message may be empty and simply serve to identify the requester. (Each message can be queried for its sender.)</p>
 <p>As mentioned in the first paragraph, the algorithms we are interested in are "dynamic-sparse":</p><ul>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceVectorTools.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceVectorTools.html	2024-03-17 21:57:43.311233483 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceVectorTools.html	2024-03-17 21:57:43.311233483 +0000
@@ -332,7 +332,7 @@
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">Projection: compute the <em>L</em><sup>2</sup>-projection of the given function onto the finite element space, i.e. if <em>f</em> is the function to be projected, compute <em>f<sub>h</sub></em> in <em>V<sub>h</sub></em> such that (<em>f<sub>h</sub></em>,<em>v<sub>h</sub></em>)=(<em>f</em>,<em>v<sub>h</sub></em>) for all discrete test functions <em>v<sub>h</sub></em>. This is done through the solution of the linear system of equations <em> M v = f</em> where <em>M</em> is the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> <picture><source srcset="form_2350_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_{ij} = \int_\Omega \phi_i(x) \phi_j(x) dx$" src="form_2350.png"/></picture> and <picture><source srcset="form_2351_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i = \int_\Omega f(x) \phi_i(x) dx$" src="form_2351.png"/></picture>. The solution vector <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> then is the nodal representation of the projection <em>f<sub>h</sub></em>. The <a class="el" href="#href_anchor">project()</a> functions are used in the <a class="el" href="step_21.html">step-21</a> and <a class="el" href="step_23.html">step-23</a> tutorial programs.</p>
+<p class="startli">Projection: compute the <em>L</em><sup>2</sup>-projection of the given function onto the finite element space, i.e. if <em>f</em> is the function to be projected, compute <em>f<sub>h</sub></em> in <em>V<sub>h</sub></em> such that (<em>f<sub>h</sub></em>,<em>v<sub>h</sub></em>)=(<em>f</em>,<em>v<sub>h</sub></em>) for all discrete test functions <em>v<sub>h</sub></em>. This is done through the solution of the linear system of equations <em> M v = f</em> where <em>M</em> is the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> <picture><source srcset="form_2262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_{ij} = \int_\Omega \phi_i(x) \phi_j(x) dx$" src="form_2262.png"/></picture> and <picture><source srcset="form_2263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i = \int_\Omega f(x) \phi_i(x) dx$" src="form_2263.png"/></picture>. The solution vector <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> then is the nodal representation of the projection <em>f<sub>h</sub></em>. The <a class="el" href="#href_anchor">project()</a> functions are used in the <a class="el" href="step_21.html">step-21</a> and <a class="el" href="step_23.html">step-23</a> tutorial programs.</p>
 <p class="interli">In order to get proper results, it be may necessary to treat boundary conditions right. Below are listed some cases where this may be needed. If needed, this is done by <em>L</em><sup>2</sup>-projection of the trace of the given function onto the finite element space restricted to the boundary of the domain, then taking this information and using it to eliminate the boundary nodes from the mass matrix of the whole domain, using the <a class="el" href="namespaceMatrixTools.html#href_anchor">MatrixTools::apply_boundary_values()</a> function. The projection of the trace of the function to the boundary is done with the <a class="el" href="#href_anchor">VectorTools::project_boundary_values()</a> (see below) function, which is called with a map of boundary functions std::map&lt;<a class="el" href="namespacetypes.html#href_anchor">types::boundary_id</a>, const Function&lt;spacedim,number&gt;*&gt; in which all boundary indicators from zero to <a class="el" href="namespacenumbers.html#href_anchor">numbers::internal_face_boundary_id</a>-1 (<a class="el" href="namespacenumbers.html#href_anchor">numbers::internal_face_boundary_id</a> is used for other purposes, see the <a class="el" href="classTriangulation.html">Triangulation</a> class documentation) point to the function to be projected. The projection to the boundary takes place using a second quadrature formula on the boundary given to the <a class="el" href="#href_anchor">project()</a> function. The first quadrature formula is used to compute the right hand side and for numerical quadrature of the mass matrix.</p>
 <p class="interli">The projection of the boundary values first, then eliminating them from the global system of equations is not needed usually. It may be necessary if you want to enforce special restrictions on the boundary values of the projected function, for example in time dependent problems: you may want to project the initial values but need consistency with the boundary values for later times. Since the latter are projected onto the boundary in each time step, it is necessary that we also project the boundary values of the initial values, before projecting them to the whole domain.</p>
 <p class="interli">Obviously, the results of the two schemes for projection are different. Usually, when projecting to the boundary first, the <em>L</em><sup>2</sup>-norm of the difference between original function and projection over the whole domain will be larger (factors of five have been observed) while the <em>L</em><sup>2</sup>-norm of the error integrated over the boundary should of course be less. The reverse should also hold if no projection to the boundary is performed.</p>
@@ -342,17 +342,17 @@
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">Creation of right hand side vectors: The <a class="el" href="#href_anchor">create_right_hand_side()</a> function computes the vector <picture><source srcset="form_2351_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i = \int_\Omega f(x) \phi_i(x) dx$" src="form_2351.png"/></picture>. This is the same as what the <code>MatrixCreator::create_*</code> functions which take a right hand side do, but without assembling a matrix.</p>
+<p class="startli">Creation of right hand side vectors: The <a class="el" href="#href_anchor">create_right_hand_side()</a> function computes the vector <picture><source srcset="form_2263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i = \int_\Omega f(x) \phi_i(x) dx$" src="form_2263.png"/></picture>. This is the same as what the <code>MatrixCreator::create_*</code> functions which take a right hand side do, but without assembling a matrix.</p>
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">Creation of right hand side vectors for point sources: The <a class="el" href="#href_anchor">create_point_source_vector()</a> function computes the vector <picture><source srcset="form_2352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_i =
-\int_\Omega \delta(x-x_0) \phi_i(x) dx$" src="form_2352.png"/></picture>.</p>
+<p class="startli">Creation of right hand side vectors for point sources: The <a class="el" href="#href_anchor">create_point_source_vector()</a> function computes the vector <picture><source srcset="form_2264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_i =
+\int_\Omega \delta(x-x_0) \phi_i(x) dx$" src="form_2264.png"/></picture>.</p>
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">Creation of boundary right hand side vectors: The <a class="el" href="#href_anchor">create_boundary_right_hand_side()</a> function computes the vector <picture><source srcset="form_2353_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i =
-\int_{\partial\Omega} g(x) \phi_i(x) dx$" src="form_2353.png"/></picture>. This is the right hand side contribution of boundary forces when having inhomogeneous Neumann boundary values in Laplace's equation or other second order operators. This function also takes an optional argument denoting over which parts of the boundary the integration shall extend. If the default argument is used, it is applied to all boundaries.</p>
+<p class="startli">Creation of boundary right hand side vectors: The <a class="el" href="#href_anchor">create_boundary_right_hand_side()</a> function computes the vector <picture><source srcset="form_2265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i =
+\int_{\partial\Omega} g(x) \phi_i(x) dx$" src="form_2265.png"/></picture>. This is the right hand side contribution of boundary forces when having inhomogeneous Neumann boundary values in Laplace's equation or other second order operators. This function also takes an optional argument denoting over which parts of the boundary the integration shall extend. If the default argument is used, it is applied to all boundaries.</p>
 <p class="endli"></p>
 </li>
 <li>
@@ -376,7 +376,7 @@
 <p class="interli">The infinity norm of the difference on a given cell returns the maximum absolute value of the difference at the quadrature points given by the quadrature formula parameter. This will in some cases not be too good an approximation, since for example the Gauss quadrature formulae do not evaluate the difference at the end or corner points of the cells. You may want to choose a quadrature formula with more quadrature points or one with another distribution of the quadrature points in this case. You should also take into account the superconvergence properties of finite elements in some points: for example in 1d, the standard finite element method is a collocation method and should return the exact value at nodal points. Therefore, the trapezoidal rule should always return a vanishing L-infinity error. Conversely, in 2d the maximum L-infinity error should be located at the vertices or at the center of the cell, which would make it plausible to use the Simpson quadrature rule. On the other hand, there may be superconvergence at Gauss integration points. These examples are not intended as a rule of thumb, rather they are thought to illustrate that the use of the wrong quadrature formula may show a significantly wrong result and care should be taken to chose the right formula.</p>
 <p class="interli">The <em>H</em><sup>1</sup> seminorm is the <em>L</em><sup>2</sup> norm of the gradient of the difference. The square of the full <em>H</em><sup>1</sup> norm is the sum of the square of seminorm and the square of the <em>L</em><sup>2</sup> norm.</p>
 <p class="interli">To get the global <em>L<sup>1</sup></em> error, you have to sum up the entries in <code>difference</code>, e.g. using <a class="el" href="classVector.html#href_anchor">Vector::l1_norm()</a> function. For the global <em>L</em><sup>2</sup> difference, you have to sum up the squares of the entries and take the root of the sum, e.g. using <a class="el" href="classVector.html#href_anchor">Vector::l2_norm()</a>. These two operations represent the <em>l</em><sub>1</sub> and <em>l</em><sub>2</sub> norms of the vectors, but you need not take the absolute value of each entry, since the cellwise norms are already positive.</p>
-<p class="interli">To get the global mean difference, simply sum up the elements as above. To get the <picture><source srcset="form_1691_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_\infty$" src="form_1691.png"/></picture> norm, take the maximum of the vector elements, e.g. using the <a class="el" href="classVector.html#href_anchor">Vector::linfty_norm()</a> function.</p>
+<p class="interli">To get the global mean difference, simply sum up the elements as above. To get the <picture><source srcset="form_1694_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_\infty$" src="form_1694.png"/></picture> norm, take the maximum of the vector elements, e.g. using the <a class="el" href="classVector.html#href_anchor">Vector::linfty_norm()</a> function.</p>
 <p class="interli">For the global <em>H</em><sup>1</sup> norm and seminorm, the same rule applies as for the <em>L</em><sup>2</sup> norm: compute the <em>l</em><sub>2</sub> norm of the cell error vector.</p>
 <p class="endli">Note that, in the codimension one case, if you ask for a norm that requires the computation of a gradient, then the provided function is automatically projected along the curve, and the difference is only computed on the tangential part of the gradient, since no information is available on the normal component of the gradient anyway. </p>
 </li>
@@ -395,220 +395,220 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Denote which norm/integral is to be computed by the <a class="el" href="#href_anchor">integrate_difference()</a> function on each cell and <a class="el" href="#href_anchor">compute_global_error()</a> for the whole domain. Let <picture><source srcset="form_2252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f:\Omega \rightarrow \mathbb{R}^c$" src="form_2252.png"/></picture> be a finite element function with <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture> components where component <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture> is denoted by <picture><source srcset="form_2253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_c$" src="form_2253.png"/></picture> and <picture><source srcset="form_2254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{f}$" src="form_2254.png"/></picture> be the reference function (the <code>fe_function</code> and <code>exact_solution</code> arguments to <a class="el" href="#href_anchor">integrate_difference()</a>). Let <picture><source srcset="form_2255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_c = \hat{f}_c - f_c$" src="form_2255.png"/></picture> be the difference or error between the two. Further, let <picture><source srcset="form_2256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w:\Omega \rightarrow \mathbb{R}^c$" src="form_2256.png"/></picture> be the <code>weight</code> function of <a class="el" href="#href_anchor">integrate_difference()</a>, which is assumed to be equal to one if not supplied. Finally, let <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> be the <code>exponent</code> argument (for <picture><source srcset="form_2257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_p$" src="form_2257.png"/></picture>-norms).</p>
-<p>In the following,we denote by <picture><source srcset="form_2258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E_K$" src="form_2258.png"/></picture> the local error computed by <a class="el" href="#href_anchor">integrate_difference()</a> on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, whereas <picture><source srcset="form_1117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E$" src="form_1117.png"/></picture> is the global error computed by <a class="el" href="#href_anchor">compute_global_error()</a>. Note that integrals are approximated by quadrature in the usual way:  </p><p class="formulaDsp">
-<picture><source srcset="form_2259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Denote which norm/integral is to be computed by the <a class="el" href="#href_anchor">integrate_difference()</a> function on each cell and <a class="el" href="#href_anchor">compute_global_error()</a> for the whole domain. Let <picture><source srcset="form_2301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f:\Omega \rightarrow \mathbb{R}^c$" src="form_2301.png"/></picture> be a finite element function with <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture> components where component <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture> is denoted by <picture><source srcset="form_2302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_c$" src="form_2302.png"/></picture> and <picture><source srcset="form_2303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{f}$" src="form_2303.png"/></picture> be the reference function (the <code>fe_function</code> and <code>exact_solution</code> arguments to <a class="el" href="#href_anchor">integrate_difference()</a>). Let <picture><source srcset="form_2304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_c = \hat{f}_c - f_c$" src="form_2304.png"/></picture> be the difference or error between the two. Further, let <picture><source srcset="form_2305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w:\Omega \rightarrow \mathbb{R}^c$" src="form_2305.png"/></picture> be the <code>weight</code> function of <a class="el" href="#href_anchor">integrate_difference()</a>, which is assumed to be equal to one if not supplied. Finally, let <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> be the <code>exponent</code> argument (for <picture><source srcset="form_2306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_p$" src="form_2306.png"/></picture>-norms).</p>
+<p>In the following,we denote by <picture><source srcset="form_2307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E_K$" src="form_2307.png"/></picture> the local error computed by <a class="el" href="#href_anchor">integrate_difference()</a> on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, whereas <picture><source srcset="form_1123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E$" src="form_1123.png"/></picture> is the global error computed by <a class="el" href="#href_anchor">compute_global_error()</a>. Note that integrals are approximated by quadrature in the usual way:  </p><p class="formulaDsp">
+<picture><source srcset="form_2308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_A f(x) dx \approx \sum_q f(x_q) \omega_q.
-\]" src="form_2259.png"/></picture>
+\]" src="form_2308.png"/></picture>
 </p>
-<p> Similarly for suprema over a cell <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_2260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> Similarly for suprema over a cell <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_2309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \sup_{x\in T} |f(x)| dx \approx \max_q |f(x_q)|.
-\]" src="form_2260.png"/></picture>
+\]" src="form_2309.png"/></picture>
 </p>
  <table class="fieldtable">
 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a69967cb7a148a7169963126249213db1a485d4198c1f422388b80cadb98af1f27" name="a69967cb7a148a7169963126249213db1a485d4198c1f422388b80cadb98af1f27"></a>mean&#160;</td><td class="fielddoc"><p>The function or difference of functions is integrated on each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_2261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E_K
 = \int_K \sum_c (\hat{f}_c - f_c) \, w_c
 = \int_K \sum_c e_c \, w_c
-\]" src="form_2261.png"/></picture>
+\]" src="form_2310.png"/></picture>
 </p>
 <p> and summed up to get  </p><p class="formulaDsp">
-<picture><source srcset="form_2262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2311_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E = \sum_K E_K
     = \int_\Omega \sum_c (\hat{f}_c - f_c) \, w_c
-\]" src="form_2262.png"/></picture>
+\]" src="form_2311.png"/></picture>
 </p>
-<p> or, for <picture><source srcset="form_2263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w \equiv 1$" src="form_2263.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_2264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> or, for <picture><source srcset="form_2312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w \equiv 1$" src="form_2312.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_2313_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E = \int_\Omega (\hat{f} - f)
     = \int_\Omega e.
-\]" src="form_2264.png"/></picture>
+\]" src="form_2313.png"/></picture>
 </p>
-<p>Note: This differs from what is typically known as the mean of a function by a factor of <picture><source srcset="form_2265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{1}{|\Omega|}$" src="form_2265.png"/></picture>. To compute the mean you can also use <a class="el" href="#href_anchor">compute_mean_value()</a>. Finally, pay attention to the sign: if <picture><source srcset="form_2266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{f}=0$" src="form_2266.png"/></picture>, this will compute the negative of the mean of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture>. </p>
+<p>Note: This differs from what is typically known as the mean of a function by a factor of <picture><source srcset="form_2314_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{1}{|\Omega|}$" src="form_2314.png"/></picture>. To compute the mean you can also use <a class="el" href="#href_anchor">compute_mean_value()</a>. Finally, pay attention to the sign: if <picture><source srcset="form_2315_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{f}=0$" src="form_2315.png"/></picture>, this will compute the negative of the mean of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture>. </p>
 </td></tr>
 <tr><td class="fieldname"><a id="a69967cb7a148a7169963126249213db1a8a97c0127bcfceec1fefbd0ad5839357" name="a69967cb7a148a7169963126249213db1a8a97c0127bcfceec1fefbd0ad5839357"></a>L1_norm&#160;</td><td class="fielddoc"><p>The absolute value of the function is integrated:  </p><p class="formulaDsp">
-<picture><source srcset="form_2267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2316_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E_K = \int_K \sum_c |e_c| \, w_c
-\]" src="form_2267.png"/></picture>
+\]" src="form_2316.png"/></picture>
 </p>
 <p> and  </p><p class="formulaDsp">
-<picture><source srcset="form_2268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2317_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E = \sum_K E_K = \int_\Omega \sum_c |e_c| w_c,
-\]" src="form_2268.png"/></picture>
+\]" src="form_2317.png"/></picture>
 </p>
-<p> or, for <picture><source srcset="form_2263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w \equiv 1$" src="form_2263.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_2269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> or, for <picture><source srcset="form_2312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w \equiv 1$" src="form_2312.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_2318_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E  = \| e \|_{L^1}.
-\]" src="form_2269.png"/></picture>
+\]" src="form_2318.png"/></picture>
 </p>
  </td></tr>
 <tr><td class="fieldname"><a id="a69967cb7a148a7169963126249213db1aa3903caf348e2d5dc54d1b49e15c1e8e" name="a69967cb7a148a7169963126249213db1aa3903caf348e2d5dc54d1b49e15c1e8e"></a>L2_norm&#160;</td><td class="fielddoc"><p>The square of the function is integrated and the square root of the result is computed on each cell:  </p><p class="formulaDsp">
-<picture><source srcset="form_2270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2319_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E_K = \sqrt{ \int_K \sum_c e_c^2 \, w_c }
-\]" src="form_2270.png"/></picture>
+\]" src="form_2319.png"/></picture>
 </p>
 <p> and  </p><p class="formulaDsp">
-<picture><source srcset="form_2271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E = \sqrt{\sum_K E_K^2} = \sqrt{ \int_\Omega  \sum_c e_c^2 \, w_c }
-\]" src="form_2271.png"/></picture>
+\]" src="form_2320.png"/></picture>
 </p>
-<p> or, for <picture><source srcset="form_2263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w \equiv 1$" src="form_2263.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_2272_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> or, for <picture><source srcset="form_2312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w \equiv 1$" src="form_2312.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_2321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E = \sqrt{ \int_\Omega e^2 }
     = \| e \|_{L^2}
-\]" src="form_2272.png"/></picture>
+\]" src="form_2321.png"/></picture>
 </p>
  </td></tr>
-<tr><td class="fieldname"><a id="a69967cb7a148a7169963126249213db1abbc2c7f8863e60f4ac6a6128c06676f6" name="a69967cb7a148a7169963126249213db1abbc2c7f8863e60f4ac6a6128c06676f6"></a>Lp_norm&#160;</td><td class="fielddoc"><p>The absolute value to the <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>-th power is integrated and the <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>-th root is computed on each cell. The exponent <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> is the <code>exponent</code> argument of <a class="el" href="#href_anchor">integrate_difference()</a> and <a class="el" href="#href_anchor">compute_mean_value()</a>:  </p><p class="formulaDsp">
-<picture><source srcset="form_2273_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<tr><td class="fieldname"><a id="a69967cb7a148a7169963126249213db1abbc2c7f8863e60f4ac6a6128c06676f6" name="a69967cb7a148a7169963126249213db1abbc2c7f8863e60f4ac6a6128c06676f6"></a>Lp_norm&#160;</td><td class="fielddoc"><p>The absolute value to the <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>-th power is integrated and the <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>-th root is computed on each cell. The exponent <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> is the <code>exponent</code> argument of <a class="el" href="#href_anchor">integrate_difference()</a> and <a class="el" href="#href_anchor">compute_mean_value()</a>:  </p><p class="formulaDsp">
+<picture><source srcset="form_2322_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E_K = \left( \int_K \sum_c |e_c|^p \, w_c \right)^{1/p}
-\]" src="form_2273.png"/></picture>
+\]" src="form_2322.png"/></picture>
 </p>
 <p> and  </p><p class="formulaDsp">
-<picture><source srcset="form_2274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2323_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E = \left( \sum_K E_K^p \right)^{1/p}
-\]" src="form_2274.png"/></picture>
+\]" src="form_2323.png"/></picture>
 </p>
-<p> or, for <picture><source srcset="form_2263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w \equiv 1$" src="form_2263.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_2275_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> or, for <picture><source srcset="form_2312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w \equiv 1$" src="form_2312.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_2324_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E = \| e \|_{L^p}.
-\]" src="form_2275.png"/></picture>
+\]" src="form_2324.png"/></picture>
 </p>
  </td></tr>
 <tr><td class="fieldname"><a id="a69967cb7a148a7169963126249213db1a0532fa97d3218aed4fa2e7fb0a2017e4" name="a69967cb7a148a7169963126249213db1a0532fa97d3218aed4fa2e7fb0a2017e4"></a>Linfty_norm&#160;</td><td class="fielddoc"><p>The maximum absolute value of the function:  </p><p class="formulaDsp">
-<picture><source srcset="form_2276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2325_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E_K = \sup_K \max_c |e_c| \, w_c
-\]" src="form_2276.png"/></picture>
+\]" src="form_2325.png"/></picture>
 </p>
 <p> and  </p><p class="formulaDsp">
-<picture><source srcset="form_2277_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E = \max_K E_K
 = \sup_\Omega \max_c |e_c| \, w_c
-\]" src="form_2277.png"/></picture>
+\]" src="form_2326.png"/></picture>
 </p>
-<p> or, for <picture><source srcset="form_2263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w \equiv 1$" src="form_2263.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_2278_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> or, for <picture><source srcset="form_2312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w \equiv 1$" src="form_2312.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_2327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E  = \sup_\Omega \|e\|_\infty = \| e \|_{L^\infty}.
-\]" src="form_2278.png"/></picture>
+\]" src="form_2327.png"/></picture>
 </p>
  </td></tr>
 <tr><td class="fieldname"><a id="a69967cb7a148a7169963126249213db1a1048f76e7fb0aea6e654ff1cf036a65f" name="a69967cb7a148a7169963126249213db1a1048f76e7fb0aea6e654ff1cf036a65f"></a>H1_seminorm&#160;</td><td class="fielddoc"><p><a class="el" href="#href_anchor">L2_norm</a> of the gradient:  </p><p class="formulaDsp">
-<picture><source srcset="form_2279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2328_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E_K = \sqrt{ \int_K \sum_c (\nabla e_c)^2 \, w_c }
-\]" src="form_2279.png"/></picture>
+\]" src="form_2328.png"/></picture>
 </p>
 <p> and  </p><p class="formulaDsp">
-<picture><source srcset="form_2280_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2329_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
/usr/share/doc/packages/dealii/doxygen/deal.II/namespacehp_1_1Refinement.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespacehp_1_1Refinement.html	2024-03-17 21:57:43.355233755 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespacehp_1_1Refinement.html	2024-03-17 21:57:43.359233780 +0000
@@ -529,9 +529,9 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Predict how the current <code>error_indicators</code> will adapt after refinement and coarsening were to happen on the provided <code>dof_handler</code>, and write its results to <code>predicted_errors</code>. Each entry of <code>error_indicators</code> and <code>predicted_errors</code> corresponds to an active cell on the underlying <a class="el" href="classTriangulation.html">Triangulation</a>, thus each container has to be of size <a class="el" href="classTriangulation.html#href_anchor">Triangulation::n_active_cells()</a>. The errors are interpreted to be measured in the energy norm; this assumption enters the rate of convergence that is used in the prediction. The <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm of the output argument <code>predicted_errors</code> corresponds to the predicted global error after adaptation.</p>
+<p>Predict how the current <code>error_indicators</code> will adapt after refinement and coarsening were to happen on the provided <code>dof_handler</code>, and write its results to <code>predicted_errors</code>. Each entry of <code>error_indicators</code> and <code>predicted_errors</code> corresponds to an active cell on the underlying <a class="el" href="classTriangulation.html">Triangulation</a>, thus each container has to be of size <a class="el" href="classTriangulation.html#href_anchor">Triangulation::n_active_cells()</a>. The errors are interpreted to be measured in the energy norm; this assumption enters the rate of convergence that is used in the prediction. The <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm of the output argument <code>predicted_errors</code> corresponds to the predicted global error after adaptation.</p>
 <p>For p-adaptation, the local error is expected to converge exponentially with the polynomial degree of the assigned finite element. Each increase or decrease of the degree will thus change its value by a user-defined control parameter <code>gamma_p</code>.</p>
-<p>For h-adaptation, we expect the local error <picture><source srcset="form_1371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_K$" src="form_1371.png"/></picture> on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to be proportional to <picture><source srcset="form_1491_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(h_K)^{p_K}$" src="form_1491.png"/></picture> in the energy norm, where <picture><source srcset="form_1492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_K$" src="form_1492.png"/></picture> denotes the cell diameter and <picture><source srcset="form_1493_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_K$" src="form_1493.png"/></picture> the polynomial degree of the currently assigned finite element on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>.</p>
+<p>For h-adaptation, we expect the local error <picture><source srcset="form_1372_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_K$" src="form_1372.png"/></picture> on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to be proportional to <picture><source srcset="form_1491_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(h_K)^{p_K}$" src="form_1491.png"/></picture> in the energy norm, where <picture><source srcset="form_1492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_K$" src="form_1492.png"/></picture> denotes the cell diameter and <picture><source srcset="form_1493_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_K$" src="form_1493.png"/></picture> the polynomial degree of the currently assigned finite element on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>.</p>
 <p>During h-coarsening, the finite elements on siblings may be different, and their parent cell will be assigned to their least dominating finite element that belongs to its most general child. Thus, we will always interpolate on an enclosing finite element space. Additionally assuming that the finite elements on the cells to be coarsened are sufficient to represent the solution correctly (e.g. at least quadratic basis functions for a quadratic solution), we are confident to say that the error will not change by sole interpolation on the larger finite element space.</p>
 <p>For p-adaptation, the local error is expected to converge exponentially with the polynomial degree of the assigned finite element. Each increase or decrease of the degree will thus change its value by a user-defined control parameter <code>gamma_p</code>. The assumption of exponential convergence is only valid if both h- and p-adaptive methods are combined in a sense that they are both utilized throughout a mesh, but do not have to be applied both on a cell simultaneously.</p>
 <p>The prediction algorithm is formulated as follows with control parameters <code>gamma_p</code>, <code>gamma_h</code> and <code>gamma_n</code> that may be used to influence prediction for each adaptation type individually. The results for each individual cell are stored in the <code>predicted_errors</code> output argument. </p><table class="doxtable">
@@ -553,7 +553,7 @@
            \gamma_\text{p}^{(p_{K,\text{future}} - p_{K})}$" src="form_1500.png"/></picture> </td></tr>
 </table>
 <p>On basis of the refinement history, we use the predicted error estimates to decide how cells will be adapted in the next adaptation step. Comparing the predicted error from the previous adaptation step to the error estimates of the current step allows us to justify whether our previous choice of adaptation was justified, and lets us decide how to adapt in the next one.</p>
-<p>We thus have to transfer the predicted error from the old to the adapted mesh. When transferring the predicted error to the adapted mesh, make sure to configure your <a class="el" href="classCellDataTransfer.html">CellDataTransfer</a> object with <a class="el" href="namespaceAdaptationStrategies_1_1Refinement.html#href_anchor">AdaptationStrategies::Refinement::l2_norm()</a> as a refinement strategy and <a class="el" href="namespaceAdaptationStrategies_1_1Coarsening.html#href_anchor">AdaptationStrategies::Coarsening::l2_norm()</a> as a coarsening strategy. This ensures that the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture>-norm of the predict errors is preserved on both meshes.</p>
+<p>We thus have to transfer the predicted error from the old to the adapted mesh. When transferring the predicted error to the adapted mesh, make sure to configure your <a class="el" href="classCellDataTransfer.html">CellDataTransfer</a> object with <a class="el" href="namespaceAdaptationStrategies_1_1Refinement.html#href_anchor">AdaptationStrategies::Refinement::l2_norm()</a> as a refinement strategy and <a class="el" href="namespaceAdaptationStrategies_1_1Coarsening.html#href_anchor">AdaptationStrategies::Coarsening::l2_norm()</a> as a coarsening strategy. This ensures that the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture>-norm of the predict errors is preserved on both meshes.</p>
 <p>In this context, we assume that the local error on a cell to be h-refined will be divided equally on all of its <picture><source srcset="form_1501_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n_{K_c}$" src="form_1501.png"/></picture> children, whereas local errors on siblings will be summed up on the parent cell in case of h-coarsening. This assumption is often not satisfied in practice: For example, if a cell is at a corner singularity, then the one child cell that ends up closest to the singularity will inherit the majority of the remaining error &ndash; but this function can not know where the singularity will be, and consequently assumes equal distribution.</p>
 <p>Incorporating the transfer from the old to the adapted mesh, the complete error prediction algorithm reads as follows: </p><table class="doxtable">
 <tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceinternal.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceinternal.html	2024-03-17 21:57:43.471234471 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceinternal.html	2024-03-17 21:57:43.475234496 +0000
@@ -853,8 +853,8 @@
           <td></td>
           <td class="paramtype">const double</td>          <td class="paramname"><span class="paramname"><em>coordinate_value</em></span>&#href_anchor"memdoc">
 <p>Creates a (<code>dim + 1</code>)-dimensional point by copying over the coordinates of the incoming <code>dim</code>-dimensional point and setting the "missing" (<code>dim + 1</code>)-dimensional component to the incoming coordinate value.</p>
-<p>For example, given the input <picture><source srcset="form_528_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{(x, y), 2, z \}$" src="form_528.png"/></picture> this function creates the point <picture><source srcset="form_529_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x, y, z)$" src="form_529.png"/></picture>.</p>
-<p>The coordinates of the <code>dim</code>-dimensional point are written to the coordinates of the (<code>dim + 1</code>)-dimensional point in the order of the convention given by the function coordinate_to_one_dim_higher. Thus, the order of coordinates on the lower-dimensional point are not preserved: <picture><source srcset="form_530_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{(z, x), 1, y \}$" src="form_530.png"/></picture> creates the point <picture><source srcset="form_529_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x, y, z)$" src="form_529.png"/></picture>. </p>
+<p>For example, given the input <picture><source srcset="form_515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{(x, y), 2, z \}$" src="form_515.png"/></picture> this function creates the point <picture><source srcset="form_516_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x, y, z)$" src="form_516.png"/></picture>.</p>
+<p>The coordinates of the <code>dim</code>-dimensional point are written to the coordinates of the (<code>dim + 1</code>)-dimensional point in the order of the convention given by the function coordinate_to_one_dim_higher. Thus, the order of coordinates on the lower-dimensional point are not preserved: <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{(z, x), 1, y \}$" src="form_517.png"/></picture> creates the point <picture><source srcset="form_516_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x, y, z)$" src="form_516.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="function__restriction_8cc_source.html#href_anchor">24</a> of file <a class="el" href="function__restriction_8cc_source.html">function_restriction.cc</a>.</p>
 
@@ -1725,7 +1725,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the polynomial interpolation of a tensor product shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> given a vector of coefficients <picture><source srcset="form_2005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_i$" src="form_2005.png"/></picture> in the form <picture><source srcset="form_2006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf{x}) = \sum_{i=1}^{k^d} \varphi_i(\mathbf{x}) u_i$" src="form_2006.png"/></picture>. The shape functions <picture><source srcset="form_2007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i(\mathbf{x}) =
+<p>Compute the polynomial interpolation of a tensor product shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> given a vector of coefficients <picture><source srcset="form_2005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_i$" src="form_2005.png"/></picture> in the form <picture><source srcset="form_2006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf{x}) = \sum_{i=1}^{k^d} \varphi_i(\mathbf{x}) u_i$" src="form_2006.png"/></picture>. The shape functions <picture><source srcset="form_2007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i(\mathbf{x}) =
 \prod_{d=1}^{\text{dim}}\varphi_{i_d}^\text{1d}(x_d)$" src="form_2007.png"/></picture> represent a tensor product. The function returns a pair with the value of the interpolation as the first component and the gradient in reference coordinates as the second component. Note that for compound types (e.g. the <code>values</code> field begin a <a class="el" href="classPoint.html">Point&lt;spacedim&gt;</a> argument), the components of the gradient are sorted as Tensor&lt;1, dim, Tensor&lt;1, spacedim&gt;&gt; with the derivatives as the first index; this is a consequence of the generic arguments in the function.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
/usr/share/doc/packages/dealii/doxygen/deal.II/namespaceparallel.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceparallel.html	2024-03-17 21:57:43.507234694 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/namespaceparallel.html	2024-03-17 21:57:43.515234743 +0000
@@ -383,7 +383,7 @@
           <td></td>
           <td class="paramtype">const unsigned <a class="el" href="classint.html">int</a></td>          <td class="paramname"><span class="paramname"><em>grainsize</em></span>&#href_anchor"memdoc">
 <p>This function works a lot like the <a class="el" href="#href_anchor">apply_to_subranges()</a> function, but it allows to accumulate numerical results computed on each subrange into one number. The type of this number is given by the <code>ResultType</code> template argument that needs to be explicitly specified.</p>
-<p>An example of use of this function is to compute the value of the expression <picture><source srcset="form_574_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x^T A x$" src="form_574.png"/></picture> for a square matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> and a vector <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>. The sum over rows can be parallelized and the whole code might look like this: </p><div class="fragment"><div class="line"><span class="keywordtype">void</span> matrix_norm (<span class="keyword">const</span> <a class="code hl_class" href="classFullMatrix.html">FullMatrix</a> &amp;A,</div>
+<p>An example of use of this function is to compute the value of the expression <picture><source srcset="form_574_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x^T A x$" src="form_574.png"/></picture> for a square matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> and a vector <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>. The sum over rows can be parallelized and the whole code might look like this: </p><div class="fragment"><div class="line"><span class="keywordtype">void</span> matrix_norm (<span class="keyword">const</span> <a class="code hl_class" href="classFullMatrix.html">FullMatrix</a> &amp;A,</div>
 <div class="line">                  <span class="keyword">const</span> <a class="code hl_class" href="classVector.html">Vector</a>     &amp;x)</div>
 <div class="line">{</div>
 <div class="line">  <span class="keywordflow">return</span></div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_1.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_1.html	2024-03-17 21:57:43.547234941 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_1.html	2024-03-17 21:57:43.555234991 +0000
@@ -303,7 +303,7 @@
 <p>This program obviously does not have a whole lot of functionality, but in particular the <code>second_grid</code> function has a bunch of places where you can play with it. For example, you could modify the criterion by which we decide which cells to refine. An example would be to change the condition to this: </p><div class="fragment"><div class="line"><span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;cell: <a class="code hl_variable" href="p4est__wrappers_8cc.html#href_anchor">triangulation</a>.active_cell_iterators())</div>
 <div class="line">  if (cell-&gt;<a class="code hl_variable" href="data__out__base_8cc.html#href_anchor">center</a>()[1] &gt; 0)</div>
 <div class="line">    cell-&gt;set_refine_flag ();</div>
-</div><!-- fragment --><p> This would refine all cells for which the <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>-coordinate of the cell's center is greater than zero (the <code><a class="el" href="classTriaAccessor.html#href_anchor">TriaAccessor::center</a></code> function that we call by dereferencing the <code>cell</code> iterator returns a <a class="el" href="classPoint.html">Point&lt;2&gt;</a> object; subscripting <code>[0]</code> would give the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>-coordinate, subscripting <code>[1]</code> the <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>-coordinate). By looking at the functions that <a class="el" href="classTriaAccessor.html">TriaAccessor</a> provides, you can also use more complicated criteria for refinement.</p>
+</div><!-- fragment --><p> This would refine all cells for which the <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>-coordinate of the cell's center is greater than zero (the <code><a class="el" href="classTriaAccessor.html#href_anchor">TriaAccessor::center</a></code> function that we call by dereferencing the <code>cell</code> iterator returns a <a class="el" href="classPoint.html">Point&lt;2&gt;</a> object; subscripting <code>[0]</code> would give the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>-coordinate, subscripting <code>[1]</code> the <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>-coordinate). By looking at the functions that <a class="el" href="classTriaAccessor.html">TriaAccessor</a> provides, you can also use more complicated criteria for refinement.</p>
 <p>In general, what you can do with operations of the form <code>cell-&gt;something()</code> is a bit difficult to find in the documentation because <code>cell</code> is not a pointer but an iterator. The functions you can call on a cell can be found in the documentation of the classes <code><a class="el" href="classTriaAccessor.html">TriaAccessor</a></code> (which has functions that can also be called on faces of cells or, more generally, all sorts of geometric objects that appear in a triangulation), and <code><a class="el" href="classCellAccessor.html">CellAccessor</a></code> (which adds a few functions that are specific to <em>cells</em>).</p>
 <p>A more thorough description of the whole iterator concept can be found in the <a class="el" href="group__Iterators.html">Iterators on mesh-like containers</a> documentation module.</p>
 <p><a class="anchor" id="Differentgeometries"></a></p><h4>Different geometries </h4>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_10.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_10.html	2024-03-17 21:57:43.599235262 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_10.html	2024-03-17 21:57:43.591235212 +0000
@@ -110,10 +110,10 @@
   <li> <a href="#href_anchor" class=bold>The plain program</a>
 </ol> </td> </tr> </table>
  <a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
-<p>This is a rather short example which only shows some aspects of using higher order mappings. By <em>mapping</em> we mean the transformation between the unit cell (i.e. the unit line, square, or cube) to the cells in real space. In all the previous examples, we have implicitly used linear or d-linear mappings; you will not have noticed this at all, since this is what happens if you do not do anything special. However, if your domain has curved boundaries, there are cases where the piecewise linear approximation of the boundary (i.e. by straight line segments) is not sufficient, and you want that your computational domain is an approximation to the real domain using curved boundaries as well. If the boundary approximation uses piecewise quadratic parabolas to approximate the true boundary, then we say that this is a quadratic or <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> approximation. If we use piecewise graphs of cubic polynomials, then this is a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> approximation, and so on.</p>
+<p>This is a rather short example which only shows some aspects of using higher order mappings. By <em>mapping</em> we mean the transformation between the unit cell (i.e. the unit line, square, or cube) to the cells in real space. In all the previous examples, we have implicitly used linear or d-linear mappings; you will not have noticed this at all, since this is what happens if you do not do anything special. However, if your domain has curved boundaries, there are cases where the piecewise linear approximation of the boundary (i.e. by straight line segments) is not sufficient, and you want that your computational domain is an approximation to the real domain using curved boundaries as well. If the boundary approximation uses piecewise quadratic parabolas to approximate the true boundary, then we say that this is a quadratic or <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> approximation. If we use piecewise graphs of cubic polynomials, then this is a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> approximation, and so on.</p>
 <p>For some differential equations, it is known that piecewise linear approximations of the boundary, i.e. <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> mappings, are not sufficient if the boundary of the exact domain is curved. Examples are the biharmonic equation using <picture><source srcset="form_478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^1$" src="form_478.png"/></picture> elements, or the Euler equations of gas dynamics on domains with curved reflective boundaries. In these cases, it is necessary to compute the integrals using a higher order mapping. If we do not use such a higher order mapping, the order of approximation of the boundary dominates the order of convergence of the entire numerical scheme, irrespective of the order of convergence of the discretization in the interior of the domain.</p>
-<p>Rather than demonstrating the use of higher order mappings with one of these more complicated examples, we do only a brief computation: calculating the value of <picture><source srcset="form_2751_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi=3.141592653589793238462643\ldots$" src="form_2751.png"/></picture> by two different methods.</p>
-<p>The first method uses a triangulated approximation of the circle with unit radius and integrates a unit magnitude constant function ( <picture><source srcset="form_2752_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f = 1$" src="form_2752.png"/></picture>) over it. Of course, if the domain were the exact unit circle, then the area would be <picture><source srcset="form_1331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi$" src="form_1331.png"/></picture>, but since we only use an approximation by piecewise polynomial segments, the value of the area we integrate over is not exactly <picture><source srcset="form_1331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi$" src="form_1331.png"/></picture>. However, it is known that as we refine the triangulation, a <picture><source srcset="form_276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_p$" src="form_276.png"/></picture> mapping approximates the boundary with an order <picture><source srcset="form_2755_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{p+1}$" src="form_2755.png"/></picture>, where <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> is the mesh size. We will check the values of the computed area of the circle and their convergence towards <picture><source srcset="form_1331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi$" src="form_1331.png"/></picture> under mesh refinement for different mappings. We will also find a convergence behavior that is surprising at first, but has a good explanation.</p>
+<p>Rather than demonstrating the use of higher order mappings with one of these more complicated examples, we do only a brief computation: calculating the value of <picture><source srcset="form_2747_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi=3.141592653589793238462643\ldots$" src="form_2747.png"/></picture> by two different methods.</p>
+<p>The first method uses a triangulated approximation of the circle with unit radius and integrates a unit magnitude constant function ( <picture><source srcset="form_2748_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f = 1$" src="form_2748.png"/></picture>) over it. Of course, if the domain were the exact unit circle, then the area would be <picture><source srcset="form_1331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi$" src="form_1331.png"/></picture>, but since we only use an approximation by piecewise polynomial segments, the value of the area we integrate over is not exactly <picture><source srcset="form_1331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi$" src="form_1331.png"/></picture>. However, it is known that as we refine the triangulation, a <picture><source srcset="form_276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_p$" src="form_276.png"/></picture> mapping approximates the boundary with an order <picture><source srcset="form_2749_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{p+1}$" src="form_2749.png"/></picture>, where <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> is the mesh size. We will check the values of the computed area of the circle and their convergence towards <picture><source srcset="form_1331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi$" src="form_1331.png"/></picture> under mesh refinement for different mappings. We will also find a convergence behavior that is surprising at first, but has a good explanation.</p>
 <p>The second method works similarly, but this time does not use the area of the triangulated unit circle, but rather its perimeter. <picture><source srcset="form_1331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi$" src="form_1331.png"/></picture> is then approximated by half of the perimeter, as we choose the radius equal to one.</p>
 <dl class="section note"><dt>Note</dt><dd>This tutorial shows in essence how to choose a particular mapping for integrals, by attaching a particular geometry to the triangulation (as had already been done in <a class="el" href="step_1.html">step-1</a>, for example) and then passing a mapping argument to the <a class="el" href="classFEValues.html">FEValues</a> class that is used for all integrals in deal.II. The geometry we choose is a circle, for which deal.II already has a class (<a class="el" href="classSphericalManifold.html">SphericalManifold</a>) that can be used. If you want to define your own geometry, for example because it is complicated and cannot be described by the classes already available in deal.II, you will want to read through <a class="el" href="step_53.html">step-53</a>.</dd></dl>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
@@ -157,7 +157,7 @@
 <div class="ttc" id="aclassTriangulation_html"><div class="ttname"><a href="classTriangulation.html">Triangulation</a></div><div class="ttdef"><b>Definition</b> <a href="grid_2tria_8h_source.html#href_anchor">tria.h:1137</a></div></div>
 <div class="ttc" id="anamespaceGridGenerator_html_a533c4778cbc9bcbed365dcab42ca4418"><div class="ttname"><a href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_ball</a></div><div class="ttdeci">void hyper_ball(Triangulation&lt; dim &gt; &amp;tria, const Point&lt; dim &gt; &amp;center=Point&lt; dim &gt;(), const double radius=1., const bool attach_spherical_manifold_on_boundary_cells=false)</div></div>
 <div class="ttc" id="ap4est__wrappers_8cc_html_ace00f2f80d9780ef9aa1007e1c22c6a4"><div class="ttname"><a href="p4est__wrappers_8cc.html#href_anchor">triangulation</a></div><div class="ttdeci">const ::parallel::distributed::Triangulation&lt; dim, spacedim &gt; * triangulation</div><div class="ttdef"><b>Definition</b> <a href="p4est__wrappers_8cc_source.html#href_anchor">p4est_wrappers.cc:69</a></div></div>
-</div><!-- fragment --><p>Then alternate between generating output on the current mesh for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture>, <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture>, and <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> mappings, and (at the end of the loop body) refining the mesh once globally.</p>
+</div><!-- fragment --><p>Then alternate between generating output on the current mesh for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture>, <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture>, and <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> mappings, and (at the end of the loop body) refining the mesh once globally.</p>
 <div class="fragment"><div class="line">      <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> refinement = 0; refinement &lt; 2; ++refinement)</div>
 <div class="line">        {</div>
 <div class="line">          std::cout &lt;&lt; <span class="stringliteral">&quot;Refinement level: &quot;</span> &lt;&lt; refinement &lt;&lt; std::endl;</div>
@@ -194,9 +194,9 @@
 <div class="line">        }</div>
 <div class="line">    }</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>Now we proceed with the main part of the code, the approximation of <picture><source srcset="form_1331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi$" src="form_1331.png"/></picture>. The area of a circle is of course given by <picture><source srcset="form_2762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi r^2$" src="form_2762.png"/></picture>, so having a circle of radius 1, the area represents just the number that is searched for. The numerical computation of the area is performed by integrating the constant function of value 1 over the whole computational domain, i.e. by computing the areas <picture><source srcset="form_2763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_K 1 dx=\int_{\hat K} 1
+</div><!-- fragment --><p>Now we proceed with the main part of the code, the approximation of <picture><source srcset="form_1331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi$" src="form_1331.png"/></picture>. The area of a circle is of course given by <picture><source srcset="form_2750_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi r^2$" src="form_2750.png"/></picture>, so having a circle of radius 1, the area represents just the number that is searched for. The numerical computation of the area is performed by integrating the constant function of value 1 over the whole computational domain, i.e. by computing the areas <picture><source srcset="form_2751_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_K 1 dx=\int_{\hat K} 1
    \ \textrm{det}\ J(\hat x) d\hat x \approx \sum_i \textrm{det}
-   \ J(\hat x_i)w(\hat x_i)$" src="form_2763.png"/></picture>, where the sum extends over all quadrature points on all active cells in the triangulation, with <picture><source srcset="form_2764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w(x_i)$" src="form_2764.png"/></picture> being the weight of quadrature point <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture>. The integrals on each cell are approximated by numerical quadrature, hence the only additional ingredient we need is to set up a <a class="el" href="classFEValues.html">FEValues</a> object that provides the corresponding <code>JxW</code> values of each cell. (Note that <code>JxW</code> is meant to abbreviate <em>Jacobian determinant times weight</em>; since in numerical quadrature the two factors always occur at the same places, we only offer the combined quantity, rather than two separate ones.) We note that here we won't use the <a class="el" href="classFEValues.html">FEValues</a> object in its original purpose, i.e. for the computation of values of basis functions of a specific finite element at certain quadrature points. Rather, we use it only to gain the <code>JxW</code> at the quadrature points, irrespective of the (dummy) finite element we will give to the constructor of the <a class="el" href="classFEValues.html">FEValues</a> object. The actual finite element given to the <a class="el" href="classFEValues.html">FEValues</a> object is not used at all, so we could give any.</p>
+   \ J(\hat x_i)w(\hat x_i)$" src="form_2751.png"/></picture>, where the sum extends over all quadrature points on all active cells in the triangulation, with <picture><source srcset="form_2752_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w(x_i)$" src="form_2752.png"/></picture> being the weight of quadrature point <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture>. The integrals on each cell are approximated by numerical quadrature, hence the only additional ingredient we need is to set up a <a class="el" href="classFEValues.html">FEValues</a> object that provides the corresponding <code>JxW</code> values of each cell. (Note that <code>JxW</code> is meant to abbreviate <em>Jacobian determinant times weight</em>; since in numerical quadrature the two factors always occur at the same places, we only offer the combined quantity, rather than two separate ones.) We note that here we won't use the <a class="el" href="classFEValues.html">FEValues</a> object in its original purpose, i.e. for the computation of values of basis functions of a specific finite element at certain quadrature points. Rather, we use it only to gain the <code>JxW</code> at the quadrature points, irrespective of the (dummy) finite element we will give to the constructor of the <a class="el" href="classFEValues.html">FEValues</a> object. The actual finite element given to the <a class="el" href="classFEValues.html">FEValues</a> object is not used at all, so we could give any.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> compute_pi_by_area()</div>
 <div class="line">    {</div>
@@ -280,7 +280,7 @@
 <div class="line">    }</div>
 <div class="line">  </div>
 <div class="line">  </div>
-</div><!-- fragment --><p>The following, second function also computes an approximation of <picture><source srcset="form_1331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi$" src="form_1331.png"/></picture> but this time via the perimeter <picture><source srcset="form_2765_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\pi r$" src="form_2765.png"/></picture> of the domain instead of the area. This function is only a variation of the previous function. So we will mainly give documentation for the differences.</p>
+</div><!-- fragment --><p>The following, second function also computes an approximation of <picture><source srcset="form_1331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi$" src="form_1331.png"/></picture> but this time via the perimeter <picture><source srcset="form_2753_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\pi r$" src="form_2753.png"/></picture> of the domain instead of the area. This function is only a variation of the previous function. So we will mainly give documentation for the differences.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> compute_pi_by_perimeter()</div>
 <div class="line">    {</div>
@@ -404,11 +404,11 @@
 <div class="line">unset ytics</div>
 <div class="line">plot [-1:1][-1:1] <span class="stringliteral">&quot;ball_0_mapping_q_1.dat&quot;</span> lw 4 lt rgb <span class="stringliteral">&quot;black&quot;</span></div>
 </div><!-- fragment --><p> or using one of the other filenames. The second line makes sure that the aspect ratio of the generated output is actually 1:1, i.e. a circle is drawn as a circle on your screen, rather than as an ellipse. The third line switches off the key in the graphic, as that will only print information (the filename) which is not that important right now. Similarly, the fourth and fifth disable tick marks. The plot is then generated with a specific line width ("lw", here set to 4) and line type ("lt", here chosen by saying that the line should be drawn using the RGB color "black").</p>
-<p>The following table shows the triangulated computational domain for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture>, <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture>, and <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> mappings, for the original coarse grid (left), and a once uniformly refined grid (right).</p>
+<p>The following table shows the triangulated computational domain for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture>, <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture>, and <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> mappings, for the original coarse grid (left), and a once uniformly refined grid (right).</p>
 <div class="twocolumn" style="width: 80%"> <div> <img src="https://www.dealii.org/images/steps/developer/step_10_ball_0_q1.svg" alt="Five-cell discretization of the disk." style="pointer-events: none;" width="400" height="400" class="inline"/> </div> <div> <img src="https://www.dealii.org/images/steps/developer/step_10_ball_1_q1.svg" alt="20-cell discretization of the disk (i.e., five cells
               refined once)." style="pointer-events: none;" width="400" height="400" class="inline"/> </div> <div> <img src="https://www.dealii.org/images/steps/developer/step_10_ball_0_q2.svg" alt="Five-cell discretization of the disk with quadratic edges. The
               boundary is nearly indistinguishable from the actual circle." style="pointer-events: none;" width="400" height="400" class="inline"/> </div> <div> <img src="https://www.dealii.org/images/steps/developer/step_10_ball_1_q2.svg" alt="20-cell discretization with quadratic edges." style="pointer-events: none;" width="400" height="400" class="inline"/> </div> <div> <img src="https://www.dealii.org/images/steps/developer/step_10_ball_0_q3.svg" alt="Five-cell discretization of the disk with cubic edges. The
-              boundary is nearly indistinguishable from the actual circle." style="pointer-events: none;" width="400" height="400" class="inline"/> </div> <div> <img src="https://www.dealii.org/images/steps/developer/step_10_ball_1_q3.svg" alt="20-cell discretization with cubic edges." style="pointer-events: none;" width="400" height="400" class="inline"/> </div> </div><p>These pictures show the obvious advantage of higher order mappings: they approximate the true boundary quite well also on rather coarse meshes. To demonstrate this a little further, here is part of the upper right quarter circle of the coarse meshes with <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> and <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> mappings, where the dashed red line marks the actual circle:</p>
+              boundary is nearly indistinguishable from the actual circle." style="pointer-events: none;" width="400" height="400" class="inline"/> </div> <div> <img src="https://www.dealii.org/images/steps/developer/step_10_ball_1_q3.svg" alt="20-cell discretization with cubic edges." style="pointer-events: none;" width="400" height="400" class="inline"/> </div> </div><p>These pictures show the obvious advantage of higher order mappings: they approximate the true boundary quite well also on rather coarse meshes. To demonstrate this a little further, here is part of the upper right quarter circle of the coarse meshes with <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> and <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> mappings, where the dashed red line marks the actual circle:</p>
 <div class="twocolumn" style="width: 80%"> <div> <img src="https://www.dealii.org/images/steps/developer/step_10_exact_vs_interpolate_q2.svg" alt="Close-up of quadratic discretization. The distance between the
          quadratic interpolant and the actual circle is small." style="pointer-events: none;" width="400" height="400" class="inline"/> </div> <div> <img src="https://www.dealii.org/images/steps/developer/step_10_exact_vs_interpolate_q3.svg" alt="Close-up of cubic discretization. The distance between the
          cubic interpolant and the actual circle is very small." style="pointer-events: none;" width="400" height="400" class="inline"/> </div> </div><p>Obviously the quadratic mapping approximates the boundary quite well, while for the cubic mapping the difference between approximated domain and true one is hardly visible already for the coarse grid. You can also see that the mapping only changes something at the outer boundaries of the triangulation. In the interior, all lines are still represented by linear functions, resulting in additional computations only on cells at the boundary. Higher order mappings are therefore usually not noticeably slower than lower order ones, because the additional computations are only performed on a small subset of all cells.</p>
@@ -500,14 +500,14 @@
 <div class="line"> 1280 3.1415926535897896 3.5527e-15 3.32</div>
 <div class="line"> 5120 3.1415926535897940 8.8818e-16 2.00</div>
 <div class="ttc" id="agrid__out_8cc_html_a9082f945c1d289684d0bcd51ee08e11e"><div class="ttname"><a href="grid__out_8cc.html#href_anchor">level</a></div><div class="ttdeci">unsigned int level</div><div class="ttdef"><b>Definition</b> <a href="grid__out_8cc_source.html#href_anchor">grid_out.cc:4618</a></div></div>
-</div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>Once the error reaches a level on the order of <picture><source srcset="form_2768_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-13}$" src="form_2768.png"/></picture> to <picture><source srcset="form_2769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-15}$" src="form_2769.png"/></picture>, it is essentially dominated by round-off and consequently dominated by what precisely the library is doing in internal computations. Since these things change, the precise values and errors change from release to release at these round-off levels, though the overall order of errors should of course remain the same. See also the comment below in the section on <a href="#href_anchor">Possibilities for extensions</a> about how to compute these results more accurately.</dd></dl>
-<p>One of the immediate observations from the output above is that in all cases the values converge quickly to the true value of <picture><source srcset="form_2770_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi=3.141592653589793238462643$" src="form_2770.png"/></picture>. Note that for the <picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture> mapping, we are already in the regime of roundoff errors and the convergence rate levels off, which is already quite a lot. However, also note that for the <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> mapping, even on the finest grid the accuracy is significantly worse than on the coarse grid for a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> mapping!</p>
-<p>The last column of the output shows the convergence order, in powers of the mesh width <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>. In the introduction, we had stated that the convergence order for a <picture><source srcset="form_276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_p$" src="form_276.png"/></picture> mapping should be <picture><source srcset="form_2755_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{p+1}$" src="form_2755.png"/></picture>. However, in the example shown, the order is rather <picture><source srcset="form_2771_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{2p}$" src="form_2771.png"/></picture>! This at first surprising fact is explained by the properties of the <picture><source srcset="form_276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_p$" src="form_276.png"/></picture> mapping. At order <em>p</em>, it uses support points that are based on the <em>p</em>+1 point Gauss-Lobatto quadrature rule that selects the support points in such a way that the quadrature rule converges at order 2<em>p</em>. Even though these points are here only used for interpolation of a <em>p</em>th order polynomial, we get a superconvergence effect when numerically evaluating the integral, resulting in the observed high order of convergence. (This effect is also discussed in detail in the following publication: A. Bonito, A. Demlow, and J. Owen: "A priori error
+</div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>Once the error reaches a level on the order of <picture><source srcset="form_2754_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-13}$" src="form_2754.png"/></picture> to <picture><source srcset="form_2755_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-15}$" src="form_2755.png"/></picture>, it is essentially dominated by round-off and consequently dominated by what precisely the library is doing in internal computations. Since these things change, the precise values and errors change from release to release at these round-off levels, though the overall order of errors should of course remain the same. See also the comment below in the section on <a href="#href_anchor">Possibilities for extensions</a> about how to compute these results more accurately.</dd></dl>
+<p>One of the immediate observations from the output above is that in all cases the values converge quickly to the true value of <picture><source srcset="form_2756_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi=3.141592653589793238462643$" src="form_2756.png"/></picture>. Note that for the <picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture> mapping, we are already in the regime of roundoff errors and the convergence rate levels off, which is already quite a lot. However, also note that for the <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> mapping, even on the finest grid the accuracy is significantly worse than on the coarse grid for a <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture> mapping!</p>
+<p>The last column of the output shows the convergence order, in powers of the mesh width <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>. In the introduction, we had stated that the convergence order for a <picture><source srcset="form_276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_p$" src="form_276.png"/></picture> mapping should be <picture><source srcset="form_2749_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{p+1}$" src="form_2749.png"/></picture>. However, in the example shown, the order is rather <picture><source srcset="form_2757_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{2p}$" src="form_2757.png"/></picture>! This at first surprising fact is explained by the properties of the <picture><source srcset="form_276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_p$" src="form_276.png"/></picture> mapping. At order <em>p</em>, it uses support points that are based on the <em>p</em>+1 point Gauss-Lobatto quadrature rule that selects the support points in such a way that the quadrature rule converges at order 2<em>p</em>. Even though these points are here only used for interpolation of a <em>p</em>th order polynomial, we get a superconvergence effect when numerically evaluating the integral, resulting in the observed high order of convergence. (This effect is also discussed in detail in the following publication: A. Bonito, A. Demlow, and J. Owen: "A priori error
 estimates for finite element approximations to eigenvalues and
 eigenfunctions of the Laplace-Beltrami operator", submitted, 2018.)</p>
 <p><a class="anchor" id="Possibilitiesforextensions"></a></p><h3>Possibilities for extensions</h3>
 <p><a class="anchor" id="extensions"></a></p>
-<p>As the table of numbers copied from the output of the program shows above, it is not very difficult to compute the value of <picture><source srcset="form_1331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi$" src="form_1331.png"/></picture> to 13 or 15 digits. But, the output also shows that once we approach the level of accuracy with which <code>double</code> precision numbers store information (namely, with roughly 16 digits of accuracy), we no longer see the expected convergence order and the error no longer decreases with mesh refinement as anticipated. This is because both within this code and within the many computations that happen within deal.II itself, each operation incurs an error on the order of <picture><source srcset="form_2772_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-16}$" src="form_2772.png"/></picture>; adding such errors many times over then results in an error that may be on the order of <picture><source srcset="form_2773_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-14}$" src="form_2773.png"/></picture>, which will dominate the discretization error after a number of refinement steps and consequently destroy the convergence rate.</p>
+<p>As the table of numbers copied from the output of the program shows above, it is not very difficult to compute the value of <picture><source srcset="form_1331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi$" src="form_1331.png"/></picture> to 13 or 15 digits. But, the output also shows that once we approach the level of accuracy with which <code>double</code> precision numbers store information (namely, with roughly 16 digits of accuracy), we no longer see the expected convergence order and the error no longer decreases with mesh refinement as anticipated. This is because both within this code and within the many computations that happen within deal.II itself, each operation incurs an error on the order of <picture><source srcset="form_2758_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-16}$" src="form_2758.png"/></picture>; adding such errors many times over then results in an error that may be on the order of <picture><source srcset="form_2759_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-14}$" src="form_2759.png"/></picture>, which will dominate the discretization error after a number of refinement steps and consequently destroy the convergence rate.</p>
 <p>The question is whether one can do anything about this. One thought is to use a higher-precision data type. For example, one could think of declaring both the <code>area</code> and <code>perimeter</code> variables in <code>compute_pi_by_area()</code> and <code>compute_pi_by_perimeter()</code> with data type <code>long double</code>. <code>long double</code> is a data type that is not well specified in the C++ standard but at least on Intel processors has around 19, instead of around 16, digits of accuracy. If we were to do that, we would get results that differ from the ones shown above. However, maybe counter-intuitively, they are not uniformly better. For example, when computing <picture><source srcset="form_1331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pi$" src="form_1331.png"/></picture> by the area, at the time of writing these sentences we get these values with <code>double</code> precision for degree 4: </p><div class="fragment"><div class="line">   5 3.1415871927401144 5.4608e-06    -</div>
 <div class="line">  20 3.1415926314742491 2.2116e-08 7.95</div>
 <div class="line">  80 3.1415926535026268 8.7166e-11 7.99</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_11.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_11.html	2024-03-17 21:57:43.643235535 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_11.html	2024-03-17 21:57:43.643235535 +0000
@@ -110,55 +110,55 @@
 </ol> </td> </tr> </table>
  <a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p>The problem we will be considering is the solution of Laplace's problem with Neumann boundary conditions only:  </p><p class="formulaDsp">
-<picture><source srcset="form_2747_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_2760_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   -\Delta u &amp;=&amp; f \qquad \mathrm{in}\ \Omega,
   \\
   \partial_n u &amp;=&amp; g \qquad \mathrm{on}\ \partial\Omega.
-\end{eqnarray*}" src="form_2747.png"/></picture>
+\end{eqnarray*}" src="form_2760.png"/></picture>
 </p>
 <p> It is well known that if this problem is to have a solution, then the forces need to satisfy the compatibility condition  </p><p class="formulaDsp">
-<picture><source srcset="form_2748_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \int_\Omega f\; dx + \int_{\partial\Omega} g\; ds = 0.
-\]" src="form_2748.png"/></picture>
+\]" src="form_2761.png"/></picture>
 </p>
-<p> We will consider the special case that <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> is the circle of radius 1 around the origin, and <picture><source srcset="form_2749_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=-2$" src="form_2749.png"/></picture>, <picture><source srcset="form_2750_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g=1$" src="form_2750.png"/></picture>. This choice satisfies the compatibility condition.</p>
+<p> We will consider the special case that <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> is the circle of radius 1 around the origin, and <picture><source srcset="form_2762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=-2$" src="form_2762.png"/></picture>, <picture><source srcset="form_2763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g=1$" src="form_2763.png"/></picture>. This choice satisfies the compatibility condition.</p>
 <p>The compatibility condition allows a solution of the above equation, but it nevertheless retains an ambiguity: since only derivatives of the solution appear in the equations, the solution is only determined up to a constant. For this reason, we have to pose another condition for the numerical solution, which fixes this constant.</p>
 <p>For this, there are various possibilities: </p><ol>
 <li>
-<p class="startli">Fix one node of the discretization to zero or any other fixed value. This amounts to an additional condition <picture><source srcset="form_2753_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(x_0)=0$" src="form_2753.png"/></picture>. Although this is common practice, it is not necessarily a good idea, since we know that the solutions of Laplace's equation are only in <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture>, which does not allow for the definition of point values because it is not a subset of the continuous functions. Therefore, even though fixing one node is allowed for discretized functions, it is not for continuous functions, and one can often see this in a resulting error spike at this point in the numerical solution.</p>
+<p class="startli">Fix one node of the discretization to zero or any other fixed value. This amounts to an additional condition <picture><source srcset="form_2764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(x_0)=0$" src="form_2764.png"/></picture>. Although this is common practice, it is not necessarily a good idea, since we know that the solutions of Laplace's equation are only in <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture>, which does not allow for the definition of point values because it is not a subset of the continuous functions. Therefore, even though fixing one node is allowed for discretized functions, it is not for continuous functions, and one can often see this in a resulting error spike at this point in the numerical solution.</p>
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">Fixing the mean value over the domain to zero or any other value. This is allowed on the continuous level, since <picture><source srcset="form_2754_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Omega)\subset L^1(\Omega)$" src="form_2754.png"/></picture> by Sobolev's inequality, and thus also on the discrete level since we there only consider subsets of <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture>.</p>
+<p class="startli">Fixing the mean value over the domain to zero or any other value. This is allowed on the continuous level, since <picture><source srcset="form_2765_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Omega)\subset L^1(\Omega)$" src="form_2765.png"/></picture> by Sobolev's inequality, and thus also on the discrete level since we there only consider subsets of <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture>.</p>
 <p class="endli"></p>
 </li>
 <li>
-Fixing the mean value over the boundary of the domain to zero or any other value. This is also allowed on the continuous level, since <picture><source srcset="form_2756_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{1/2}(\partial\Omega)\subset L^1(\partial\Omega)$" src="form_2756.png"/></picture>, again by Sobolev's inequality. </li>
+Fixing the mean value over the boundary of the domain to zero or any other value. This is also allowed on the continuous level, since <picture><source srcset="form_2766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{1/2}(\partial\Omega)\subset L^1(\partial\Omega)$" src="form_2766.png"/></picture>, again by Sobolev's inequality. </li>
 </ol>
 <p>We will choose the last possibility, since we want to demonstrate another technique with it.</p>
 <p>While this describes the problem to be solved, we still have to figure out how to implement it. Basically, except for the additional mean value constraint, we have solved this problem several times, using Dirichlet boundary values, and we only need to drop the treatment of Dirichlet boundary nodes. The use of higher order mappings is also rather trivial and will be explained at the various places where we use it; in almost all conceivable cases, you will only consider the objects describing mappings as a black box which you need not worry about, because their only uses seem to be to be passed to places deep inside the library where functions know how to handle them (i.e. in the <code><a class="el" href="classFEValues.html">FEValues</a></code> classes and their descendants).</p>
 <p>The tricky point in this program is the use of the mean value constraint. Fortunately, there is a class in the library which knows how to handle such constraints, and we have used it quite often already, without mentioning its generality. Note that if we assume that the boundary nodes are spaced equally along the boundary, then the mean value constraint  </p><p class="formulaDsp">
-<picture><source srcset="form_2757_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2767_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \int_{\partial \Omega} u(x) \; ds = 0
-\]" src="form_2757.png"/></picture>
+\]" src="form_2767.png"/></picture>
 </p>
 <p> can be written as  </p><p class="formulaDsp">
-<picture><source srcset="form_2758_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2768_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \sum_{i\in\partial\Omega_h} u_i = 0,
-\]" src="form_2758.png"/></picture>
+\]" src="form_2768.png"/></picture>
 </p>
-<p> where the sum shall run over all degree of freedom indices which are located on the boundary of the computational domain. Let us denote by <picture><source srcset="form_2759_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i_0$" src="form_2759.png"/></picture> that index on the boundary with the lowest number (or any other conveniently chosen index), then the constraint can also be represented by  </p><p class="formulaDsp">
-<picture><source srcset="form_2760_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where the sum shall run over all degree of freedom indices which are located on the boundary of the computational domain. Let us denote by <picture><source srcset="form_2769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i_0$" src="form_2769.png"/></picture> that index on the boundary with the lowest number (or any other conveniently chosen index), then the constraint can also be represented by  </p><p class="formulaDsp">
+<picture><source srcset="form_2770_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   u_{i_0} = \sum_{i\in\partial\Omega_h\backslash i_0} -u_i.
-\]" src="form_2760.png"/></picture>
+\]" src="form_2770.png"/></picture>
 </p>
 <p> This, luckily, is exactly the form of constraints for which the <a class="el" href="classAffineConstraints.html">AffineConstraints</a> class was designed. Note that we have used this class in several previous examples for the representation of hanging nodes constraints, which also have this form: there, the middle vertex shall have the mean of the values of the adjacent vertices. In general, the <a class="el" href="classAffineConstraints.html">AffineConstraints</a> class is designed to handle affine constraints of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_2761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2771_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   CU = b
-\]" src="form_2761.png"/></picture>
+\]" src="form_2771.png"/></picture>
 </p>
 <p> where <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> denotes a matrix, <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> denotes a vector, and <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> the vector of nodal values. In this case, since <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> represents one homogeneous constraint, <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> is the zero vector.</p>
-<p>In this example, the mean value along the boundary allows just such a representation, with <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> being a matrix with just one row (i.e. there is only one constraint). In the implementation, we will create an <a class="el" href="classAffineConstraints.html">AffineConstraints</a> object, add one constraint (i.e. add another row to the matrix) referring to the first boundary node <picture><source srcset="form_2759_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i_0$" src="form_2759.png"/></picture>, and insert the weights with which all the other nodes contribute, which in this example happens to be just <picture><source srcset="form_348_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-1$" src="form_348.png"/></picture>.</p>
+<p>In this example, the mean value along the boundary allows just such a representation, with <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> being a matrix with just one row (i.e. there is only one constraint). In the implementation, we will create an <a class="el" href="classAffineConstraints.html">AffineConstraints</a> object, add one constraint (i.e. add another row to the matrix) referring to the first boundary node <picture><source srcset="form_2769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i_0$" src="form_2769.png"/></picture>, and insert the weights with which all the other nodes contribute, which in this example happens to be just <picture><source srcset="form_348_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-1$" src="form_348.png"/></picture>.</p>
 <p>Later, we will use this object to eliminate the first boundary node from the linear system of equations, reducing it to one which has a solution without the ambiguity of the constant shift value. One of the problems of the implementation will be that the explicit elimination of this node results in a number of additional elements in the matrix, of which we do not know in advance where they are located and how many additional entries will be in each of the rows of the matrix. We will show how we can use an intermediate object to work around this problem.</p>
 <p>But now on to the implementation of the program solving this problem...</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
@@ -324,8 +324,8 @@
 <div class="ttc" id="anamespacestd_html_a7c6dd82cc3e9f70e162ddc6b9d5af521"><div class="ttname"><a href="namespacestd.html#href_anchor">std::max</a></div><div class="ttdeci">::VectorizedArray&lt; Number, width &gt; max(const ::VectorizedArray&lt; Number, width &gt; &amp;, const ::VectorizedArray&lt; Number, width &gt; &amp;)</div><div class="ttdef"><b>Definition</b> <a href="vectorization_8h_source.html#href_anchor">vectorization.h:6024</a></div></div>
 </div><!-- fragment --><p>That's quite simple, right?</p>
 <p>Two remarks are in order, though: First, these functions are used in a lot of contexts. Maybe you want to create a Laplace or <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> for a vector values finite element; or you want to use the default Q1 mapping; or you want to assembled the matrix with a coefficient in the Laplace operator. For this reason, there are quite a large number of variants of these functions in the <code><a class="el" href="namespaceMatrixCreator.html">MatrixCreator</a></code> and <code><a class="el" href="namespaceMatrixTools.html">MatrixTools</a></code> namespaces. Whenever you need a slightly different version of these functions than the ones called above, it is certainly worthwhile to take a look at the documentation and to check whether something fits your needs.</p>
-<p>The second remark concerns the quadrature formula we use: we want to integrate over bilinear shape functions, so we know that we have to use at least an order two Gauss quadrature formula. On the other hand, we want the quadrature rule to have at least the order of the boundary approximation. Since the order of Gauss rule with <picture><source srcset="form_414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_414.png"/></picture> points is <picture><source srcset="form_2766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2r -
-   1$" src="form_2766.png"/></picture>, and the order of the boundary approximation using polynomials of degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> is <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>, we know that <picture><source srcset="form_2767_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2r \geq p$" src="form_2767.png"/></picture>. Since r has to be an integer and (as mentioned above) has to be at least <picture><source srcset="form_1326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1326.png"/></picture>, this makes up for the formula above computing <code>gauss_degree</code>.</p>
+<p>The second remark concerns the quadrature formula we use: we want to integrate over bilinear shape functions, so we know that we have to use at least an order two Gauss quadrature formula. On the other hand, we want the quadrature rule to have at least the order of the boundary approximation. Since the order of Gauss rule with <picture><source srcset="form_378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_378.png"/></picture> points is <picture><source srcset="form_2772_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2r -
+   1$" src="form_2772.png"/></picture>, and the order of the boundary approximation using polynomials of degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> is <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>, we know that <picture><source srcset="form_2773_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2r \geq p$" src="form_2773.png"/></picture>. Since r has to be an integer and (as mentioned above) has to be at least <picture><source srcset="form_1327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2$" src="form_1327.png"/></picture>, this makes up for the formula above computing <code>gauss_degree</code>.</p>
 <p>Since the generation of the body force contributions to the right hand side vector was so simple, we do that all over again for the boundary forces as well: allocate a vector of the right size and call the right function. The boundary function has constant values, so we can generate an object from the library on the fly, and we use the same quadrature formula as above, but this time of lower dimension since we integrate over faces now instead of cells:</p>
 <div class="fragment"><div class="line">      <a class="code hl_class" href="classVector.html">Vector&lt;double&gt;</a> tmp(system_rhs.size());</div>
 <div class="line">      <a class="code hl_function" href="namespaceVectorTools.html#href_anchor">VectorTools::create_boundary_right_hand_side</a>(</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_12.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_12.html	2024-03-17 21:57:43.695235855 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_12.html	2024-03-17 21:57:43.699235880 +0000
@@ -136,50 +136,50 @@
 <p>The particular concern of this program are the loops of DG methods. These turn out to be especially complex, primarily because for the face terms, we have to distinguish the cases of boundary, regular interior faces and interior faces with hanging nodes, respectively. The <a class="el" href="group__MeshWorker.html#href_anchor">MeshWorker::mesh_loop()</a> handles the complexity on iterating over cells and faces and allows specifying "workers" for the different cell and face terms. The integration of face terms itself, including on adaptively refined faces, is done using the <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a> class.</p>
 <p><a class="anchor" id="Theequation"></a></p><h3>The equation</h3>
 <p>The model problem solved in this example is the linear advection equation  </p><p class="formulaDsp">
-<picture><source srcset="form_2781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2774_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \nabla\cdot \left({\mathbf \beta} u\right)=0 \qquad\mbox{in }\Omega,
-\]" src="form_2781.png"/></picture>
+\]" src="form_2774.png"/></picture>
 </p>
 <p> subject to the boundary conditions  </p><p class="formulaDsp">
-<picture><source srcset="form_2782_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2775_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u=g\quad\mbox{on }\Gamma_-,
-\]" src="form_2782.png"/></picture>
+\]" src="form_2775.png"/></picture>
 </p>
-<p> on the inflow part <picture><source srcset="form_2783_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_-$" src="form_2783.png"/></picture> of the boundary <picture><source srcset="form_2784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma=\partial\Omega$" src="form_2784.png"/></picture> of the domain. Here, <picture><source srcset="form_2785_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf \beta}={\mathbf \beta}({\bf x})$" src="form_2785.png"/></picture> denotes a vector field, <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> the (scalar) solution function, <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> a boundary value function,  </p><p class="formulaDsp">
-<picture><source srcset="form_2786_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> on the inflow part <picture><source srcset="form_2776_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_-$" src="form_2776.png"/></picture> of the boundary <picture><source srcset="form_2777_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma=\partial\Omega$" src="form_2777.png"/></picture> of the domain. Here, <picture><source srcset="form_2778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf \beta}={\mathbf \beta}({\bf x})$" src="form_2778.png"/></picture> denotes a vector field, <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> the (scalar) solution function, <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> a boundary value function,  </p><p class="formulaDsp">
+<picture><source srcset="form_2779_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \Gamma_- \dealcoloneq \{{\bf x}\in\Gamma, {\mathbf \beta}({\bf x})\cdot{\bf n}({\bf x})&lt;0\}
-\]" src="form_2786.png"/></picture>
+\]" src="form_2779.png"/></picture>
 </p>
-<p> the inflow part of the boundary of the domain and <picture><source srcset="form_2787_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf n}$" src="form_2787.png"/></picture> denotes the unit outward normal to the boundary <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>. This equation is the conservative version of the advection equation already considered in <a class="el" href="step_9.html">step-9</a> of this tutorial.</p>
-<p>On each cell <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture>, we multiply by a test function <picture><source srcset="form_2788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2788.png"/></picture> from the left and integrate by parts to get:  </p><p class="formulaDsp">
-<picture><source srcset="form_2789_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> the inflow part of the boundary of the domain and <picture><source srcset="form_2780_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf n}$" src="form_2780.png"/></picture> denotes the unit outward normal to the boundary <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>. This equation is the conservative version of the advection equation already considered in <a class="el" href="step_9.html">step-9</a> of this tutorial.</p>
+<p>On each cell <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture>, we multiply by a test function <picture><source srcset="form_2781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2781.png"/></picture> from the left and integrate by parts to get:  </p><p class="formulaDsp">
+<picture><source srcset="form_2782_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \left( v_h, \nabla \cdot (\beta u_h) \right)_T
 = -(\nabla v_h, \beta u_h) + \int_{\partial T} v_h u_h \beta \cdot n
-\]" src="form_2789.png"/></picture>
+\]" src="form_2782.png"/></picture>
 </p>
-<p> When summing this expression over all cells <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture>, the boundary integral is done over all internal and external faces and as such there are three cases: </p><ol>
+<p> When summing this expression over all cells <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture>, the boundary integral is done over all internal and external faces and as such there are three cases: </p><ol>
 <li>
-outer boundary on the inflow (we replace <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> by given <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture>): <picture><source srcset="form_2790_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{\Gamma_-} v_h g \beta \cdot n$" src="form_2790.png"/></picture> </li>
+outer boundary on the inflow (we replace <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> by given <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture>): <picture><source srcset="form_2783_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{\Gamma_-} v_h g \beta \cdot n$" src="form_2783.png"/></picture> </li>
 <li>
-outer boundary on the outflow: <picture><source srcset="form_2791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{\Gamma_+} v_h u_h \beta \cdot n$" src="form_2791.png"/></picture> </li>
+outer boundary on the outflow: <picture><source srcset="form_2784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{\Gamma_+} v_h u_h \beta \cdot n$" src="form_2784.png"/></picture> </li>
 <li>
-inner faces (integral from two sides turns into jump, we use the upwind velocity): <picture><source srcset="form_2792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_F [v_h] u_h^{\text{upwind}} \beta \cdot n$" src="form_2792.png"/></picture> </li>
+inner faces (integral from two sides turns into jump, we use the upwind velocity): <picture><source srcset="form_2785_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_F [v_h] u_h^{\text{upwind}} \beta \cdot n$" src="form_2785.png"/></picture> </li>
 </ol>
-<p>Here, the jump is defined as <picture><source srcset="form_2793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[v] = v^+ - v^-$" src="form_2793.png"/></picture>, where the superscripts refer to the left ('+') and right ('-') values at the face. The upwind value <picture><source srcset="form_2794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{\text{upwind}}$" src="form_2794.png"/></picture> is defined to be <picture><source srcset="form_2795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^+$" src="form_2795.png"/></picture> if <picture><source srcset="form_2796_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta \cdot n&gt;0$" src="form_2796.png"/></picture> and <picture><source srcset="form_2797_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^-$" src="form_2797.png"/></picture> otherwise.</p>
+<p>Here, the jump is defined as <picture><source srcset="form_2786_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[v] = v^+ - v^-$" src="form_2786.png"/></picture>, where the superscripts refer to the left ('+') and right ('-') values at the face. The upwind value <picture><source srcset="form_2787_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{\text{upwind}}$" src="form_2787.png"/></picture> is defined to be <picture><source srcset="form_2788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^+$" src="form_2788.png"/></picture> if <picture><source srcset="form_2789_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta \cdot n&gt;0$" src="form_2789.png"/></picture> and <picture><source srcset="form_2790_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^-$" src="form_2790.png"/></picture> otherwise.</p>
 <p>As a result, the mesh-dependent weak form reads:  </p><p class="formulaDsp">
-<picture><source srcset="form_2798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \sum_{T\in \mathbb T_h} -\bigl(\nabla \phi_i,{\mathbf \beta}\cdot \phi_j \bigr)_T +
 \sum_{F\in\mathbb F_h^i} \bigl&lt; [\phi_i], \phi_j^{upwind} \beta\cdot \mathbf n\bigr&gt;_{F} +
 \bigl&lt;\phi_i, \phi_j \beta\cdot \mathbf n\bigr&gt;_{\Gamma_+}
 = -\bigl&lt;\phi_i, g \beta\cdot\mathbf n\bigr&gt;_{\Gamma_-}.
-\]" src="form_2798.png"/></picture>
+\]" src="form_2791.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_2799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb T_h$" src="form_2799.png"/></picture> is the set of all active cells of the triangulation and <picture><source srcset="form_2800_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb F_h^i$" src="form_2800.png"/></picture> is the set of all active interior faces. This formulation is known as the upwind discontinuous Galerkin method.</p>
+<p> Here, <picture><source srcset="form_2792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb T_h$" src="form_2792.png"/></picture> is the set of all active cells of the triangulation and <picture><source srcset="form_2793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb F_h^i$" src="form_2793.png"/></picture> is the set of all active interior faces. This formulation is known as the upwind discontinuous Galerkin method.</p>
 <p>In order to implement this bilinear form, we need to compute the cell terms (first sum) using the usual way to achieve integration on a cell, the interface terms (second sum) using <a class="el" href="classFEInterfaceValues.html">FEInterfaceValues</a>, and the boundary terms (the other two terms). The summation of all those is done by <a class="el" href="group__MeshWorker.html#href_anchor">MeshWorker::mesh_loop()</a>.</p>
 <p><a class="anchor" id="Thetestproblem"></a></p><h3>The test problem</h3>
-<p>We solve the advection equation on <picture><source srcset="form_2801_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega=[0,1]^2$" src="form_2801.png"/></picture> with <picture><source srcset="form_2802_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf \beta}=\frac{1}{|x|}(-x_2, x_1)$" src="form_2802.png"/></picture> representing a circular counterclockwise flow field, and <picture><source srcset="form_2750_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g=1$" src="form_2750.png"/></picture> on <picture><source srcset="form_2803_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf x}\in\Gamma_-^1 := [0,0.5]\times\{0\}$" src="form_2803.png"/></picture> and <picture><source srcset="form_2804_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g=0$" src="form_2804.png"/></picture> on <picture><source srcset="form_2805_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf x}\in
-\Gamma_-\setminus \Gamma_-^1$" src="form_2805.png"/></picture>.</p>
-<p>We solve on a sequence of meshes by refining the mesh adaptively by estimating the norm of the gradient on each cell. After solving on each mesh, we output the solution in vtk format and compute the <picture><source srcset="form_2806_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^\infty$" src="form_2806.png"/></picture> norm of the solution. As the exact solution is either 0 or 1, we can measure the magnitude of the overshoot of the numerical solution with this.</p>
+<p>We solve the advection equation on <picture><source srcset="form_2794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega=[0,1]^2$" src="form_2794.png"/></picture> with <picture><source srcset="form_2795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf \beta}=\frac{1}{|x|}(-x_2, x_1)$" src="form_2795.png"/></picture> representing a circular counterclockwise flow field, and <picture><source srcset="form_2763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g=1$" src="form_2763.png"/></picture> on <picture><source srcset="form_2796_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf x}\in\Gamma_-^1 := [0,0.5]\times\{0\}$" src="form_2796.png"/></picture> and <picture><source srcset="form_2797_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g=0$" src="form_2797.png"/></picture> on <picture><source srcset="form_2798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf x}\in
+\Gamma_-\setminus \Gamma_-^1$" src="form_2798.png"/></picture>.</p>
+<p>We solve on a sequence of meshes by refining the mesh adaptively by estimating the norm of the gradient on each cell. After solving on each mesh, we output the solution in vtk format and compute the <picture><source srcset="form_2799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^\infty$" src="form_2799.png"/></picture> norm of the solution. As the exact solution is either 0 or 1, we can measure the magnitude of the overshoot of the numerical solution with this.</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
 <p>The first few files have already been covered in previous examples and will thus not be further commented on:</p>
 <div class="fragment"><div class="line">  #include &lt;deal.II/base/quadrature_lib.h&gt;</div>
@@ -256,7 +256,7 @@
 <div class="line">  </div>
 <div class="ttc" id="agroup__Exceptions_html_ga9442b63275c9ef3fab29bc222831c49c"><div class="ttname"><a href="group__Exceptions.html#href_anchor">AssertDimension</a></div><div class="ttdeci">#define AssertDimension(dim1, dim2)</div><div class="ttdef"><b>Definition</b> <a href="include_2deal_8II_2base_2exceptions_8h_source.html#href_anchor">exceptions.h:1787</a></div></div>
 <div class="ttc" id="agroup__Exceptions_html_gaafbb69cc2a791ae55880fd8d57d0c1b0"><div class="ttname"><a href="group__Exceptions.html#href_anchor">AssertIndexRange</a></div><div class="ttdeci">#define AssertIndexRange(index, range)</div><div class="ttdef"><b>Definition</b> <a href="include_2deal_8II_2base_2exceptions_8h_source.html#href_anchor">exceptions.h:1855</a></div></div>
-</div><!-- fragment --><p>Finally, a function that computes and returns the wind field <picture><source srcset="form_2774_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta=\beta(\mathbf x)$" src="form_2774.png"/></picture>. As explained in the introduction, we will use a rotational field around the origin in 2d. In 3d, we simply leave the <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>-component unset (i.e., at zero), whereas the function can not be used in 1d in its current implementation:</p>
+</div><!-- fragment --><p>Finally, a function that computes and returns the wind field <picture><source srcset="form_2800_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta=\beta(\mathbf x)$" src="form_2800.png"/></picture>. As explained in the introduction, we will use a rotational field around the origin in 2d. In 3d, we simply leave the <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>-component unset (i.e., at zero), whereas the function can not be used in 1d in its current implementation:</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <a class="code hl_class" href="classTensor.html">Tensor&lt;1, dim&gt;</a> beta(<span class="keyword">const</span> <a class="code hl_class" href="classPoint.html">Point&lt;dim&gt;</a> &amp;p)</div>
 <div class="line">    {</div>
@@ -623,7 +623,7 @@
 <div class="line">    }</div>
 <div class="line">  </div>
 <div class="line">  </div>
-</div><!-- fragment --><p>We refine the grid according to a very simple refinement criterion, namely an approximation to the gradient of the solution. As here we consider the DG(1) method (i.e. we use piecewise bilinear shape functions) we could simply compute the gradients on each cell. But we do not want to base our refinement indicator on the gradients on each cell only, but want to base them also on jumps of the discontinuous solution function over faces between neighboring cells. The simplest way of doing that is to compute approximative gradients by difference quotients including the cell under consideration and its neighbors. This is done by the <code><a class="el" href="namespaceDerivativeApproximation.html">DerivativeApproximation</a></code> class that computes the approximate gradients in a way similar to the <code>GradientEstimation</code> described in <a class="el" href="step_9.html">step-9</a> of this tutorial. In fact, the <code><a class="el" href="namespaceDerivativeApproximation.html">DerivativeApproximation</a></code> class was developed following the <code>GradientEstimation</code> class of <a class="el" href="step_9.html">step-9</a>. Relating to the discussion in <a class="el" href="step_9.html">step-9</a>, here we consider <picture><source srcset="form_2777_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{1+d/2}|\nabla_h u_h|$" src="form_2777.png"/></picture>. Furthermore we note that we do not consider approximate second derivatives because solutions to the linear advection equation are in general not in <picture><source srcset="form_2778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^2$" src="form_2778.png"/></picture> but only in <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture> (or, to be more precise: in <picture><source srcset="form_2779_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1_\beta$" src="form_2779.png"/></picture>, i.e., the space of functions whose derivatives in direction <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> are square integrable).</p>
+</div><!-- fragment --><p>We refine the grid according to a very simple refinement criterion, namely an approximation to the gradient of the solution. As here we consider the DG(1) method (i.e. we use piecewise bilinear shape functions) we could simply compute the gradients on each cell. But we do not want to base our refinement indicator on the gradients on each cell only, but want to base them also on jumps of the discontinuous solution function over faces between neighboring cells. The simplest way of doing that is to compute approximative gradients by difference quotients including the cell under consideration and its neighbors. This is done by the <code><a class="el" href="namespaceDerivativeApproximation.html">DerivativeApproximation</a></code> class that computes the approximate gradients in a way similar to the <code>GradientEstimation</code> described in <a class="el" href="step_9.html">step-9</a> of this tutorial. In fact, the <code><a class="el" href="namespaceDerivativeApproximation.html">DerivativeApproximation</a></code> class was developed following the <code>GradientEstimation</code> class of <a class="el" href="step_9.html">step-9</a>. Relating to the discussion in <a class="el" href="step_9.html">step-9</a>, here we consider <picture><source srcset="form_2801_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{1+d/2}|\nabla_h u_h|$" src="form_2801.png"/></picture>. Furthermore we note that we do not consider approximate second derivatives because solutions to the linear advection equation are in general not in <picture><source srcset="form_2802_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^2$" src="form_2802.png"/></picture> but only in <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture> (or, to be more precise: in <picture><source srcset="form_2803_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1_\beta$" src="form_2803.png"/></picture>, i.e., the space of functions whose derivatives in direction <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> are square integrable).</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> AdvectionProblem&lt;dim&gt;::refine_grid()</div>
 <div class="line">    {</div>
@@ -637,7 +637,7 @@
 <div class="line">                                                    gradient_indicator);</div>
 <div class="line">  </div>
 <div class="ttc" id="anamespaceDerivativeApproximation_html_a98d28e4c1c17164c48719cdfe4a363e6"><div class="ttname"><a href="namespaceDerivativeApproximation.html#href_anchor">DerivativeApproximation::approximate_gradient</a></div><div class="ttdeci">void approximate_gradient(const Mapping&lt; dim, spacedim &gt; &amp;mapping, const DoFHandler&lt; dim, spacedim &gt; &amp;dof, const InputVector &amp;solution, Vector&lt; float &gt; &amp;derivative_norm, const unsigned int component=0)</div><div class="ttdef"><b>Definition</b> <a href="derivative__approximation_8cc_source.html#href_anchor">derivative_approximation.cc:1018</a></div></div>
-</div><!-- fragment --><p>and they are cell-wise scaled by the factor <picture><source srcset="form_2780_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{1+d/2}$" src="form_2780.png"/></picture></p>
+</div><!-- fragment --><p>and they are cell-wise scaled by the factor <picture><source srcset="form_2804_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{1+d/2}$" src="form_2804.png"/></picture></p>
 <div class="fragment"><div class="line">      <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cell_no = 0;</div>
 <div class="line">      <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;cell : dof_handler.active_cell_iterators())</div>
 <div class="line">        gradient_indicator(cell_no++) *=</div>
@@ -820,11 +820,11 @@
 <tr>
 <td valign="top">4 &#160;  </td><td valign="top"><img src="https://www.dealii.org/images/steps/developer/step-12.cg.sol-4.png" alt="" class="inline"/>  </td><td valign="top">5 &#160;  </td><td valign="top"><img src="https://www.dealii.org/images/steps/developer/step-12.cg.sol-5.png" alt="" class="inline"/>   </td></tr>
 </table>
-<p>In refinement iteration 5, the image can't be plotted in a reasonable way any more as a 3d plot. We thus show a color plot with a range of <picture><source srcset="form_2807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,2]$" src="form_2807.png"/></picture> (the solution values of the exact solution lie in <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture>, of course). In any case, it is clear that the continuous Galerkin solution exhibits oscillatory behavior that gets worse and worse as the mesh is refined more and more.</p>
+<p>In refinement iteration 5, the image can't be plotted in a reasonable way any more as a 3d plot. We thus show a color plot with a range of <picture><source srcset="form_2805_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,2]$" src="form_2805.png"/></picture> (the solution values of the exact solution lie in <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture>, of course). In any case, it is clear that the continuous Galerkin solution exhibits oscillatory behavior that gets worse and worse as the mesh is refined more and more.</p>
 <p>There are a number of strategies to stabilize the cG method, if one wants to use continuous elements for some reason. Discussing these methods is beyond the scope of this tutorial program; an interested reader could, for example, take a look at <a class="el" href="step_31.html">step-31</a>.</p>
 <p><a class="anchor" id="extensions"></a> <a class="anchor" id="Possibilitiesforextensions"></a></p><h3>Possibilities for extensions</h3>
-<p>Given that the exact solution is known in this case, one interesting avenue for further extensions would be to confirm the order of convergence for this program. In the current case, the solution is non-smooth, and so we can not expect to get a particularly high order of convergence, even if we used higher order elements. But even if the solution <em>is</em> smooth, the equation is not elliptic and so it is not immediately clear that we should obtain a convergence order that equals that of the optimal interpolation estimates (i.e. for example that we would get <picture><source srcset="form_2808_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^3$" src="form_2808.png"/></picture> convergence in the <picture><source srcset="form_1209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2$" src="form_1209.png"/></picture> norm by using quadratic elements).</p>
-<p>In fact, for hyperbolic equations, theoretical predictions often indicate that the best one can hope for is an order one half below the interpolation estimate. For example, for the streamline diffusion method (an alternative method to the DG method used here to stabilize the solution of the transport equation), one can prove that for elements of degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>, the order of convergence is <picture><source srcset="form_2809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+\frac 12$" src="form_2809.png"/></picture> on arbitrary meshes. While the observed order is frequently <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture> on uniformly refined meshes, one can construct so-called Peterson meshes on which the worse theoretical bound is actually attained. This should be relatively simple to verify, for example using the <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::integrate_difference</a> function.</p>
+<p>Given that the exact solution is known in this case, one interesting avenue for further extensions would be to confirm the order of convergence for this program. In the current case, the solution is non-smooth, and so we can not expect to get a particularly high order of convergence, even if we used higher order elements. But even if the solution <em>is</em> smooth, the equation is not elliptic and so it is not immediately clear that we should obtain a convergence order that equals that of the optimal interpolation estimates (i.e. for example that we would get <picture><source srcset="form_2806_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^3$" src="form_2806.png"/></picture> convergence in the <picture><source srcset="form_1209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2$" src="form_1209.png"/></picture> norm by using quadratic elements).</p>
+<p>In fact, for hyperbolic equations, theoretical predictions often indicate that the best one can hope for is an order one half below the interpolation estimate. For example, for the streamline diffusion method (an alternative method to the DG method used here to stabilize the solution of the transport equation), one can prove that for elements of degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>, the order of convergence is <picture><source srcset="form_2807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+\frac 12$" src="form_2807.png"/></picture> on arbitrary meshes. While the observed order is frequently <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture> on uniformly refined meshes, one can construct so-called Peterson meshes on which the worse theoretical bound is actually attained. This should be relatively simple to verify, for example using the <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::integrate_difference</a> function.</p>
 <p>A different direction is to observe that the solution of transport problems often has discontinuities and that therefore a mesh in which we <em>bisect</em> every cell in every coordinate direction may not be optimal. Rather, a better strategy would be to only cut cells in the direction parallel to the discontinuity. This is called <em>anisotropic mesh refinement</em> and is the subject of <a class="el" href="step_30.html">step-30</a>.</p>
 <p><a class="anchor" id="PlainProg"></a> </p><h1>The plain program</h1>
 <div class="fragment"><div class="line"><span class="comment">/* ---------------------------------------------------------------------</span></div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_12b.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_12b.html	2024-03-17 21:57:43.747236176 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_12b.html	2024-03-17 21:57:43.751236201 +0000
@@ -197,7 +197,7 @@
 <div class="line">  </div>
 <div class="ttc" id="agroup__Exceptions_html_ga9442b63275c9ef3fab29bc222831c49c"><div class="ttname"><a href="group__Exceptions.html#href_anchor">AssertDimension</a></div><div class="ttdeci">#define AssertDimension(dim1, dim2)</div><div class="ttdef"><b>Definition</b> <a href="include_2deal_8II_2base_2exceptions_8h_source.html#href_anchor">exceptions.h:1787</a></div></div>
 <div class="ttc" id="agroup__Exceptions_html_gaafbb69cc2a791ae55880fd8d57d0c1b0"><div class="ttname"><a href="group__Exceptions.html#href_anchor">AssertIndexRange</a></div><div class="ttdeci">#define AssertIndexRange(index, range)</div><div class="ttdef"><b>Definition</b> <a href="include_2deal_8II_2base_2exceptions_8h_source.html#href_anchor">exceptions.h:1855</a></div></div>
-</div><!-- fragment --><p>Finally, a function that computes and returns the wind field <picture><source srcset="form_2774_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta=\beta(\mathbf x)$" src="form_2774.png"/></picture>. As explained in the introduction, we will use a rotational field around the origin in 2d. In 3d, we simply leave the <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>-component unset (i.e., at zero), whereas the function can not be used in 1d in its current implementation:</p>
+</div><!-- fragment --><p>Finally, a function that computes and returns the wind field <picture><source srcset="form_2800_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta=\beta(\mathbf x)$" src="form_2800.png"/></picture>. As explained in the introduction, we will use a rotational field around the origin in 2d. In 3d, we simply leave the <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>-component unset (i.e., at zero), whereas the function can not be used in 1d in its current implementation:</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <a class="code hl_class" href="classTensor.html">Tensor&lt;1, dim&gt;</a> beta(<span class="keyword">const</span> <a class="code hl_class" href="classPoint.html">Point&lt;dim&gt;</a> &amp;p)</div>
 <div class="line">    {</div>
@@ -466,8 +466,8 @@
 <div class="line">                                        fe_face_values.shape_value(i, point) * </div>
 <div class="line">                                        JxW[point];</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>We additionally assemble the term <picture><source srcset="form_2775_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\beta\cdot n u,\hat
-   v)_{\partial \kappa_+}$" src="form_2775.png"/></picture>,</p>
+</div><!-- fragment --><p>We additionally assemble the term <picture><source srcset="form_2808_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\beta\cdot n u,\hat
+   v)_{\partial \kappa_+}$" src="form_2808.png"/></picture>,</p>
 <div class="fragment"><div class="line">              <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k = 0; k &lt; neighbor_dofs_per_cell; ++k)</div>
 <div class="line">                <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; dofs_per_cell; ++j)</div>
 <div class="line">                  u1_v2_matrix(k, j) +=</div>
@@ -487,8 +487,8 @@
 <div class="line">                    fe_face_values.shape_value(i, point) *          </div>
 <div class="line">                    JxW[point];</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>And this is another new one: <picture><source srcset="form_2776_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\beta\cdot n \hat u,\hat
-   v)_{\partial \kappa_-}$" src="form_2776.png"/></picture>:</p>
+</div><!-- fragment --><p>And this is another new one: <picture><source srcset="form_2809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\beta\cdot n \hat u,\hat
+   v)_{\partial \kappa_-}$" src="form_2809.png"/></picture>:</p>
 <div class="fragment"><div class="line">              <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> k = 0; k &lt; neighbor_dofs_per_cell; ++k)</div>
 <div class="line">                <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> l = 0; l &lt; neighbor_dofs_per_cell; ++l)</div>
 <div class="line">                  u2_v2_matrix(k, l) +=</div>
@@ -523,7 +523,7 @@
 <div class="line">    }</div>
 <div class="line">  </div>
 <div class="line">  </div>
-</div><!-- fragment --><p>We refine the grid according to a very simple refinement criterion, namely an approximation to the gradient of the solution. As here we consider the DG(1) method (i.e. we use piecewise bilinear shape functions) we could simply compute the gradients on each cell. But we do not want to base our refinement indicator on the gradients on each cell only, but want to base them also on jumps of the discontinuous solution function over faces between neighboring cells. The simplest way of doing that is to compute approximative gradients by difference quotients including the cell under consideration and its neighbors. This is done by the <code><a class="el" href="namespaceDerivativeApproximation.html">DerivativeApproximation</a></code> class that computes the approximate gradients in a way similar to the <code>GradientEstimation</code> described in <a class="el" href="step_9.html">step-9</a> of this tutorial. In fact, the <code><a class="el" href="namespaceDerivativeApproximation.html">DerivativeApproximation</a></code> class was developed following the <code>GradientEstimation</code> class of <a class="el" href="step_9.html">step-9</a>. Relating to the discussion in <a class="el" href="step_9.html">step-9</a>, here we consider <picture><source srcset="form_2777_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{1+d/2}|\nabla_h u_h|$" src="form_2777.png"/></picture>. Furthermore we note that we do not consider approximate second derivatives because solutions to the linear advection equation are in general not in <picture><source srcset="form_2778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^2$" src="form_2778.png"/></picture> but only in <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture> (or, to be more precise: in <picture><source srcset="form_2779_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1_\beta$" src="form_2779.png"/></picture>, i.e., the space of functions whose derivatives in direction <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> are square integrable).</p>
+</div><!-- fragment --><p>We refine the grid according to a very simple refinement criterion, namely an approximation to the gradient of the solution. As here we consider the DG(1) method (i.e. we use piecewise bilinear shape functions) we could simply compute the gradients on each cell. But we do not want to base our refinement indicator on the gradients on each cell only, but want to base them also on jumps of the discontinuous solution function over faces between neighboring cells. The simplest way of doing that is to compute approximative gradients by difference quotients including the cell under consideration and its neighbors. This is done by the <code><a class="el" href="namespaceDerivativeApproximation.html">DerivativeApproximation</a></code> class that computes the approximate gradients in a way similar to the <code>GradientEstimation</code> described in <a class="el" href="step_9.html">step-9</a> of this tutorial. In fact, the <code><a class="el" href="namespaceDerivativeApproximation.html">DerivativeApproximation</a></code> class was developed following the <code>GradientEstimation</code> class of <a class="el" href="step_9.html">step-9</a>. Relating to the discussion in <a class="el" href="step_9.html">step-9</a>, here we consider <picture><source srcset="form_2801_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{1+d/2}|\nabla_h u_h|$" src="form_2801.png"/></picture>. Furthermore we note that we do not consider approximate second derivatives because solutions to the linear advection equation are in general not in <picture><source srcset="form_2802_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^2$" src="form_2802.png"/></picture> but only in <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture> (or, to be more precise: in <picture><source srcset="form_2803_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1_\beta$" src="form_2803.png"/></picture>, i.e., the space of functions whose derivatives in direction <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> are square integrable).</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> AdvectionProblem&lt;dim&gt;::refine_grid()</div>
 <div class="line">    {</div>
@@ -537,7 +537,7 @@
 <div class="line">                                                    gradient_indicator);</div>
 <div class="line">  </div>
 <div class="ttc" id="anamespaceDerivativeApproximation_html_a98d28e4c1c17164c48719cdfe4a363e6"><div class="ttname"><a href="namespaceDerivativeApproximation.html#href_anchor">DerivativeApproximation::approximate_gradient</a></div><div class="ttdeci">void approximate_gradient(const Mapping&lt; dim, spacedim &gt; &amp;mapping, const DoFHandler&lt; dim, spacedim &gt; &amp;dof, const InputVector &amp;solution, Vector&lt; float &gt; &amp;derivative_norm, const unsigned int component=0)</div><div class="ttdef"><b>Definition</b> <a href="derivative__approximation_8cc_source.html#href_anchor">derivative_approximation.cc:1018</a></div></div>
-</div><!-- fragment --><p>and they are cell-wise scaled by the factor <picture><source srcset="form_2780_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{1+d/2}$" src="form_2780.png"/></picture></p>
+</div><!-- fragment --><p>and they are cell-wise scaled by the factor <picture><source srcset="form_2804_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{1+d/2}$" src="form_2804.png"/></picture></p>
 <div class="fragment"><div class="line">      <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cell_no = 0;</div>
 <div class="line">      <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;cell : dof_handler.active_cell_iterators())</div>
 <div class="line">        gradient_indicator(cell_no++) *=</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_14.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_14.html	2024-03-17 21:57:43.887237041 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_14.html	2024-03-17 21:57:43.883237016 +0000
@@ -163,30 +163,30 @@
 <p>The Heidelberg group of Professor Rolf Rannacher, to which the three initial authors of the deal.II library belonged during their PhD time and partly also afterwards, has been involved with adaptivity and error estimation for finite element discretizations since the mid-1990ies. The main achievement is the development of error estimates for arbitrary functionals of the solution, and of optimal mesh refinement for its computation.</p>
 <p>We will not discuss the derivation of these concepts in too great detail, but will implement the main ideas in the present example program. For a thorough introduction into the general idea, we refer to the seminal work of Becker and Rannacher <b>[BR95]</b>, <b>[BR96r]</b>, and the overview article of the same authors in Acta Numerica <b>[BR01]</b>; the first introduces the concept of error estimation and adaptivity for general functional output for the Laplace equation, while the second gives many examples of applications of these concepts to a large number of other, more complicated equations. For applications to individual types of equations, see also the publications by Becker <b>[Bec95]</b>, <b>[Bec98]</b>, Kanschat <b>[Kan96]</b>, <b>[FK97]</b>, Suttmeier <b>[Sut96]</b>, <b>[RS97]</b>, <b>[RS98c]</b>, <b>[RS99]</b>, Bangerth <b>[BR99b]</b>, <b>[Ban00w]</b>, <b>[BR01a]</b>, <b>[Ban02]</b>, and Hartmann <b>[Har02]</b>, <b>[HH01]</b>, <b>[HH01b]</b>. All of these works, from the original introduction by Becker and Rannacher to individual contributions to particular equations, have later been summarized in a book by Bangerth and Rannacher that covers all of these topics, see <b>[BR03]</b>.</p>
 <p>The basic idea is the following: in applications, one is not usually interested in the solution per se, but rather in certain aspects of it. For example, in simulations of flow problems, one may want to know the lift or drag of a body immersed in the fluid; it is this quantity that we want to know to best accuracy, and whether the rest of the solution of the describing equations is well resolved is not of primary interest. Likewise, in elasticity one might want to know about values of the stress at certain points to guess whether maximal load values of joints are safe, for example. Or, in radiative transfer problems, mean flux intensities are of interest.</p>
-<p>In all the cases just listed, it is the evaluation of a functional <picture><source srcset="form_2898_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u)$" src="form_2898.png"/></picture> of the solution which we are interested in, rather than the values of <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> everywhere. Since the exact solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> is not available, but only its numerical approximation <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture>, it is sensible to ask whether the computed value <picture><source srcset="form_2899_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u_h)$" src="form_2899.png"/></picture> is within certain limits of the exact value <picture><source srcset="form_2898_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u)$" src="form_2898.png"/></picture>, i.e. we want to bound the error with respect to this functional, <picture><source srcset="form_2900_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u)-J(u_h)$" src="form_2900.png"/></picture>.</p>
-<p>For simplicity of exposition, we henceforth assume that both the quantity of interest <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> as well as the equation are linear, and we will in particular show the derivation for the Laplace equation with homogeneous Dirichlet boundary conditions, although the concept is much more general. For this general case, we refer to the references listed above. The goal is to obtain bounds on the error, <picture><source srcset="form_2901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(e)=J(u)-J(u_h)$" src="form_2901.png"/></picture>. For this, let us denote by <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> the solution of a dual problem, defined as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_2902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>In all the cases just listed, it is the evaluation of a functional <picture><source srcset="form_2816_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u)$" src="form_2816.png"/></picture> of the solution which we are interested in, rather than the values of <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> everywhere. Since the exact solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> is not available, but only its numerical approximation <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture>, it is sensible to ask whether the computed value <picture><source srcset="form_2817_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u_h)$" src="form_2817.png"/></picture> is within certain limits of the exact value <picture><source srcset="form_2816_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u)$" src="form_2816.png"/></picture>, i.e. we want to bound the error with respect to this functional, <picture><source srcset="form_2818_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u)-J(u_h)$" src="form_2818.png"/></picture>.</p>
+<p>For simplicity of exposition, we henceforth assume that both the quantity of interest <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> as well as the equation are linear, and we will in particular show the derivation for the Laplace equation with homogeneous Dirichlet boundary conditions, although the concept is much more general. For this general case, we refer to the references listed above. The goal is to obtain bounds on the error, <picture><source srcset="form_2819_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(e)=J(u)-J(u_h)$" src="form_2819.png"/></picture>. For this, let us denote by <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> the solution of a dual problem, defined as follows:  </p><p class="formulaDsp">
+<picture><source srcset="form_2820_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   a(\varphi,z) = J(\varphi) \qquad \forall \varphi,
-\]" src="form_2902.png"/></picture>
+\]" src="form_2820.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\cdot,\cdot)$" src="form_2903.png"/></picture> is the bilinear form associated with the differential equation, and the test functions are chosen from the corresponding solution space. Then, taking as special test function <picture><source srcset="form_2904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi=e$" src="form_2904.png"/></picture> the error, we have that  </p><p class="formulaDsp">
-<picture><source srcset="form_2905_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_2821_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\cdot,\cdot)$" src="form_2821.png"/></picture> is the bilinear form associated with the differential equation, and the test functions are chosen from the corresponding solution space. Then, taking as special test function <picture><source srcset="form_2822_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi=e$" src="form_2822.png"/></picture> the error, we have that  </p><p class="formulaDsp">
+<picture><source srcset="form_2823_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   J(e) = a(e,z)
-\]" src="form_2905.png"/></picture>
+\]" src="form_2823.png"/></picture>
 </p>
 <p> and we can, by Galerkin orthogonality, rewrite this as  </p><p class="formulaDsp">
-<picture><source srcset="form_2906_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2824_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   J(e) = a(e,z-\varphi_h)
-\]" src="form_2906.png"/></picture>
+\]" src="form_2824.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_h$" src="form_2907.png"/></picture> can be chosen from the discrete test space in whatever way we find convenient.</p>
+<p> where <picture><source srcset="form_2825_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_h$" src="form_2825.png"/></picture> can be chosen from the discrete test space in whatever way we find convenient.</p>
 <p>Concretely, for Laplace's equation, the error identity reads  </p><p class="formulaDsp">
-<picture><source srcset="form_2908_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2826_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   J(e) = (\nabla e, \nabla(z-\varphi_h)).
-\]" src="form_2908.png"/></picture>
+\]" src="form_2826.png"/></picture>
 </p>
 <p> Because we want to use this formula not only to compute error, but also to refine the mesh, we need to rewrite the expression above as a sum over cells where each cell's contribution can then be used as an error indicator for this cell. Thus, we split the scalar products into terms for each cell, and integrate by parts on each of them:  </p><p class="formulaDsp">
-<picture><source srcset="form_2909_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_2827_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   J(e)
   &amp;=&amp;
   \sum_K (\nabla (u-u_h), \nabla (z-\varphi_h))_K
@@ -194,54 +194,54 @@
   &amp;=&amp;
   \sum_K (-\Delta (u-u_h), z-\varphi_h)_K
   + (\partial_n (u-u_h), z-z_h)_{\partial K}.
-\end{eqnarray*}" src="form_2909.png"/></picture>
+\end{eqnarray*}" src="form_2827.png"/></picture>
 </p>
-<p> Next we use that <picture><source srcset="form_2910_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u=f$" src="form_2910.png"/></picture>, and that the solution of the Laplace equation is smooth enough that <picture><source srcset="form_2911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_n u$" src="form_2911.png"/></picture> is continuous almost everywhere &ndash; so the terms involving <picture><source srcset="form_2911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_n u$" src="form_2911.png"/></picture> on one cell cancels with that on its neighbor, where the normal vector has the opposite sign. (The same is not true for <picture><source srcset="form_2912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_n u_h$" src="form_2912.png"/></picture>, though.) At the boundary of the domain, where there is no neighbor cell with which this term could cancel, the weight <picture><source srcset="form_2913_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z-\varphi_h$" src="form_2913.png"/></picture> can be chosen as zero, and the whole term disappears.</p>
+<p> Next we use that <picture><source srcset="form_2828_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u=f$" src="form_2828.png"/></picture>, and that the solution of the Laplace equation is smooth enough that <picture><source srcset="form_2829_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_n u$" src="form_2829.png"/></picture> is continuous almost everywhere &ndash; so the terms involving <picture><source srcset="form_2829_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_n u$" src="form_2829.png"/></picture> on one cell cancels with that on its neighbor, where the normal vector has the opposite sign. (The same is not true for <picture><source srcset="form_2830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_n u_h$" src="form_2830.png"/></picture>, though.) At the boundary of the domain, where there is no neighbor cell with which this term could cancel, the weight <picture><source srcset="form_2831_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z-\varphi_h$" src="form_2831.png"/></picture> can be chosen as zero, and the whole term disappears.</p>
 <p>Thus, we have  </p><p class="formulaDsp">
-<picture><source srcset="form_2914_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_2832_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   J(e)
   &amp;=&amp;
   \sum_K (f+\Delta u_h, z-\varphi_h)_K
   - (\partial_n u_h, z-\varphi_h)_{\partial K\backslash \partial\Omega}.
-\end{eqnarray*}" src="form_2914.png"/></picture>
+\end{eqnarray*}" src="form_2832.png"/></picture>
 </p>
-<p> In a final step, note that when taking the normal derivative of <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture>, we mean the value of this quantity as taken from this side of the cell (for the usual Lagrange elements, derivatives are not continuous across edges). We then rewrite the above formula by exchanging half of the edge integral of cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> with the neighbor cell <picture><source srcset="form_2155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K'$" src="form_2155.png"/></picture>, to obtain  </p><p class="formulaDsp">
-<picture><source srcset="form_2915_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> In a final step, note that when taking the normal derivative of <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture>, we mean the value of this quantity as taken from this side of the cell (for the usual Lagrange elements, derivatives are not continuous across edges). We then rewrite the above formula by exchanging half of the edge integral of cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> with the neighbor cell <picture><source srcset="form_2163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K'$" src="form_2163.png"/></picture>, to obtain  </p><p class="formulaDsp">
+<picture><source srcset="form_2833_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   J(e)
   &amp;=&amp;
   \sum_K (f+\Delta u_h, z-\varphi_h)_K
   - \frac 12 (\partial_n u_h|_K + \partial_{n'} u_h|_{K'},
               z-\varphi_h)_{\partial K\backslash \partial\Omega}.
-\end{eqnarray*}" src="form_2915.png"/></picture>
+\end{eqnarray*}" src="form_2833.png"/></picture>
 </p>
-<p> Using that for the normal vectors on adjacent cells we have <picture><source srcset="form_2916_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n'=-n$" src="form_2916.png"/></picture>, we define the jump of the normal derivative by  </p><p class="formulaDsp">
-<picture><source srcset="form_2917_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> Using that for the normal vectors on adjacent cells we have <picture><source srcset="form_2834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n'=-n$" src="form_2834.png"/></picture>, we define the jump of the normal derivative by  </p><p class="formulaDsp">
+<picture><source srcset="form_2835_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   [\partial_n u_h] \dealcoloneq \partial_n u_h|_K + \partial_{n'} u_h|_{K'}
   =
   \partial_n u_h|_K - \partial_n u_h|_{K'},
-\]" src="form_2917.png"/></picture>
+\]" src="form_2835.png"/></picture>
 </p>
-<p> and get the final form after setting the discrete function <picture><source srcset="form_2907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_h$" src="form_2907.png"/></picture>, which is by now still arbitrary, to the point interpolation of the dual solution, <picture><source srcset="form_2918_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_h=I_h z$" src="form_2918.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_2919_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> and get the final form after setting the discrete function <picture><source srcset="form_2825_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_h$" src="form_2825.png"/></picture>, which is by now still arbitrary, to the point interpolation of the dual solution, <picture><source srcset="form_2836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_h=I_h z$" src="form_2836.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_2837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   J(e)
   &amp;=&amp;
   \sum_K (f+\Delta u_h, z-I_h z)_K
   - \frac 12 ([\partial_n u_h],
               z-I_h z)_{\partial K\backslash \partial\Omega}.
-\end{eqnarray*}" src="form_2919.png"/></picture>
+\end{eqnarray*}" src="form_2837.png"/></picture>
 </p>
-<p>With this, we have obtained an exact representation of the error of the finite element discretization with respect to arbitrary (linear) functionals <picture><source srcset="form_2920_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(\cdot)$" src="form_2920.png"/></picture>. Its structure is a weighted form of a residual estimator, as both <picture><source srcset="form_2921_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f+\Delta u_h$" src="form_2921.png"/></picture> and <picture><source srcset="form_2922_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\partial_n u_h]$" src="form_2922.png"/></picture> are cell and edge residuals that vanish on the exact solution, and <picture><source srcset="form_2923_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z-I_h z$" src="form_2923.png"/></picture> are weights indicating how important the residual on a certain cell is for the evaluation of the given functional. Furthermore, it is a cell-wise quantity, so we can use it as a mesh refinement criterion. The question is: how to evaluate it? After all, the evaluation requires knowledge of the dual solution <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>, which carries the information about the quantity we want to know to best accuracy.</p>
-<p>In some, very special cases, this dual solution is known. For example, if the functional <picture><source srcset="form_2920_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(\cdot)$" src="form_2920.png"/></picture> is the point evaluation, <picture><source srcset="form_2924_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(\varphi)=\varphi(x_0)$" src="form_2924.png"/></picture>, then the dual solution has to satisfy  </p><p class="formulaDsp">
-<picture><source srcset="form_2925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>With this, we have obtained an exact representation of the error of the finite element discretization with respect to arbitrary (linear) functionals <picture><source srcset="form_2838_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(\cdot)$" src="form_2838.png"/></picture>. Its structure is a weighted form of a residual estimator, as both <picture><source srcset="form_2839_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f+\Delta u_h$" src="form_2839.png"/></picture> and <picture><source srcset="form_2840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\partial_n u_h]$" src="form_2840.png"/></picture> are cell and edge residuals that vanish on the exact solution, and <picture><source srcset="form_2841_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z-I_h z$" src="form_2841.png"/></picture> are weights indicating how important the residual on a certain cell is for the evaluation of the given functional. Furthermore, it is a cell-wise quantity, so we can use it as a mesh refinement criterion. The question is: how to evaluate it? After all, the evaluation requires knowledge of the dual solution <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>, which carries the information about the quantity we want to know to best accuracy.</p>
+<p>In some, very special cases, this dual solution is known. For example, if the functional <picture><source srcset="form_2838_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(\cdot)$" src="form_2838.png"/></picture> is the point evaluation, <picture><source srcset="form_2842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(\varphi)=\varphi(x_0)$" src="form_2842.png"/></picture>, then the dual solution has to satisfy  </p><p class="formulaDsp">
+<picture><source srcset="form_2843_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   -\Delta z = \delta(x-x_0),
-\]" src="form_2925.png"/></picture>
+\]" src="form_2843.png"/></picture>
 </p>
 <p> with the Dirac delta function on the right hand side, and the dual solution is the Green's function with respect to the point <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture>. For simple geometries, this function is analytically known, and we could insert it into the error representation formula.</p>
-<p>However, we do not want to restrict ourselves to such special cases. Rather, we will compute the dual solution numerically, and approximate <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> by some numerically obtained <picture><source srcset="form_2926_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde z$" src="form_2926.png"/></picture>. We note that it is not sufficient to compute this approximation <picture><source srcset="form_2926_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde z$" src="form_2926.png"/></picture> using the same method as used for the primal solution <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture>, since then <picture><source srcset="form_2927_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde z-I_h \tilde z=0$" src="form_2927.png"/></picture>, and the overall error estimate would be zero. Rather, the approximation <picture><source srcset="form_2926_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde z$" src="form_2926.png"/></picture> has to be from a larger space than the primal finite element space. There are various ways to obtain such an approximation (see the cited literature), and we will choose to compute it with a higher order finite element space. While this is certainly not the most efficient way, it is simple since we already have all we need to do that in place, and it also allows for simple experimenting. For more efficient methods, again refer to the given literature, in particular <b>[BR95]</b>, <b>[BR03]</b>.</p>
+<p>However, we do not want to restrict ourselves to such special cases. Rather, we will compute the dual solution numerically, and approximate <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> by some numerically obtained <picture><source srcset="form_2844_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde z$" src="form_2844.png"/></picture>. We note that it is not sufficient to compute this approximation <picture><source srcset="form_2844_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde z$" src="form_2844.png"/></picture> using the same method as used for the primal solution <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture>, since then <picture><source srcset="form_2845_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde z-I_h \tilde z=0$" src="form_2845.png"/></picture>, and the overall error estimate would be zero. Rather, the approximation <picture><source srcset="form_2844_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde z$" src="form_2844.png"/></picture> has to be from a larger space than the primal finite element space. There are various ways to obtain such an approximation (see the cited literature), and we will choose to compute it with a higher order finite element space. While this is certainly not the most efficient way, it is simple since we already have all we need to do that in place, and it also allows for simple experimenting. For more efficient methods, again refer to the given literature, in particular <b>[BR95]</b>, <b>[BR03]</b>.</p>
 <p>With this, we end the discussion of the mathematical side of this program and turn to the actual implementation.</p>
-<dl class="section note"><dt>Note</dt><dd>There are two steps above that do not seem necessary if all you care about is computing the error: namely, (i) the subtraction of <picture><source srcset="form_2928_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_h$" src="form_2928.png"/></picture> from <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>, and (ii) splitting the integral into a sum of cells and integrating by parts on each. Indeed, neither of these two steps change <picture><source srcset="form_2929_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(e)$" src="form_2929.png"/></picture> at all, as we only ever consider identities above until the substitution of <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> by <picture><source srcset="form_2926_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde z$" src="form_2926.png"/></picture>. In other words, if you care only about <em>estimating the global error</em> <picture><source srcset="form_2929_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(e)$" src="form_2929.png"/></picture>, then these steps are not necessary. On the other hand, if you want to use the error estimate also as a refinement criterion for each cell of the mesh, then it is necessary to (i) break the estimate into a sum of cells, and (ii) massage the formulas in such a way that each cell's contributions have something to do with the local error. (While the contortions above do not change the value of the <em>sum</em> <picture><source srcset="form_2929_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(e)$" src="form_2929.png"/></picture>, they change the values we compute for each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>.) To this end, we want to write everything in the form "residual times dual weight" where a "residual" is something that goes to zero as the approximation becomes <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> better and better. For example, the quantity <picture><source srcset="form_2930_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_n
-u_h$" src="form_2930.png"/></picture> is not a residual, since it simply converges to the (normal component of) the gradient of the exact solution. On the other hand, <picture><source srcset="form_2922_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\partial_n u_h]$" src="form_2922.png"/></picture> is a residual because it converges to <picture><source srcset="form_2931_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\partial_n
-u]=0$" src="form_2931.png"/></picture>. All of the steps we have taken above in developing the final form of <picture><source srcset="form_2929_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(e)$" src="form_2929.png"/></picture> have indeed had the goal of bringing the final formula into a form where each term converges to zero as the discrete solution <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> converges to <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture>. This then allows considering each cell's contribution as an "error indicator" that also converges to zero &ndash; as it should as the mesh is refined.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>There are two steps above that do not seem necessary if all you care about is computing the error: namely, (i) the subtraction of <picture><source srcset="form_2846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_h$" src="form_2846.png"/></picture> from <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>, and (ii) splitting the integral into a sum of cells and integrating by parts on each. Indeed, neither of these two steps change <picture><source srcset="form_2847_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(e)$" src="form_2847.png"/></picture> at all, as we only ever consider identities above until the substitution of <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> by <picture><source srcset="form_2844_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde z$" src="form_2844.png"/></picture>. In other words, if you care only about <em>estimating the global error</em> <picture><source srcset="form_2847_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(e)$" src="form_2847.png"/></picture>, then these steps are not necessary. On the other hand, if you want to use the error estimate also as a refinement criterion for each cell of the mesh, then it is necessary to (i) break the estimate into a sum of cells, and (ii) massage the formulas in such a way that each cell's contributions have something to do with the local error. (While the contortions above do not change the value of the <em>sum</em> <picture><source srcset="form_2847_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(e)$" src="form_2847.png"/></picture>, they change the values we compute for each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>.) To this end, we want to write everything in the form "residual times dual weight" where a "residual" is something that goes to zero as the approximation becomes <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> better and better. For example, the quantity <picture><source srcset="form_2848_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_n
+u_h$" src="form_2848.png"/></picture> is not a residual, since it simply converges to the (normal component of) the gradient of the exact solution. On the other hand, <picture><source srcset="form_2840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\partial_n u_h]$" src="form_2840.png"/></picture> is a residual because it converges to <picture><source srcset="form_2849_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\partial_n
+u]=0$" src="form_2849.png"/></picture>. All of the steps we have taken above in developing the final form of <picture><source srcset="form_2847_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(e)$" src="form_2847.png"/></picture> have indeed had the goal of bringing the final formula into a form where each term converges to zero as the discrete solution <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> converges to <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture>. This then allows considering each cell's contribution as an "error indicator" that also converges to zero &ndash; as it should as the mesh is refined.</dd></dl>
 <p><a class="anchor" id="Thesoftware"></a></p><h3>The software</h3>
 <p>The <a class="el" href="step_14.html">step-14</a> example program builds heavily on the techniques already used in the <a class="el" href="step_13.html">step-13</a> program. Its implementation of the dual weighted residual error estimator explained above is done by deriving a second class, properly called <code>DualSolver</code>, from the <code>Solver</code> base class, and having a class (<code>WeightedResidual</code>) that joins the two again and controls the solution of the primal and dual problem, and then uses both to compute the error indicator for mesh refinement.</p>
 <p>The program continues the modular concept of the previous example, by implementing the dual functional, describing quantity of interest, by an abstract base class, and providing two different functionals which implement this interface. Adding a different quantity of interest is thus simple.</p>
@@ -2576,15 +2576,15 @@
 </table>
 <p>Note the subtle interplay between resolving the corner singularities, and resolving around the point of evaluation. It will be rather difficult to generate such a mesh by hand, as this would involve to judge quantitatively how much which of the four corner singularities should be resolved, and to set the weight compared to the vicinity of the evaluation point.</p>
 <p>The program prints the point value and the estimated error in this quantity. From extrapolating it, we can guess that the exact value is somewhere close to 0.0334473, plus or minus 0.0000001 (note that we get almost 6 valid digits from only 22,000 (primal) degrees of freedom. This number cannot be obtained from the value of the functional alone, but I have used the assumption that the error estimator is mostly exact, and extrapolated the computed value plus the estimated error, to get an approximation of the true value. Computing with more degrees of freedom shows that this assumption is indeed valid.</p>
-<p>From the computed results, we can generate two graphs: one that shows the convergence of the error <picture><source srcset="form_2900_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u)-J(u_h)$" src="form_2900.png"/></picture> (taking the extrapolated value as correct) in the point value, and the value that we get by adding up computed value <picture><source srcset="form_2899_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u_h)$" src="form_2899.png"/></picture> and estimated error eta (if the error estimator <picture><source srcset="form_2932_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$eta$" src="form_2932.png"/></picture> were exact, then the value <picture><source srcset="form_2933_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u_h)+\eta$" src="form_2933.png"/></picture> would equal the exact point value, and the error in this quantity would always be zero; however, since the error estimator is only a - good - approximation to the true error, we can by this only reduce the size of the error). In this graph, we also indicate the complexity <picture><source srcset="form_2934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(1/N)$" src="form_2934.png"/></picture> to show that mesh refinement acts optimal in this case. The second chart compares true and estimated error, and shows that the two are actually very close to each other, even for such a complicated quantity as the point value:</p>
+<p>From the computed results, we can generate two graphs: one that shows the convergence of the error <picture><source srcset="form_2818_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u)-J(u_h)$" src="form_2818.png"/></picture> (taking the extrapolated value as correct) in the point value, and the value that we get by adding up computed value <picture><source srcset="form_2817_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u_h)$" src="form_2817.png"/></picture> and estimated error eta (if the error estimator <picture><source srcset="form_2850_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$eta$" src="form_2850.png"/></picture> were exact, then the value <picture><source srcset="form_2851_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u_h)+\eta$" src="form_2851.png"/></picture> would equal the exact point value, and the error in this quantity would always be zero; however, since the error estimator is only a - good - approximation to the true error, we can by this only reduce the size of the error). In this graph, we also indicate the complexity <picture><source srcset="form_2852_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(1/N)$" src="form_2852.png"/></picture> to show that mesh refinement acts optimal in this case. The second chart compares true and estimated error, and shows that the two are actually very close to each other, even for such a complicated quantity as the point value:</p>
 <table width="80%" align="center">
 <tr>
 <td><img src="https://www.dealii.org/images/steps/developer/step-14.point-value.error.png" alt="" width="100%" class="inline"/> </td><td><img src="https://www.dealii.org/images/steps/developer/step-14.point-value.error-estimation.png" alt="" width="100%" class="inline"/>  </td></tr>
 </table>
 <p><a class="anchor" id="Comparingrefinementcriteria"></a></p><h3>Comparing refinement criteria</h3>
-<p>Since we have accepted quite some effort when using the mesh refinement driven by the dual weighted error estimator (for solving the dual problem, and for evaluating the error representation), it is worth while asking whether that effort was successful. To this end, we first compare the achieved error levels for different mesh refinement criteria. To generate this data, simply change the value of the mesh refinement criterion variable in the main program. The results are thus (for the weight in the Kelly indicator, we have chosen the function <picture><source srcset="form_2935_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/(r^2+0.1^2)$" src="form_2935.png"/></picture>, where <picture><source srcset="form_414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_414.png"/></picture> is the distance to the evaluation point; it can be shown that this is the optimal weight if we neglect the effects of boundaries):</p>
+<p>Since we have accepted quite some effort when using the mesh refinement driven by the dual weighted error estimator (for solving the dual problem, and for evaluating the error representation), it is worth while asking whether that effort was successful. To this end, we first compare the achieved error levels for different mesh refinement criteria. To generate this data, simply change the value of the mesh refinement criterion variable in the main program. The results are thus (for the weight in the Kelly indicator, we have chosen the function <picture><source srcset="form_2853_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/(r^2+0.1^2)$" src="form_2853.png"/></picture>, where <picture><source srcset="form_378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_378.png"/></picture> is the distance to the evaluation point; it can be shown that this is the optimal weight if we neglect the effects of boundaries):</p>
 <p><img src="https://www.dealii.org/images/steps/developer/step-14.point-value.error-comparison.png" alt="" class="inline"/></p>
-<p>Checking these numbers, we see that for global refinement, the error is proportional to <picture><source srcset="form_2936_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(1/(sqrt(N) log(N)))$" src="form_2936.png"/></picture>, and for the dual estimator <picture><source srcset="form_2937_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(1/N)$" src="form_2937.png"/></picture>. Generally speaking, we see that the dual weighted error estimator is better than the other refinement indicators, at least when compared with those that have a similarly regular behavior. The Kelly indicator produces smaller errors, but jumps about the picture rather irregularly, with the error also changing signs sometimes. Therefore, its behavior does not allow to extrapolate the results to larger values of N. Furthermore, if we trust the error estimates of the dual weighted error estimator, the results can be improved by adding the estimated error to the computed values. In terms of reliability, the weighted estimator is thus better than the Kelly indicator, although the latter sometimes produces smaller errors.</p>
+<p>Checking these numbers, we see that for global refinement, the error is proportional to <picture><source srcset="form_2854_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(1/(sqrt(N) log(N)))$" src="form_2854.png"/></picture>, and for the dual estimator <picture><source srcset="form_2855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(1/N)$" src="form_2855.png"/></picture>. Generally speaking, we see that the dual weighted error estimator is better than the other refinement indicators, at least when compared with those that have a similarly regular behavior. The Kelly indicator produces smaller errors, but jumps about the picture rather irregularly, with the error also changing signs sometimes. Therefore, its behavior does not allow to extrapolate the results to larger values of N. Furthermore, if we trust the error estimates of the dual weighted error estimator, the results can be improved by adding the estimated error to the computed values. In terms of reliability, the weighted estimator is thus better than the Kelly indicator, although the latter sometimes produces smaller errors.</p>
 <p><a class="anchor" id="Evaluationofpointstresses"></a></p><h3>Evaluation of point stresses</h3>
 <p>Besides evaluating the values of the solution at a certain point, the program also offers the possibility to evaluate the x-derivatives at a certain point, and also to tailor mesh refinement for this. To let the program compute these quantities, simply replace the two occurrences of <code>PointValueEvaluation</code> in the main function by <code>PointXDerivativeEvaluation</code>, and let the program run: </p><div class="fragment"><div class="line">Refinement cycle: 0</div>
 <div class="line">   Number of degrees of freedom=72</div>
@@ -2636,16 +2636,16 @@
 <tr>
 <td><img src="https://www.dealii.org/images/steps/developer/step-14.point-derivative.grid-7.9.2.png" alt="" width="100%" class="inline"/> </td><td><img src="https://www.dealii.org/images/steps/developer/step-14.point-derivative.grid-8.9.2.png" alt="" width="100%" class="inline"/> </td><td><img src="https://www.dealii.org/images/steps/developer/step-14.point-derivative.grid-9.9.2.png" alt="" width="100%" class="inline"/>  </td></tr>
 </table>
-<p>Note the asymmetry of the grids compared with those we obtained for the point evaluation. This is due to the fact that the domain and the primal solution may be symmetric about the diagonal, but the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>-derivative is not, and the latter enters the refinement criterion.</p>
-<p>Then, it is interesting to compare actually computed values of the quantity of interest (i.e. the x-derivative of the solution at one point) with a reference value of -0.0528223... plus or minus 0.0000005. We get this reference value by computing on finer grid after some more mesh refinements, with approximately 130,000 cells. Recall that if the error is <picture><source srcset="form_2937_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(1/N)$" src="form_2937.png"/></picture> in the optimal case, then taking a mesh with ten times more cells gives us one additional digit in the result.</p>
+<p>Note the asymmetry of the grids compared with those we obtained for the point evaluation. This is due to the fact that the domain and the primal solution may be symmetric about the diagonal, but the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>-derivative is not, and the latter enters the refinement criterion.</p>
+<p>Then, it is interesting to compare actually computed values of the quantity of interest (i.e. the x-derivative of the solution at one point) with a reference value of -0.0528223... plus or minus 0.0000005. We get this reference value by computing on finer grid after some more mesh refinements, with approximately 130,000 cells. Recall that if the error is <picture><source srcset="form_2855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(1/N)$" src="form_2855.png"/></picture> in the optimal case, then taking a mesh with ten times more cells gives us one additional digit in the result.</p>
 <p>In the left part of the following chart, you again see the convergence of the error towards this extrapolated value, while on the right you see a comparison of true and estimated error:</p>
 <table width="80%" align="center">
 <tr>
 <td><img src="https://www.dealii.org/images/steps/developer/step-14.point-derivative.error.png" alt="" width="100%" class="inline"/> </td><td><img src="https://www.dealii.org/images/steps/developer/step-14.point-derivative.error-estimation.png" alt="" width="100%" class="inline"/>  </td></tr>
 </table>
-<p>After an initial phase where the true error changes its sign, the estimated error matches it quite well, again. Also note the dramatic improvement in the error when using the estimated error to correct the computed value of <picture><source srcset="form_2899_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u_h)$" src="form_2899.png"/></picture>.</p>
+<p>After an initial phase where the true error changes its sign, the estimated error matches it quite well, again. Also note the dramatic improvement in the error when using the estimated error to correct the computed value of <picture><source srcset="form_2817_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(u_h)$" src="form_2817.png"/></picture>.</p>
 <p><a class="anchor" id="step13revisited"></a></p><h3>step-13 revisited</h3>
-<p>If instead of the <code>Exercise_2_3</code> data set, we choose <code>CurvedRidges</code> in the main function, and choose <picture><source srcset="form_2938_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0.5,0.5)$" src="form_2938.png"/></picture> as the evaluation point, then we can redo the computations of the previous example program, to compare whether the results obtained with the help of the dual weighted error estimator are better than those we had previously.</p>
+<p>If instead of the <code>Exercise_2_3</code> data set, we choose <code>CurvedRidges</code> in the main function, and choose <picture><source srcset="form_2856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0.5,0.5)$" src="form_2856.png"/></picture> as the evaluation point, then we can redo the computations of the previous example program, to compare whether the results obtained with the help of the dual weighted error estimator are better than those we had previously.</p>
 <p>First, the meshes after 9 adaptive refinement cycles obtained with the point evaluation and derivative evaluation refinement criteria, respectively, look like this:</p>
 <table width="80%" align="center">
 <tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_15.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_15.html	2024-03-17 21:57:43.951237436 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_15.html	2024-03-17 21:57:43.951237436 +0000
@@ -144,41 +144,41 @@
 </p>
 <p><a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p><a class="anchor" id="Foreword"></a></p><h3>Foreword</h3>
-<p>This program deals with an example of a non-linear elliptic partial differential equation, the <a href="https://en.wikipedia.org/wiki/Minimal_surface">minimal surface equation</a>. You can imagine the solution of this equation to describe the surface spanned by a soap film that is enclosed by a closed wire loop. We imagine the wire to not just be a planar loop, but in fact curved. The surface tension of the soap film will then reduce the surface to have minimal surface. The solution of the minimal surface equation describes this shape with the wire's vertical displacement as a boundary condition. For simplicity, we will here assume that the surface can be written as a graph <picture><source srcset="form_2816_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=u(x,y)$" src="form_2816.png"/></picture> although it is clear that it is not very hard to construct cases where the wire is bent in such a way that the surface can only locally be constructed as a graph but not globally.</p>
+<p>This program deals with an example of a non-linear elliptic partial differential equation, the <a href="https://en.wikipedia.org/wiki/Minimal_surface">minimal surface equation</a>. You can imagine the solution of this equation to describe the surface spanned by a soap film that is enclosed by a closed wire loop. We imagine the wire to not just be a planar loop, but in fact curved. The surface tension of the soap film will then reduce the surface to have minimal surface. The solution of the minimal surface equation describes this shape with the wire's vertical displacement as a boundary condition. For simplicity, we will here assume that the surface can be written as a graph <picture><source srcset="form_2857_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=u(x,y)$" src="form_2857.png"/></picture> although it is clear that it is not very hard to construct cases where the wire is bent in such a way that the surface can only locally be constructed as a graph but not globally.</p>
 <p>Because the equation is non-linear, we can't solve it directly. Rather, we have to use Newton's method to compute the solution iteratively.</p>
 <dl class="section note"><dt>Note</dt><dd>The material presented here is also discussed in <a href="http://www.math.colostate.edu/~bangerth/videos.676.31.5.html">video lecture 31.5</a>, <a href="http://www.math.colostate.edu/~bangerth/videos.676.31.55.html">video lecture 31.55</a>, <a href="http://www.math.colostate.edu/~bangerth/videos.676.31.6.html">video lecture 31.6</a>. (All video lectures are also available <a href="http://www.math.colostate.edu/~bangerth/videos.html">here</a>.) (See also <a href="http://www.math.colostate.edu/~bangerth/videos.676.31.65.html">video lecture 31.65</a>, <a href="http://www.math.colostate.edu/~bangerth/videos.676.31.7.html">video lecture 31.7</a>.)</dd></dl>
 <p><a class="anchor" id="Classicalformulation"></a></p><h3>Classical formulation</h3>
 <p>In a classical sense, the problem is given in the following form:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2817_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_2858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     -\nabla \cdot \left( \frac{1}{\sqrt{1+|\nabla u|^{2}}}\nabla u \right) &amp;= 0 \qquad
     \qquad &amp;&amp;\textrm{in} ~ \Omega
     \\
     u&amp;=g \qquad\qquad &amp;&amp;\textrm{on} ~ \partial \Omega.
-  \end{align*}" src="form_2817.png"/></picture>
+  \end{align*}" src="form_2858.png"/></picture>
 </p>
-<p><picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> is the domain we get by projecting the wire's positions into <picture><source srcset="form_2818_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x-y$" src="form_2818.png"/></picture> space. In this example, we choose <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> as the unit disk.</p>
-<p>As described above, we solve this equation using Newton's method in which we compute the <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>th approximate solution from the <picture><source srcset="form_2819_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(n-1)$" src="form_2819.png"/></picture>th one, and use a damping parameter <picture><source srcset="form_2820_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^n$" src="form_2820.png"/></picture> to get better global convergence behavior:  </p><p class="formulaDsp">
-<picture><source srcset="form_2821_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p><picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> is the domain we get by projecting the wire's positions into <picture><source srcset="form_2859_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x-y$" src="form_2859.png"/></picture> space. In this example, we choose <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> as the unit disk.</p>
+<p>As described above, we solve this equation using Newton's method in which we compute the <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>th approximate solution from the <picture><source srcset="form_2860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(n-1)$" src="form_2860.png"/></picture>th one, and use a damping parameter <picture><source srcset="form_2861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^n$" src="form_2861.png"/></picture> to get better global convergence behavior:  </p><p class="formulaDsp">
+<picture><source srcset="form_2862_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     F'(u^{n},\delta u^{n})&amp;=- F(u^{n})
     \\
     u^{n+1}&amp;=u^{n}+\alpha^n \delta u^{n}
-  \end{align*}" src="form_2821.png"/></picture>
+  \end{align*}" src="form_2862.png"/></picture>
 </p>
 <p> with  </p><p class="formulaDsp">
-<picture><source srcset="form_2822_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     F(u) \dealcoloneq -\nabla \cdot \left( \frac{1}{\sqrt{1+|\nabla u|^{2}}}\nabla u \right)
-  \]" src="form_2822.png"/></picture>
+  \]" src="form_2863.png"/></picture>
 </p>
-<p> and <picture><source srcset="form_2823_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(u,\delta u)$" src="form_2823.png"/></picture> the derivative of F in direction of <picture><source srcset="form_2824_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u$" src="form_2824.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_2825_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> and <picture><source srcset="form_2864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(u,\delta u)$" src="form_2864.png"/></picture> the derivative of F in direction of <picture><source srcset="form_2865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u$" src="form_2865.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_2866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   F'(u,\delta u)=\lim \limits_{\epsilon \rightarrow 0}{\frac{F(u+\epsilon \delta u)-
   F(u)}{\epsilon}}.
-\]" src="form_2825.png"/></picture>
+\]" src="form_2866.png"/></picture>
 </p>
-<p>Going through the motions to find out what <picture><source srcset="form_2823_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(u,\delta u)$" src="form_2823.png"/></picture> is, we find that we have to solve a linear elliptic PDE in every Newton step, with <picture><source srcset="form_2826_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^n$" src="form_2826.png"/></picture> as the solution of:</p>
+<p>Going through the motions to find out what <picture><source srcset="form_2864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(u,\delta u)$" src="form_2864.png"/></picture> is, we find that we have to solve a linear elliptic PDE in every Newton step, with <picture><source srcset="form_2867_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^n$" src="form_2867.png"/></picture> as the solution of:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2827_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2868_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   - \nabla \cdot \left( \frac{1}{\left(1+|\nabla u^{n}|^{2}\right)^{\frac{1}{2}}}\nabla
   \delta u^{n} \right) +
   \nabla \cdot \left( \frac{\nabla u^{n} \cdot
@@ -186,62 +186,62 @@
   \right)  =
   -\left( - \nabla \cdot \left( \frac{1}{\left(1+|\nabla u^{n}|^{2}\right)^{\frac{1}{2}}}
   \nabla u^{n} \right) \right)
-  \]" src="form_2827.png"/></picture>
+  \]" src="form_2868.png"/></picture>
 </p>
-<p>In order to solve the minimal surface equation, we have to solve this equation repeatedly, once per Newton step. To solve this, we have to take a look at the boundary condition of this problem. Assuming that <picture><source srcset="form_2828_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{n}$" src="form_2828.png"/></picture> already has the right boundary values, the Newton update <picture><source srcset="form_2829_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^{n}$" src="form_2829.png"/></picture> should have zero boundary conditions, in order to have the right boundary condition after adding both. In the first Newton step, we are starting with the solution <picture><source srcset="form_2830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{0}\equiv 0$" src="form_2830.png"/></picture>, the Newton update still has to deliver the right boundary condition to the solution <picture><source srcset="form_2831_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{1}$" src="form_2831.png"/></picture>.</p>
-<p>Summing up, we have to solve the PDE above with the boundary condition <picture><source srcset="form_2832_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta
-u^{0}=g$" src="form_2832.png"/></picture> in the first step and with <picture><source srcset="form_2833_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^{n}=0$" src="form_2833.png"/></picture> in all the following steps.</p>
-<dl class="section note"><dt>Note</dt><dd>In some sense, one may argue that if the program already implements <picture><source srcset="form_2215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u)$" src="form_2215.png"/></picture>, it is duplicative to also have to implement <picture><source srcset="form_2834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(u,\delta)$" src="form_2834.png"/></picture>. As always, duplication tempts bugs and we would like to avoid it. While we do not explore this issue in this program, we will come back to it at the end of the <a href="#href_anchor">Possibilities for extensions</a> section below, and specifically in <a class="el" href="step_72.html">step-72</a>.</dd></dl>
+<p>In order to solve the minimal surface equation, we have to solve this equation repeatedly, once per Newton step. To solve this, we have to take a look at the boundary condition of this problem. Assuming that <picture><source srcset="form_2869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{n}$" src="form_2869.png"/></picture> already has the right boundary values, the Newton update <picture><source srcset="form_2870_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^{n}$" src="form_2870.png"/></picture> should have zero boundary conditions, in order to have the right boundary condition after adding both. In the first Newton step, we are starting with the solution <picture><source srcset="form_2871_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{0}\equiv 0$" src="form_2871.png"/></picture>, the Newton update still has to deliver the right boundary condition to the solution <picture><source srcset="form_2872_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{1}$" src="form_2872.png"/></picture>.</p>
+<p>Summing up, we have to solve the PDE above with the boundary condition <picture><source srcset="form_2873_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta
+u^{0}=g$" src="form_2873.png"/></picture> in the first step and with <picture><source srcset="form_2874_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^{n}=0$" src="form_2874.png"/></picture> in all the following steps.</p>
+<dl class="section note"><dt>Note</dt><dd>In some sense, one may argue that if the program already implements <picture><source srcset="form_2215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u)$" src="form_2215.png"/></picture>, it is duplicative to also have to implement <picture><source srcset="form_2875_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(u,\delta)$" src="form_2875.png"/></picture>. As always, duplication tempts bugs and we would like to avoid it. While we do not explore this issue in this program, we will come back to it at the end of the <a href="#href_anchor">Possibilities for extensions</a> section below, and specifically in <a class="el" href="step_72.html">step-72</a>.</dd></dl>
 <p><a class="anchor" id="Weakformulationoftheproblem"></a></p><h3>Weak formulation of the problem</h3>
-<p>Starting with the strong formulation above, we get the weak formulation by multiplying both sides of the PDE with a test function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> and integrating by parts on both sides:  </p><p class="formulaDsp">
-<picture><source srcset="form_2835_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Starting with the strong formulation above, we get the weak formulation by multiplying both sides of the PDE with a test function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> and integrating by parts on both sides:  </p><p class="formulaDsp">
+<picture><source srcset="form_2876_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \left( \nabla \varphi , \frac{1}{\left(1+|\nabla u^{n}|^{2}\right)^{\frac{1}{2}}}\nabla
   \delta u^{n} \right)-\left(\nabla \varphi ,\frac{\nabla u^{n} \cdot \nabla
   \delta u^{n}}{\left(1+|\nabla u^{n}|^{2}\right)^{\frac{3}{2}}}\nabla u^{n}  \right)
   = -\left(\nabla \varphi , \frac{1}{\left(1+|\nabla u^{n}|^{2}\right)^{\frac{1}{2}}} \nabla u^{n}
    \right).
-  \]" src="form_2835.png"/></picture>
+  \]" src="form_2876.png"/></picture>
 </p>
-<p> Here the solution <picture><source srcset="form_2829_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^{n}$" src="form_2829.png"/></picture> is a function in <picture><source srcset="form_2836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{1}(\Omega)$" src="form_2836.png"/></picture>, subject to the boundary conditions discussed above. Reducing this space to a finite dimensional space with basis <picture><source srcset="form_2837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left\{
-\varphi_{0},\dots , \varphi_{N-1}\right\}$" src="form_2837.png"/></picture>, we can write the solution:</p>
+<p> Here the solution <picture><source srcset="form_2870_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^{n}$" src="form_2870.png"/></picture> is a function in <picture><source srcset="form_2877_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{1}(\Omega)$" src="form_2877.png"/></picture>, subject to the boundary conditions discussed above. Reducing this space to a finite dimensional space with basis <picture><source srcset="form_2878_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left\{
+\varphi_{0},\dots , \varphi_{N-1}\right\}$" src="form_2878.png"/></picture>, we can write the solution:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2838_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2879_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \delta u^{n}=\sum_{j=0}^{N-1} \delta U_{j} \varphi_{j}.
-\]" src="form_2838.png"/></picture>
+\]" src="form_2879.png"/></picture>
 </p>
-<p>Using the basis functions as test functions and defining <picture><source srcset="form_2839_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{n} \dealcoloneq \frac{1}
-{\sqrt{1+|\nabla u^{n}|^{2}}}$" src="form_2839.png"/></picture>, we can rewrite the weak formulation:</p>
+<p>Using the basis functions as test functions and defining <picture><source srcset="form_2880_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{n} \dealcoloneq \frac{1}
+{\sqrt{1+|\nabla u^{n}|^{2}}}$" src="form_2880.png"/></picture>, we can rewrite the weak formulation:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \sum_{j=0}^{N-1}\left[ \left( \nabla \varphi_{i} , a_{n} \nabla \varphi_{j} \right) -
   \left(\nabla u^{n}\cdot \nabla \varphi_{i} , a_{n}^{3} \nabla u^{n} \cdot \nabla
   \varphi_{j} \right) \right] \cdot \delta U_{j}=-\left( \nabla \varphi_{i} , a_{n}
   \nabla u^{n}\right) \qquad \forall i=0,\dots ,N-1,
-\]" src="form_2840.png"/></picture>
+\]" src="form_2881.png"/></picture>
 </p>
-<p>where the solution <picture><source srcset="form_2829_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^{n}$" src="form_2829.png"/></picture> is given by the coefficients <picture><source srcset="form_2841_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta U^{n}_{j}$" src="form_2841.png"/></picture>. This linear system of equations can be rewritten as:</p>
+<p>where the solution <picture><source srcset="form_2870_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^{n}$" src="form_2870.png"/></picture> is given by the coefficients <picture><source srcset="form_2882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta U^{n}_{j}$" src="form_2882.png"/></picture>. This linear system of equations can be rewritten as:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2883_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   A^{n}\; \delta U^{n}=b^{n},
-\]" src="form_2842.png"/></picture>
+\]" src="form_2883.png"/></picture>
 </p>
-<p>where the entries of the matrix <picture><source srcset="form_2843_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^{n}$" src="form_2843.png"/></picture> are given by:</p>
+<p>where the entries of the matrix <picture><source srcset="form_2884_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^{n}$" src="form_2884.png"/></picture> are given by:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2844_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2885_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   A^{n}_{ij} \dealcoloneq \left( \nabla \varphi_{i} , a_{n} \nabla \varphi_{j} \right) -
   \left(\nabla u^{n}\cdot \nabla \varphi_{i} , a_{n}^{3} \nabla u^{n} \cdot \nabla
   \varphi_{j} \right),
-\]" src="form_2844.png"/></picture>
+\]" src="form_2885.png"/></picture>
 </p>
-<p>and the right hand side <picture><source srcset="form_2845_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b^{n}$" src="form_2845.png"/></picture> is given by:</p>
+<p>and the right hand side <picture><source srcset="form_2886_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b^{n}$" src="form_2886.png"/></picture> is given by:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_2846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2887_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   b^{n}_{i} \dealcoloneq -\left( \nabla \varphi_{i} , a_{n} \nabla u^{n}\right).
-\]" src="form_2846.png"/></picture>
+\]" src="form_2887.png"/></picture>
 </p>
 <p><a class="anchor" id="Questionsabouttheappropriatesolver"></a></p><h3>Questions about the appropriate solver </h3>
 <p>The matrix that corresponds to the Newton step above can be reformulated to show its structure a bit better. Rewriting it slightly, we get that it has the form  </p><p class="formulaDsp">
-<picture><source srcset="form_2847_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2888_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   A_{ij}
   =
   \left(
@@ -249,10 +249,10 @@
     B
     \nabla \varphi_j
   \right),
-\]" src="form_2847.png"/></picture>
+\]" src="form_2888.png"/></picture>
 </p>
-<p> where the matrix <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> (of size <picture><source srcset="form_2848_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d \times d$" src="form_2848.png"/></picture> in <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> space dimensions) is given by the following expression:  </p><p class="formulaDsp">
-<picture><source srcset="form_2849_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where the matrix <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> (of size <picture><source srcset="form_2889_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d \times d$" src="form_2889.png"/></picture> in <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> space dimensions) is given by the following expression:  </p><p class="formulaDsp">
+<picture><source srcset="form_2890_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   B
   =
   a_n \left\{
@@ -267,44 +267,44 @@
   \frac{\nabla u_n}{\sqrt{1+|\nabla u^{n}|^{2}}} \otimes
   \frac{\nabla u_n}{\sqrt{1+|\nabla u^{n}|^{2}}}
   \right\}.
-\]" src="form_2849.png"/></picture>
+\]" src="form_2890.png"/></picture>
 </p>
-<p> From this expression, it is obvious that <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is symmetric, and so <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is symmetric as well. On the other hand, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is also positive definite, which confers the same property onto <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture>. This can be seen by noting that the vector <picture><source srcset="form_2850_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_1 =
-\frac{\nabla u^n}{|\nabla u^n|}$" src="form_2850.png"/></picture> is an eigenvector of <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> with eigenvalue <picture><source srcset="form_2851_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_1=a_n \left(1-\frac{|\nabla u^n|^2}{1+|\nabla u^n|^2}\right) &gt; 0$" src="form_2851.png"/></picture> while all vectors <picture><source srcset="form_2852_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_2\ldots v_d$" src="form_2852.png"/></picture> that are perpendicular to <picture><source srcset="form_1473_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_1$" src="form_1473.png"/></picture> and each other are eigenvectors with eigenvalue <picture><source srcset="form_2853_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_n$" src="form_2853.png"/></picture>. Since all eigenvalues are positive, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is positive definite and so is <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture>. We can thus use the CG method for solving the Newton steps. (The fact that the matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is symmetric and positive definite should not come as a surprise. It results from taking the derivative of an operator that results from taking the derivative of an energy functional: the minimal surface equation simply minimizes some non-quadratic energy. Consequently, the Newton matrix, as the matrix of second derivatives of a scalar energy, must be symmetric since the derivative with regard to the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>th degree of freedom should clearly commute. Likewise, if the energy functional is convex, then the matrix of second derivatives must be positive definite, and the direct calculation above simply reaffirms this.)</p>
-<p>It is worth noting, however, that the positive definiteness degenerates for problems where <picture><source srcset="form_2177_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u$" src="form_2177.png"/></picture> becomes large. In other words, if we simply multiply all boundary values by 2, then to first order <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> and <picture><source srcset="form_2177_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u$" src="form_2177.png"/></picture> will also be multiplied by two, but as a consequence the smallest eigenvalue of <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> will become smaller and the matrix will become more ill-conditioned. (More specifically, for <picture><source srcset="form_2854_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\nabla u^n|\rightarrow\infty$" src="form_2854.png"/></picture> we have that <picture><source srcset="form_2855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_1 \propto a_n \frac{1}{|\nabla u^n|^2}$" src="form_2855.png"/></picture> whereas <picture><source srcset="form_2856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_2\ldots \lambda_d=a_n$" src="form_2856.png"/></picture>; thus, the condition number of <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>, which is a multiplicative factor in the condition number of <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> grows like <picture><source srcset="form_2857_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(|\nabla u^n|^2)$" src="form_2857.png"/></picture>.) It is simple to verify with the current program that indeed multiplying the boundary values used in the current program by larger and larger values results in a problem that will ultimately no longer be solvable using the simple preconditioned CG method we use here.</p>
+<p> From this expression, it is obvious that <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is symmetric, and so <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is symmetric as well. On the other hand, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is also positive definite, which confers the same property onto <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture>. This can be seen by noting that the vector <picture><source srcset="form_2891_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_1 =
+\frac{\nabla u^n}{|\nabla u^n|}$" src="form_2891.png"/></picture> is an eigenvector of <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> with eigenvalue <picture><source srcset="form_2892_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_1=a_n \left(1-\frac{|\nabla u^n|^2}{1+|\nabla u^n|^2}\right) &gt; 0$" src="form_2892.png"/></picture> while all vectors <picture><source srcset="form_2893_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_2\ldots v_d$" src="form_2893.png"/></picture> that are perpendicular to <picture><source srcset="form_1399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_1$" src="form_1399.png"/></picture> and each other are eigenvectors with eigenvalue <picture><source srcset="form_2894_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_n$" src="form_2894.png"/></picture>. Since all eigenvalues are positive, <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is positive definite and so is <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture>. We can thus use the CG method for solving the Newton steps. (The fact that the matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is symmetric and positive definite should not come as a surprise. It results from taking the derivative of an operator that results from taking the derivative of an energy functional: the minimal surface equation simply minimizes some non-quadratic energy. Consequently, the Newton matrix, as the matrix of second derivatives of a scalar energy, must be symmetric since the derivative with regard to the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>th degree of freedom should clearly commute. Likewise, if the energy functional is convex, then the matrix of second derivatives must be positive definite, and the direct calculation above simply reaffirms this.)</p>
+<p>It is worth noting, however, that the positive definiteness degenerates for problems where <picture><source srcset="form_2157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u$" src="form_2157.png"/></picture> becomes large. In other words, if we simply multiply all boundary values by 2, then to first order <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> and <picture><source srcset="form_2157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u$" src="form_2157.png"/></picture> will also be multiplied by two, but as a consequence the smallest eigenvalue of <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> will become smaller and the matrix will become more ill-conditioned. (More specifically, for <picture><source srcset="form_2895_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\nabla u^n|\rightarrow\infty$" src="form_2895.png"/></picture> we have that <picture><source srcset="form_2896_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_1 \propto a_n \frac{1}{|\nabla u^n|^2}$" src="form_2896.png"/></picture> whereas <picture><source srcset="form_2897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_2\ldots \lambda_d=a_n$" src="form_2897.png"/></picture>; thus, the condition number of <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>, which is a multiplicative factor in the condition number of <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> grows like <picture><source srcset="form_2898_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(|\nabla u^n|^2)$" src="form_2898.png"/></picture>.) It is simple to verify with the current program that indeed multiplying the boundary values used in the current program by larger and larger values results in a problem that will ultimately no longer be solvable using the simple preconditioned CG method we use here.</p>
 <p><a class="anchor" id="Choiceofsteplengthandglobalization"></a></p><h3>Choice of step length and globalization </h3>
-<p>As stated above, Newton's method works by computing a direction <picture><source srcset="form_2826_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^n$" src="form_2826.png"/></picture> and then performing the update <picture><source srcset="form_2858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{n+1} = u^{n}+\alpha^n
-\delta u^{n}$" src="form_2858.png"/></picture> with a step length <picture><source srcset="form_2859_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0 &lt; \alpha^n \le 1$" src="form_2859.png"/></picture>. It is a common observation that for strongly nonlinear models, Newton's method does not converge if we always choose <picture><source srcset="form_2860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^n=1$" src="form_2860.png"/></picture> unless one starts with an initial guess <picture><source srcset="form_2861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^0$" src="form_2861.png"/></picture> that is sufficiently close to the solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> of the nonlinear problem. In practice, we don't always have such an initial guess, and consequently taking full Newton steps (i.e., using <picture><source srcset="form_2862_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha=1$" src="form_2862.png"/></picture>) does frequently not work.</p>
-<p>A common strategy therefore is to use a smaller step length for the first few steps while the iterate <picture><source srcset="form_2863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n$" src="form_2863.png"/></picture> is still far away from the solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> and as we get closer use larger values for <picture><source srcset="form_2820_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^n$" src="form_2820.png"/></picture> until we can finally start to use full steps <picture><source srcset="form_2860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^n=1$" src="form_2860.png"/></picture> as we are close enough to the solution. The question is of course how to choose <picture><source srcset="form_2820_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^n$" src="form_2820.png"/></picture>. There are basically two widely used approaches: line search and trust region methods.</p>
+<p>As stated above, Newton's method works by computing a direction <picture><source srcset="form_2867_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^n$" src="form_2867.png"/></picture> and then performing the update <picture><source srcset="form_2899_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{n+1} = u^{n}+\alpha^n
+\delta u^{n}$" src="form_2899.png"/></picture> with a step length <picture><source srcset="form_2900_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0 &lt; \alpha^n \le 1$" src="form_2900.png"/></picture>. It is a common observation that for strongly nonlinear models, Newton's method does not converge if we always choose <picture><source srcset="form_2901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^n=1$" src="form_2901.png"/></picture> unless one starts with an initial guess <picture><source srcset="form_2902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^0$" src="form_2902.png"/></picture> that is sufficiently close to the solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> of the nonlinear problem. In practice, we don't always have such an initial guess, and consequently taking full Newton steps (i.e., using <picture><source srcset="form_2903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha=1$" src="form_2903.png"/></picture>) does frequently not work.</p>
+<p>A common strategy therefore is to use a smaller step length for the first few steps while the iterate <picture><source srcset="form_2904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n$" src="form_2904.png"/></picture> is still far away from the solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> and as we get closer use larger values for <picture><source srcset="form_2861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^n$" src="form_2861.png"/></picture> until we can finally start to use full steps <picture><source srcset="form_2901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^n=1$" src="form_2901.png"/></picture> as we are close enough to the solution. The question is of course how to choose <picture><source srcset="form_2861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^n$" src="form_2861.png"/></picture>. There are basically two widely used approaches: line search and trust region methods.</p>
 <p>In this program, we simply always choose the step length equal to 0.1. This makes sure that for the testcase at hand we do get convergence although it is clear that by not eventually reverting to full step lengths we forego the rapid, quadratic convergence that makes Newton's method so appealing. Obviously, this is a point one eventually has to address if the program was made into one that is meant to solve more realistic problems. We will comment on this issue some more in the <a href="#href_anchor">results section</a>, and use an even better approach in <a class="el" href="step_77.html">step-77</a>.</p>
 <p><a class="anchor" id="Summaryofthealgorithmandtestcase"></a></p><h3>Summary of the algorithm and testcase </h3>
 <p>Overall, the program we have here is not unlike <a class="el" href="step_6.html">step-6</a> in many regards. The layout of the main class is essentially the same. On the other hand, the driving algorithm in the <code>run()</code> function is different and works as follows: </p><ol>
 <li>
-<p class="startli">Start with the function <picture><source srcset="form_2830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{0}\equiv 0$" src="form_2830.png"/></picture> and modify it in such a way that the values of <picture><source srcset="form_2861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^0$" src="form_2861.png"/></picture> along the boundary equal the correct boundary values <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> (this happens in <code>MinimalSurfaceProblem::set_boundary_values</code>). Set <picture><source srcset="form_2864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=0$" src="form_2864.png"/></picture>. </p>
+<p class="startli">Start with the function <picture><source srcset="form_2871_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{0}\equiv 0$" src="form_2871.png"/></picture> and modify it in such a way that the values of <picture><source srcset="form_2902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^0$" src="form_2902.png"/></picture> along the boundary equal the correct boundary values <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> (this happens in <code>MinimalSurfaceProblem::set_boundary_values</code>). Set <picture><source srcset="form_2905_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=0$" src="form_2905.png"/></picture>. </p>
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">Compute the Newton update by solving the system <picture><source srcset="form_2865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^{n}\;\delta
-  U^{n}=b^{n}$" src="form_2865.png"/></picture> with boundary condition <picture><source srcset="form_2833_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^{n}=0$" src="form_2833.png"/></picture> on <picture><source srcset="form_2866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega$" src="form_2866.png"/></picture>. </p>
+<p class="startli">Compute the Newton update by solving the system <picture><source srcset="form_2906_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^{n}\;\delta
+  U^{n}=b^{n}$" src="form_2906.png"/></picture> with boundary condition <picture><source srcset="form_2874_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^{n}=0$" src="form_2874.png"/></picture> on <picture><source srcset="form_2907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega$" src="form_2907.png"/></picture>. </p>
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">Compute a step length <picture><source srcset="form_2820_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^n$" src="form_2820.png"/></picture>. In this program, we always set <picture><source srcset="form_2867_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^n=0.1$" src="form_2867.png"/></picture>. To make things easier to extend later on, this happens in a function of its own, namely in <code>MinimalSurfaceProblem::determine_step_length</code>. (The strategy of always choosing <picture><source srcset="form_2867_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^n=0.1$" src="form_2867.png"/></picture> is of course not optimal &ndash; we should choose a step length that works for a given search direction &ndash; but it requires a bit of work to do that. In the end, we leave these sorts of things to external packages: <a class="el" href="step_77.html">step-77</a> does that.) </p>
+<p class="startli">Compute a step length <picture><source srcset="form_2861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^n$" src="form_2861.png"/></picture>. In this program, we always set <picture><source srcset="form_2908_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^n=0.1$" src="form_2908.png"/></picture>. To make things easier to extend later on, this happens in a function of its own, namely in <code>MinimalSurfaceProblem::determine_step_length</code>. (The strategy of always choosing <picture><source srcset="form_2908_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^n=0.1$" src="form_2908.png"/></picture> is of course not optimal &ndash; we should choose a step length that works for a given search direction &ndash; but it requires a bit of work to do that. In the end, we leave these sorts of things to external packages: <a class="el" href="step_77.html">step-77</a> does that.) </p>
 <p class="endli"></p>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_16.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_16.html	2024-03-17 21:57:44.011237807 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_16.html	2024-03-17 21:57:44.011237807 +0000
@@ -141,7 +141,7 @@
 <div class="image">
 <img src="multigrid.png" alt=""/>
 </div>
- <p>The fine level in this mesh consists only of the degrees of freedom that are defined on the refined cells, but does not extend to that part of the domain that is not refined. While this guarantees that the overall effort grows as <picture><source srcset="form_183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_183.png"/></picture> as necessary for optimal multigrid complexity, it leads to problems when defining where to smooth and what boundary conditions to pose for the operators defined on individual levels if the level boundary is not an external boundary. These questions are discussed in detail in the article cited above.</p>
+ <p>The fine level in this mesh consists only of the degrees of freedom that are defined on the refined cells, but does not extend to that part of the domain that is not refined. While this guarantees that the overall effort grows as <picture><source srcset="form_157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_157.png"/></picture> as necessary for optimal multigrid complexity, it leads to problems when defining where to smooth and what boundary conditions to pose for the operators defined on individual levels if the level boundary is not an external boundary. These questions are discussed in detail in the article cited above.</p>
 <p><a class="anchor" id="Thetestcase"></a></p><h3>The testcase</h3>
 <p>The problem we solve here is similar to <a class="el" href="step_6.html">step-6</a>, with two main differences: first, the multigrid preconditioner, obviously. We also change the discontinuity of the coefficients such that the local assembler does not look more complicated than necessary.</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_18.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_18.html	2024-03-17 21:57:44.111238425 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_18.html	2024-03-17 21:57:44.107238400 +0000
@@ -154,23 +154,23 @@
 <p><a class="anchor" id="Quasistaticelasticdeformation"></a></p><h3>Quasistatic elastic deformation</h3>
 <p><a class="anchor" id="Motivationofthemodel"></a></p><h4>Motivation of the model</h4>
 <p>In general, time-dependent small elastic deformations are described by the elastic wave equation  </p><p class="formulaDsp">
-<picture><source srcset="form_3012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2939_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \rho \frac{\partial^2 \mathbf{u}}{\partial t^2}
   + c \frac{\partial \mathbf{u}}{\partial t}
   - \textrm{div}\  ( C \varepsilon(\mathbf{u})) = \mathbf{f}
   \qquad
   \textrm{in}\ \Omega,
-\]" src="form_3012.png"/></picture>
+\]" src="form_2939.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_3013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}=\mathbf{u} (\mathbf{x},t)$" src="form_3013.png"/></picture> is the deformation of the body, <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture> and <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture> the density and attenuation coefficient, and <picture><source srcset="form_900_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{f}$" src="form_900.png"/></picture> external forces. In addition, initial conditions  </p><p class="formulaDsp">
-<picture><source srcset="form_3014_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_2940_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}=\mathbf{u} (\mathbf{x},t)$" src="form_2940.png"/></picture> is the deformation of the body, <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture> and <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture> the density and attenuation coefficient, and <picture><source srcset="form_900_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{f}$" src="form_900.png"/></picture> external forces. In addition, initial conditions  </p><p class="formulaDsp">
+<picture><source srcset="form_2942_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf{u}(\cdot, 0) = \mathbf{u}_0(\cdot)
   \qquad
   \textrm{on}\ \Omega,
-\]" src="form_3014.png"/></picture>
+\]" src="form_2942.png"/></picture>
 </p>
 <p> and Dirichlet (displacement) or Neumann (traction) boundary conditions need to be specified for a unique solution:  </p><p class="formulaDsp">
-<picture><source srcset="form_3015_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_2943_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \mathbf{u}(\mathbf{x},t) &amp;=&amp; \mathbf{d}(\mathbf{x},t)
   \qquad
   \textrm{on}\ \Gamma_D\subset\partial\Omega,
@@ -178,12 +178,12 @@
   \mathbf{n} \ C \varepsilon(\mathbf{u}(\mathbf{x},t)) &amp;=&amp; \mathbf{b}(\mathbf{x},t)
   \qquad
   \textrm{on}\ \Gamma_N=\partial\Omega\backslash\Gamma_D.
-\end{eqnarray*}" src="form_3015.png"/></picture>
+\end{eqnarray*}" src="form_2943.png"/></picture>
 </p>
-<p> In above formulation, <picture><source srcset="form_3016_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\mathbf{u})= \frac 12 (\nabla \mathbf{u} + \nabla
-\mathbf{u}^T)$" src="form_3016.png"/></picture> is the symmetric gradient of the displacement, also called the <em>strain</em>. <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> is a tensor of rank 4, called the <em>stress-strain tensor</em> (the inverse of the <a href="https://en.wikipedia.org/wiki/Hooke%27s_law#href_anchor"><em>compliance tensor</em></a>) that contains knowledge of the elastic strength of the material; its symmetry properties make sure that it maps symmetric tensors of rank 2 (&ldquo;matrices&rdquo; of dimension <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>, where <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> is the spatial dimensionality) onto symmetric tensors of the same rank. We will comment on the roles of the strain and stress tensors more below. For the moment it suffices to say that we interpret the term <picture><source srcset="form_3017_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{div}\  ( C \varepsilon(\mathbf{u}))$" src="form_3017.png"/></picture> as the vector with components <picture><source srcset="form_3018_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac \partial{\partial x_j} C_{ijkl} \varepsilon(\mathbf{u})_{kl}$" src="form_3018.png"/></picture>, where summation over indices <picture><source srcset="form_3019_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j,k,l$" src="form_3019.png"/></picture> is implied.</p>
-<p>The quasistatic limit of this equation is motivated as follows: each small perturbation of the body, for example by changes in boundary condition or the forcing function, will result in a corresponding change in the configuration of the body. In general, this will be in the form of waves radiating away from the location of the disturbance. Due to the presence of the damping term, these waves will be attenuated on a time scale of, say, <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture>. Now, assume that all changes in external forcing happen on times scales that are much larger than <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture>. In that case, the dynamic nature of the change is unimportant: we can consider the body to always be in static equilibrium, i.e. we can assume that at all times the body satisfies  </p><p class="formulaDsp">
-<picture><source srcset="form_3021_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> In above formulation, <picture><source srcset="form_2944_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\mathbf{u})= \frac 12 (\nabla \mathbf{u} + \nabla
+\mathbf{u}^T)$" src="form_2944.png"/></picture> is the symmetric gradient of the displacement, also called the <em>strain</em>. <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> is a tensor of rank 4, called the <em>stress-strain tensor</em> (the inverse of the <a href="https://en.wikipedia.org/wiki/Hooke%27s_law#href_anchor"><em>compliance tensor</em></a>) that contains knowledge of the elastic strength of the material; its symmetry properties make sure that it maps symmetric tensors of rank 2 (&ldquo;matrices&rdquo; of dimension <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>, where <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> is the spatial dimensionality) onto symmetric tensors of the same rank. We will comment on the roles of the strain and stress tensors more below. For the moment it suffices to say that we interpret the term <picture><source srcset="form_2945_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{div}\  ( C \varepsilon(\mathbf{u}))$" src="form_2945.png"/></picture> as the vector with components <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac \partial{\partial x_j} C_{ijkl} \varepsilon(\mathbf{u})_{kl}$" src="form_2946.png"/></picture>, where summation over indices <picture><source srcset="form_2947_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j,k,l$" src="form_2947.png"/></picture> is implied.</p>
+<p>The quasistatic limit of this equation is motivated as follows: each small perturbation of the body, for example by changes in boundary condition or the forcing function, will result in a corresponding change in the configuration of the body. In general, this will be in the form of waves radiating away from the location of the disturbance. Due to the presence of the damping term, these waves will be attenuated on a time scale of, say, <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture>. Now, assume that all changes in external forcing happen on times scales that are much larger than <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture>. In that case, the dynamic nature of the change is unimportant: we can consider the body to always be in static equilibrium, i.e. we can assume that at all times the body satisfies  </p><p class="formulaDsp">
+<picture><source srcset="form_2949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   - \textrm{div}\  ( C \varepsilon(\mathbf{u})) &amp;=&amp; \mathbf{f}(\mathbf{x},t)
   \qquad
   \textrm{in}\ \Omega,
@@ -195,13 +195,13 @@
   \mathbf{n} \ C \varepsilon(\mathbf{u}(\mathbf{x},t)) &amp;=&amp; \mathbf{b}(\mathbf{x},t)
   \qquad
   \textrm{on}\ \Gamma_N.
-\end{eqnarray*}" src="form_3021.png"/></picture>
+\end{eqnarray*}" src="form_2949.png"/></picture>
 </p>
-<p> Note that the differential equation does not contain any time derivatives any more &ndash; all time dependence is introduced through boundary conditions and a possibly time-varying force function <picture><source srcset="form_3022_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{f}(\mathbf{x},t)$" src="form_3022.png"/></picture>. The changes in configuration can therefore be considered as being stationary instantaneously. An alternative view of this is that <picture><source srcset="form_215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t$" src="form_215.png"/></picture> is not really a time variable, but only a time-like parameter that governs the evolution of the problem.</p>
+<p> Note that the differential equation does not contain any time derivatives any more &ndash; all time dependence is introduced through boundary conditions and a possibly time-varying force function <picture><source srcset="form_2950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{f}(\mathbf{x},t)$" src="form_2950.png"/></picture>. The changes in configuration can therefore be considered as being stationary instantaneously. An alternative view of this is that <picture><source srcset="form_189_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t$" src="form_189.png"/></picture> is not really a time variable, but only a time-like parameter that governs the evolution of the problem.</p>
 <p>While these equations are sufficient to describe small deformations, computing large deformations is a little more complicated and, in general, leads to nonlinear equations such as those treated in <a class="el" href="step_44.html">step-44</a>. In the following, let us consider some of the tools one would employ when simulating problems in which the deformation becomes <em>large</em>.</p>
 <dl class="section note"><dt>Note</dt><dd>The model we will consider below is not founded on anything that would be mathematically sound: we will consider a model in which we produce a small deformation, deform the physical coordinates of the body by this deformation, and then consider the next loading step again as a linear problem. This isn't consistent, since the assumption of linearity implies that deformations are infinitesimal and so moving around the vertices of our mesh by a finite amount before solving the next linear problem is an inconsistent approach. We should therefore note that it is not surprising that the equations discussed below can't be found in the literature: <b>The model considered here has little to do with reality!</b> On the other hand, the implementation techniques we consider are very much what one would need to use when implementing a <em>real</em> model, as we will see in <a class="el" href="step_44.html">step-44</a>.</dd></dl>
-<p>To come back to defining our "artificial" model, let us first introduce a tensorial stress variable <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture>, and write the differential equations in terms of the stress:  </p><p class="formulaDsp">
-<picture><source srcset="form_3023_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>To come back to defining our "artificial" model, let us first introduce a tensorial stress variable <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture>, and write the differential equations in terms of the stress:  </p><p class="formulaDsp">
+<picture><source srcset="form_2951_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   - \textrm{div}\  \sigma &amp;=&amp; \mathbf{f}(\mathbf{x},t)
   \qquad
   \textrm{in}\ \Omega(t),
@@ -213,30 +213,30 @@
   \mathbf{n} \ C \varepsilon(\mathbf{u}(\mathbf{x},t)) &amp;=&amp; \mathbf{b}(\mathbf{x},t)
   \qquad
   \textrm{on}\ \Gamma_N=\partial\Omega(t)\backslash\Gamma_D.
-\end{eqnarray*}" src="form_3023.png"/></picture>
+\end{eqnarray*}" src="form_2951.png"/></picture>
 </p>
-<p> Note that these equations are posed on a domain <picture><source srcset="form_3024_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega(t)$" src="form_3024.png"/></picture> that changes with time, with the boundary moving according to the displacements <picture><source srcset="form_3025_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}(\mathbf{x},t)$" src="form_3025.png"/></picture> of the points on the boundary. To complete this system, we have to specify the incremental relationship between the stress and the strain, as follows: <a class="anchor" id="step_18.stress-strain"></a>  </p><p class="formulaDsp">
-<picture><source srcset="form_3026_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> Note that these equations are posed on a domain <picture><source srcset="form_2952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega(t)$" src="form_2952.png"/></picture> that changes with time, with the boundary moving according to the displacements <picture><source srcset="form_2953_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}(\mathbf{x},t)$" src="form_2953.png"/></picture> of the points on the boundary. To complete this system, we have to specify the incremental relationship between the stress and the strain, as follows: <a class="anchor" id="step_18.stress-strain"></a>  </p><p class="formulaDsp">
+<picture><source srcset="form_2954_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \dot\sigma = C \varepsilon (\dot{\mathbf{u}}),
   \qquad
   \qquad
   \textrm{[stress-strain]}
-\]" src="form_3026.png"/></picture>
+\]" src="form_2954.png"/></picture>
 </p>
-<p> where a dot indicates a time derivative. Both the stress <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture> and the strain <picture><source srcset="form_3027_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\mathbf{u})$" src="form_3027.png"/></picture> are symmetric tensors of rank 2.</p>
+<p> where a dot indicates a time derivative. Both the stress <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture> and the strain <picture><source srcset="form_2955_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\mathbf{u})$" src="form_2955.png"/></picture> are symmetric tensors of rank 2.</p>
 <p><a class="anchor" id="Timediscretization"></a></p><h4>Time discretization</h4>
-<p>Numerically, this system is solved as follows: first, we discretize the time component using a backward Euler scheme. This leads to a discrete equilibrium of force at time step <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_3028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Numerically, this system is solved as follows: first, we discretize the time component using a backward Euler scheme. This leads to a discrete equilibrium of force at time step <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_2956_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   -\textrm{div}\  \sigma^n = f^n,
-\]" src="form_3028.png"/></picture>
+\]" src="form_2956.png"/></picture>
 </p>
 <p> where  </p><p class="formulaDsp">
-<picture><source srcset="form_3029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \sigma^n = \sigma^{n-1} + C \varepsilon (\Delta \mathbf{u}^n),
-\]" src="form_3029.png"/></picture>
+\]" src="form_2957.png"/></picture>
 </p>
-<p> and <picture><source srcset="form_3030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta \mathbf{u}^n$" src="form_3030.png"/></picture> the incremental displacement for time step <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>. In addition, we have to specify initial data <picture><source srcset="form_3031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}(\cdot,0)=\mathbf{u}_0$" src="form_3031.png"/></picture>. This way, if we want to solve for the displacement increment, we have to solve the following system:  </p><p class="formulaDsp">
-<picture><source srcset="form_3032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> and <picture><source srcset="form_2958_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta \mathbf{u}^n$" src="form_2958.png"/></picture> the incremental displacement for time step <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>. In addition, we have to specify initial data <picture><source srcset="form_2959_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}(\cdot,0)=\mathbf{u}_0$" src="form_2959.png"/></picture>. This way, if we want to solve for the displacement increment, we have to solve the following system:  </p><p class="formulaDsp">
+<picture><source srcset="form_2960_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   - \textrm{div}\   C \varepsilon(\Delta\mathbf{u}^n) &amp;= \mathbf{f} + \textrm{div}\  \sigma^{n-1}
   \qquad
   &amp;&amp;\textrm{in}\ \Omega(t_{n-1}),
@@ -248,11 +248,11 @@
   \mathbf{n} \ C \varepsilon(\Delta \mathbf{u}^n(\mathbf{x},t)) &amp;= \mathbf{b}(\mathbf{x},t_n)-\mathbf{b}(\mathbf{x},t_{n-1})
   \qquad
   &amp;&amp;\textrm{on}\ \Gamma_N=\partial\Omega(t_{n-1})\backslash\Gamma_D.
-\end{align*}" src="form_3032.png"/></picture>
+\end{align*}" src="form_2960.png"/></picture>
 </p>
-<p> The weak form of this set of equations, which as usual is the basis for the finite element formulation, reads as follows: find <picture><source srcset="form_3033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta \mathbf{u}^n \in
-\{v\in H^1(\Omega(t_{n-1}))^d: v|_{\Gamma_D}=\mathbf{d}(\cdot,t_n) - \mathbf{d}(\cdot,t_{n-1})\}$" src="form_3033.png"/></picture> such that <a class="anchor" id="step_18.linear-system"></a>  </p><p class="formulaDsp">
-<picture><source srcset="form_3034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> The weak form of this set of equations, which as usual is the basis for the finite element formulation, reads as follows: find <picture><source srcset="form_2961_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta \mathbf{u}^n \in
+\{v\in H^1(\Omega(t_{n-1}))^d: v|_{\Gamma_D}=\mathbf{d}(\cdot,t_n) - \mathbf{d}(\cdot,t_{n-1})\}$" src="form_2961.png"/></picture> such that <a class="anchor" id="step_18.linear-system"></a>  </p><p class="formulaDsp">
+<picture><source srcset="form_2962_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   (C \varepsilon(\Delta\mathbf{u}^n), \varepsilon(\varphi) )_{\Omega(t_{n-1})}
   &amp;=
   (\mathbf{f}, \varphi)_{\Omega(t_{n-1})}
@@ -264,12 +264,12 @@
   \\
   &amp;\qquad\qquad
   \forall \varphi \in \{\mathbf{v}\in H^1(\Omega(t_{n-1}))^d: \mathbf{v}|_{\Gamma_D}=0\}.
-\end{align*}" src="form_3034.png"/></picture>
+\end{align*}" src="form_2962.png"/></picture>
 </p>
-<p> Using that <picture><source srcset="form_3035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^{n-1} \mathbf{n}
+<p> Using that <picture><source srcset="form_2963_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^{n-1} \mathbf{n}
             = [C \varepsilon(\mathbf{u}^{n-1})] \mathbf{n}
-            = \mathbf{b}(\mathbf x, t_{n-1})$" src="form_3035.png"/></picture>, these equations can be simplified to  </p><p class="formulaDsp">
-<picture><source srcset="form_3036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+            = \mathbf{b}(\mathbf x, t_{n-1})$" src="form_2963.png"/></picture>, these equations can be simplified to  </p><p class="formulaDsp">
+<picture><source srcset="form_2964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   (C \varepsilon(\Delta\mathbf{u}^n), \varepsilon(\varphi) )_{\Omega(t_{n-1})}
   &amp;=
   (\mathbf{f}, \varphi)_{\Omega(t_{n-1})}
@@ -281,32 +281,32 @@
   \qquad
   \qquad
   \textrm{[linear-system]}
-\end{align*}" src="form_3036.png"/></picture>
+\end{align*}" src="form_2964.png"/></picture>
 </p>
-<p>We note that, for simplicity, in the program we will always assume that there are no boundary forces, i.e. <picture><source srcset="form_3037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{b} = 0$" src="form_3037.png"/></picture>, and that the deformation of the body is driven by body forces <picture><source srcset="form_900_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{f}$" src="form_900.png"/></picture> and prescribed boundary displacements <picture><source srcset="form_1040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{d}$" src="form_1040.png"/></picture> alone. It is also worth noting that when integrating by parts, we would get terms of the form <picture><source srcset="form_3038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(C \varepsilon(\Delta\mathbf{u}^n), \nabla \varphi
-)_{\Omega(t_{n-1})}$" src="form_3038.png"/></picture>, but that we replace them with the term involving the symmetric gradient <picture><source srcset="form_3039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\varphi)$" src="form_3039.png"/></picture> instead of <picture><source srcset="form_3040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\varphi$" src="form_3040.png"/></picture>. Due to the symmetry of <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>, the two terms are mathematically equivalent, but the symmetric version avoids the potential for round-off errors making the resulting matrix slightly non-symmetric.</p>
-<p>The system at time step <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>, to be solved on the old domain <picture><source srcset="form_3041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega(t_{n-1})$" src="form_3041.png"/></picture>, has exactly the form of a stationary elastic problem, and is therefore similar to what we have already implemented in previous example programs. We will therefore not comment on the space discretization beyond saying that we again use lowest order continuous finite elements.</p>
+<p>We note that, for simplicity, in the program we will always assume that there are no boundary forces, i.e. <picture><source srcset="form_2965_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{b} = 0$" src="form_2965.png"/></picture>, and that the deformation of the body is driven by body forces <picture><source srcset="form_900_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{f}$" src="form_900.png"/></picture> and prescribed boundary displacements <picture><source srcset="form_994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{d}$" src="form_994.png"/></picture> alone. It is also worth noting that when integrating by parts, we would get terms of the form <picture><source srcset="form_2966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(C \varepsilon(\Delta\mathbf{u}^n), \nabla \varphi
+)_{\Omega(t_{n-1})}$" src="form_2966.png"/></picture>, but that we replace them with the term involving the symmetric gradient <picture><source srcset="form_2967_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\varphi)$" src="form_2967.png"/></picture> instead of <picture><source srcset="form_2968_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\varphi$" src="form_2968.png"/></picture>. Due to the symmetry of <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>, the two terms are mathematically equivalent, but the symmetric version avoids the potential for round-off errors making the resulting matrix slightly non-symmetric.</p>
+<p>The system at time step <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>, to be solved on the old domain <picture><source srcset="form_2969_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega(t_{n-1})$" src="form_2969.png"/></picture>, has exactly the form of a stationary elastic problem, and is therefore similar to what we have already implemented in previous example programs. We will therefore not comment on the space discretization beyond saying that we again use lowest order continuous finite elements.</p>
 <p>There are differences, however: </p><ol>
 <li>
 <p class="startli">We have to move (update) the mesh after each time step, in order to be able to solve the next time step on a new domain;</p>
 <p class="endli"></p>
 </li>
 <li>
-We need to know <picture><source srcset="form_3042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^{n-1}$" src="form_3042.png"/></picture> to compute the next incremental displacement, i.e. we need to compute it at the end of the time step to make sure it is available for the next time step. Essentially, the stress variable is our window to the history of deformation of the body. </li>
+We need to know <picture><source srcset="form_2970_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^{n-1}$" src="form_2970.png"/></picture> to compute the next incremental displacement, i.e. we need to compute it at the end of the time step to make sure it is available for the next time step. Essentially, the stress variable is our window to the history of deformation of the body. </li>
 </ol>
 <p>These two operations are done in the functions <code>move_mesh</code> and <code>update_quadrature_point_history</code> in the program. While moving the mesh is only a technicality, updating the stress is a little more complicated and will be discussed in the next section.</p>
 <p><a class="anchor" id="Updatingthestressvariable"></a></p><h4>Updating the stress variable</h4>
-<p>As indicated above, we need to have the stress variable <picture><source srcset="form_3043_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^n$" src="form_3043.png"/></picture> available when computing time step <picture><source srcset="form_3044_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n+1$" src="form_3044.png"/></picture>, and we can compute it using <a class="anchor" id="step_18.stress-update"></a>  </p><p class="formulaDsp">
-<picture><source srcset="form_3045_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>As indicated above, we need to have the stress variable <picture><source srcset="form_2971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^n$" src="form_2971.png"/></picture> available when computing time step <picture><source srcset="form_2972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n+1$" src="form_2972.png"/></picture>, and we can compute it using <a class="anchor" id="step_18.stress-update"></a>  </p><p class="formulaDsp">
+<picture><source srcset="form_2973_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \sigma^n = \sigma^{n-1} + C \varepsilon (\Delta \mathbf{u}^n).
   \qquad
   \qquad
   \textrm{[stress-update]}
-\]" src="form_3045.png"/></picture>
+\]" src="form_2973.png"/></picture>
 </p>
-<p> There are, despite the apparent simplicity of this equation, two questions that we need to discuss. The first concerns the way we store <picture><source srcset="form_3043_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^n$" src="form_3043.png"/></picture>: even if we compute the incremental updates <picture><source srcset="form_3046_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta\mathbf{u}^n$" src="form_3046.png"/></picture> using lowest-order finite elements, then its symmetric gradient <picture><source srcset="form_3047_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\Delta\mathbf{u}^n)$" src="form_3047.png"/></picture> is in general still a function that is not easy to describe. In particular, it is not a piecewise constant function, and on general meshes (with cells that are not rectangles parallel to the coordinate axes) or with non-constant stress-strain tensors <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> it is not even a bi- or trilinear function. Thus, it is a priori not clear how to store <picture><source srcset="form_3043_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^n$" src="form_3043.png"/></picture> in a computer program.</p>
-<p>To decide this, we have to see where it is used. The only place where we require the stress is in the term <picture><source srcset="form_3048_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\sigma^{n-1},\varepsilon(\varphi))_{\Omega(t_{n-1})}$" src="form_3048.png"/></picture>. In practice, we of course replace this term by numerical quadrature:  </p><p class="formulaDsp">
-<picture><source srcset="form_3049_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> There are, despite the apparent simplicity of this equation, two questions that we need to discuss. The first concerns the way we store <picture><source srcset="form_2971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^n$" src="form_2971.png"/></picture>: even if we compute the incremental updates <picture><source srcset="form_2974_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta\mathbf{u}^n$" src="form_2974.png"/></picture> using lowest-order finite elements, then its symmetric gradient <picture><source srcset="form_2975_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\Delta\mathbf{u}^n)$" src="form_2975.png"/></picture> is in general still a function that is not easy to describe. In particular, it is not a piecewise constant function, and on general meshes (with cells that are not rectangles parallel to the coordinate axes) or with non-constant stress-strain tensors <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> it is not even a bi- or trilinear function. Thus, it is a priori not clear how to store <picture><source srcset="form_2971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^n$" src="form_2971.png"/></picture> in a computer program.</p>
+<p>To decide this, we have to see where it is used. The only place where we require the stress is in the term <picture><source srcset="form_2976_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\sigma^{n-1},\varepsilon(\varphi))_{\Omega(t_{n-1})}$" src="form_2976.png"/></picture>. In practice, we of course replace this term by numerical quadrature:  </p><p class="formulaDsp">
+<picture><source srcset="form_2977_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (\sigma^{n-1},\varepsilon(\varphi))_{\Omega(t_{n-1})}
   =
   \sum_{K\subset {T}}
@@ -315,12 +315,12 @@
   \sum_{K\subset {T}}
   \sum_q
   w_q \ \sigma^{n-1}(\mathbf{x}_q) : \varepsilon(\varphi(\mathbf{x}_q),
-\]" src="form_3049.png"/></picture>
+\]" src="form_2977.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_q$" src="form_274.png"/></picture> are the quadrature weights and <picture><source srcset="form_3050_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}_q$" src="form_3050.png"/></picture> the quadrature points on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This should make clear that what we really need is not the stress <picture><source srcset="form_3042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^{n-1}$" src="form_3042.png"/></picture> in itself, but only the values of the stress in the quadrature points on all cells. This, however, is a simpler task: we only have to provide a data structure that is able to hold one symmetric tensor of rank 2 for each quadrature point on all cells (or, since we compute in parallel, all quadrature points of all cells that the present MPI process &ldquo;owns&rdquo;). At the end of each time step we then only have to evaluate <picture><source srcset="form_3051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\Delta \mathbf{u}^n(\mathbf{x}_q))$" src="form_3051.png"/></picture>, multiply it by the stress-strain tensor <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>, and use the result to update the stress <picture><source srcset="form_3052_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^n(\mathbf{x}_q)$" src="form_3052.png"/></picture> at quadrature point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>.</p>
-<p>The second complication is not visible in our notation as chosen above. It is due to the fact that we compute <picture><source srcset="form_3053_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta u^n$" src="form_3053.png"/></picture> on the domain <picture><source srcset="form_3041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega(t_{n-1})$" src="form_3041.png"/></picture>, and then use this displacement increment to both update the stress as well as move the mesh nodes around to get to <picture><source srcset="form_3054_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega(t_n)$" src="form_3054.png"/></picture> on which the next increment is computed. What we have to make sure, in this context, is that moving the mesh does not only involve moving around the nodes, but also making corresponding changes to the stress variable: the updated stress is a variable that is defined with respect to the coordinate system of the material in the old domain, and has to be transferred to the new domain. The reason for this can be understood as follows: locally, the incremental deformation <picture><source srcset="form_3055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta\mathbf{u}$" src="form_3055.png"/></picture> can be decomposed into three parts, a linear translation (the constant part of the displacement increment field in the neighborhood of a point), a dilational component (that part of the gradient of the displacement field that has a nonzero divergence), and a rotation. A linear translation of the material does not affect the stresses that are frozen into it &ndash; the stress values are simply translated along. The dilational or compressional change produces a corresponding stress update. However, the rotational component does not necessarily induce a nonzero stress update (think, in 2d, for example of the situation where <picture><source srcset="form_3056_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta\mathbf{u}=(y, -x)^T$" src="form_3056.png"/></picture>, with which <picture><source srcset="form_3057_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\Delta
-\mathbf{u})=0$" src="form_3057.png"/></picture>). Nevertheless, if the material was prestressed in a certain direction, then this direction will be rotated along with the material. To this end, we have to define a rotation matrix <picture><source srcset="form_3058_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R(\Delta \mathbf{u}^n)$" src="form_3058.png"/></picture> that describes, in each point the rotation due to the displacement increments. It is not hard to see that the actual dependence of <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> on <picture><source srcset="form_3030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta \mathbf{u}^n$" src="form_3030.png"/></picture> can only be through the curl of the displacement, rather than the displacement itself or its full gradient (as mentioned above, the constant components of the increment describe translations, its divergence the dilational modes, and the curl the rotational modes). Since the exact form of <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> is cumbersome, we only state it in the program code, and note that the correct updating formula for the stress variable is then <a class="anchor" id="step_18.stress-update+rot"></a>  </p><p class="formulaDsp">
-<picture><source srcset="form_3059_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_q$" src="form_274.png"/></picture> are the quadrature weights and <picture><source srcset="form_2978_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}_q$" src="form_2978.png"/></picture> the quadrature points on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This should make clear that what we really need is not the stress <picture><source srcset="form_2970_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^{n-1}$" src="form_2970.png"/></picture> in itself, but only the values of the stress in the quadrature points on all cells. This, however, is a simpler task: we only have to provide a data structure that is able to hold one symmetric tensor of rank 2 for each quadrature point on all cells (or, since we compute in parallel, all quadrature points of all cells that the present MPI process &ldquo;owns&rdquo;). At the end of each time step we then only have to evaluate <picture><source srcset="form_2979_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\Delta \mathbf{u}^n(\mathbf{x}_q))$" src="form_2979.png"/></picture>, multiply it by the stress-strain tensor <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>, and use the result to update the stress <picture><source srcset="form_2980_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^n(\mathbf{x}_q)$" src="form_2980.png"/></picture> at quadrature point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_19.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_19.html	2024-03-17 21:57:44.195238943 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_19.html	2024-03-17 21:57:44.199238968 +0000
@@ -148,135 +148,135 @@
 <p>The finite element method in general, and deal.II in particular, were invented to solve partial differential equations &ndash; in other words, to solve <a href="https://en.wikipedia.org/wiki/Continuum_mechanics">continuum mechanics</a> problems. On the other hand, sometimes one wants to solve problems in which it is useful to track individual objects ("particles") and how their positions evolve. If this simply leads to a set of ordinary differential equations, for example if you want to track the positions of the planets in the solar system over time, then deal.II is clearly not the right tool. On the other hand, if this evolution is due to the interaction with the solution of partial differential equations, or if having a mesh to determine which particles interact with others (such as in the <a href="https://en.wikipedia.org/wiki/Smoothed-particle_hydrodynamics">smoothed particle hydrodynamics (SPH)</a> method), then deal.II has support for you.</p>
 <p>The case we will consider here is how electrically charged particles move through an electric field. As motivation, we will consider <a href="https://en.wikipedia.org/wiki/Cathode_ray">cathode rays</a>: Electrons emitted by a heated piece of metal that is negatively charged (the "cathode"), and that are then accelerated by an electric field towards the positively charged electrode (the "anode"). The anode is typically ring-shaped so that the majority of electrons can fly through the hole in the form of an electron beam. In the olden times, they might then have illuminated the screen of a TV built from a <a href="https://en.wikipedia.org/wiki/Cathode-ray_tube">cathode ray tube</a>. Today, instead, electron beams are useful in <a href="https://en.wikipedia.org/wiki/X-ray_tube">X-ray machines</a>, <a href="https://en.wikipedia.org/wiki/Electron-beam_lithography">electron beam lithography</a>, <a href="https://en.wikipedia.org/wiki/Electron-beam_welding">electron beam welding</a>, and a number of other areas.</p>
 <p>The equations we will then consider are as follows: First, we need to describe the electric field. This is most easily accomplished by noting that the electric potential <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> satisfied the equation  </p><p class="formulaDsp">
-<picture><source srcset="form_2944_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   -\epsilon_0 \Delta V = \rho
-\]" src="form_2944.png"/></picture>
+\]" src="form_3008.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2945_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon_0$" src="form_2945.png"/></picture> is the dielectric constant of vacuum, and <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture> is the charge density. This is augmented by boundary conditions that we will choose as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_2947_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> where <picture><source srcset="form_3009_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon_0$" src="form_3009.png"/></picture> is the dielectric constant of vacuum, and <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture> is the charge density. This is augmented by boundary conditions that we will choose as follows:  </p><p class="formulaDsp">
+<picture><source srcset="form_3010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   V &amp;= -V_0 &amp;&amp; \text{on}\; \Gamma_\text{cathode}\subset\partial\Omega \\
   V &amp;= +V_0 &amp;&amp; \text{on}\; \Gamma_\text{anode}\subset\partial\Omega \\
   \epsilon\frac{\partial V}{\partial n} &amp;= 0
    &amp;&amp; \text{on}\; \partial\Omega\setminus\Gamma_\text{cathode}\setminus\Gamma_\text{anode}.
-\end{align*}" src="form_2947.png"/></picture>
+\end{align*}" src="form_3010.png"/></picture>
 </p>
-<p> In other words, we prescribe voltages <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$+V_0$" src="form_2948.png"/></picture> and <picture><source srcset="form_2949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-V_0$" src="form_2949.png"/></picture> at the two electrodes and insulating (Neumann) boundary conditions elsewhere. Since the dynamics of the particles are purely due to the electric field <picture><source srcset="form_2950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf E=\nabla V$" src="form_2950.png"/></picture>, we could as well have prescribed <picture><source srcset="form_2951_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2V_0$" src="form_2951.png"/></picture> and <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture> at the two electrodes &ndash; all that matters is the voltage difference at the two electrodes.</p>
-<p>Given this electric potential <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> and the electric field <picture><source srcset="form_2950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf E=\nabla V$" src="form_2950.png"/></picture>, we can describe the trajectory of the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th particle using the differential equation  </p><p class="formulaDsp">
-<picture><source srcset="form_2952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> In other words, we prescribe voltages <picture><source srcset="form_3011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$+V_0$" src="form_3011.png"/></picture> and <picture><source srcset="form_3012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-V_0$" src="form_3012.png"/></picture> at the two electrodes and insulating (Neumann) boundary conditions elsewhere. Since the dynamics of the particles are purely due to the electric field <picture><source srcset="form_3013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf E=\nabla V$" src="form_3013.png"/></picture>, we could as well have prescribed <picture><source srcset="form_3014_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2V_0$" src="form_3014.png"/></picture> and <picture><source srcset="form_683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0$" src="form_683.png"/></picture> at the two electrodes &ndash; all that matters is the voltage difference at the two electrodes.</p>
+<p>Given this electric potential <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> and the electric field <picture><source srcset="form_3013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf E=\nabla V$" src="form_3013.png"/></picture>, we can describe the trajectory of the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th particle using the differential equation  </p><p class="formulaDsp">
+<picture><source srcset="form_3015_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   m {\ddot {\mathbf x}}_i = e\mathbf E,
-\]" src="form_2952.png"/></picture>
+\]" src="form_3015.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2953_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m,e$" src="form_2953.png"/></picture> are the mass and electric charge of each particle. In practice, it is convenient to write this as a system of first-order differential equations in the position <picture><source srcset="form_216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_216.png"/></picture> and velocity <picture><source srcset="form_321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v$" src="form_321.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_2954_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> where <picture><source srcset="form_3016_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m,e$" src="form_3016.png"/></picture> are the mass and electric charge of each particle. In practice, it is convenient to write this as a system of first-order differential equations in the position <picture><source srcset="form_190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_190.png"/></picture> and velocity <picture><source srcset="form_321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v$" src="form_321.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_3017_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   {\dot {\mathbf v}}_i &amp;= \frac{e\mathbf E}{m}, \\
   {\dot {\mathbf x}}_i &amp;= {\mathbf v}_i.
-\end{align*}" src="form_2954.png"/></picture>
+\end{align*}" src="form_3017.png"/></picture>
 </p>
-<p> The deal.II class we will use to deal with particles, <a class="el" href="classParticles_1_1ParticleHandler.html">Particles::ParticleHandler</a>, stores particles in a way so that the position <picture><source srcset="form_1222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_i$" src="form_1222.png"/></picture> is part of the <a class="el" href="classParticles_1_1ParticleHandler.html">Particles::ParticleHandler</a> data structures. (It stores particles sorted by cell they are in, and consequently needs to know where each particle is.) The velocity <picture><source srcset="form_2955_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v_i$" src="form_2955.png"/></picture>, on the other hand, is of no concern to <a class="el" href="classParticles_1_1ParticleHandler.html">Particles::ParticleHandler</a> and consequently we will store it as a "property" of each particle that we will update in each time step. Properties can also be used to store any other quantity we might care about each particle: its charge, or if they were larger than just an electron, its color, mass, attitude in space, chemical composition, etc.</p>
-<p>There remain two things to discuss to complete the model: Where particles start and what the charge density <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture> is.</p>
-<p>First, historically, cathode rays used very large electric fields to pull electrons out of the metal. This produces only a relatively small current. One can do better by heating the cathode: a statistical fraction of electrons in that case have enough thermal energy to leave the metal; the electric field then just has to be strong enough to pull them away from the attraction of their host body. We will model this in the following way: We will create a new particle if (i) the electric field points away from the electrode, i.e., if <picture><source srcset="form_2956_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf E \cdot \mathbf n &lt; 0$" src="form_2956.png"/></picture> where <picture><source srcset="form_2957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n$" src="form_2957.png"/></picture> is the normal vector at a face pointing out of the domain (into the electrode), and (ii) the electric field exceeds a threshold value <picture><source srcset="form_2958_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\mathbf E|\ge E_\text{threshold}$" src="form_2958.png"/></picture>. This is surely not a sufficiently accurate model for what really happens, but is good enough for our current tutorial program.</p>
+<p> The deal.II class we will use to deal with particles, <a class="el" href="classParticles_1_1ParticleHandler.html">Particles::ParticleHandler</a>, stores particles in a way so that the position <picture><source srcset="form_1222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_i$" src="form_1222.png"/></picture> is part of the <a class="el" href="classParticles_1_1ParticleHandler.html">Particles::ParticleHandler</a> data structures. (It stores particles sorted by cell they are in, and consequently needs to know where each particle is.) The velocity <picture><source srcset="form_3018_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v_i$" src="form_3018.png"/></picture>, on the other hand, is of no concern to <a class="el" href="classParticles_1_1ParticleHandler.html">Particles::ParticleHandler</a> and consequently we will store it as a "property" of each particle that we will update in each time step. Properties can also be used to store any other quantity we might care about each particle: its charge, or if they were larger than just an electron, its color, mass, attitude in space, chemical composition, etc.</p>
+<p>There remain two things to discuss to complete the model: Where particles start and what the charge density <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture> is.</p>
+<p>First, historically, cathode rays used very large electric fields to pull electrons out of the metal. This produces only a relatively small current. One can do better by heating the cathode: a statistical fraction of electrons in that case have enough thermal energy to leave the metal; the electric field then just has to be strong enough to pull them away from the attraction of their host body. We will model this in the following way: We will create a new particle if (i) the electric field points away from the electrode, i.e., if <picture><source srcset="form_3019_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf E \cdot \mathbf n &lt; 0$" src="form_3019.png"/></picture> where <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n$" src="form_3020.png"/></picture> is the normal vector at a face pointing out of the domain (into the electrode), and (ii) the electric field exceeds a threshold value <picture><source srcset="form_3021_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\mathbf E|\ge E_\text{threshold}$" src="form_3021.png"/></picture>. This is surely not a sufficiently accurate model for what really happens, but is good enough for our current tutorial program.</p>
 <p>Second, in principle we would have to model the charge density via  </p><p class="formulaDsp">
-<picture><source srcset="form_2959_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3022_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \rho(\mathbf x) = \sum_i e\delta(\mathbf x-\mathbf x_i).
-\]" src="form_2959.png"/></picture>
+\]" src="form_3022.png"/></picture>
 </p>
-<p> The issue now is that in reality, a cathode ray tube in an old television yields a current of somewhere around a few milli-Amperes. In the much higher energy beams of particle accelerators, the current may only be a few nano-Ampere. But an Ampere is <picture><source srcset="form_2960_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$6\times 10^{18}$" src="form_2960.png"/></picture> electrons flowing per second. Now, as you will see in the results section, we really only simulate a few microseconds ( <picture><source srcset="form_2746_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-6}$" src="form_2746.png"/></picture> seconds), but that still results in very very large numbers of electrons &ndash; far more than we can hope to simulate with a program as small as the current one. As a consequence, let us presume that each particle represents <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> electrons. Then the particle mass and charge are also <picture><source srcset="form_2961_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Nm$" src="form_2961.png"/></picture> and <picture><source srcset="form_2962_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ne$" src="form_2962.png"/></picture> and the equations we have to solve are  </p><p class="formulaDsp">
-<picture><source srcset="form_2963_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> The issue now is that in reality, a cathode ray tube in an old television yields a current of somewhere around a few milli-Amperes. In the much higher energy beams of particle accelerators, the current may only be a few nano-Ampere. But an Ampere is <picture><source srcset="form_3023_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$6\times 10^{18}$" src="form_3023.png"/></picture> electrons flowing per second. Now, as you will see in the results section, we really only simulate a few microseconds ( <picture><source srcset="form_2746_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-6}$" src="form_2746.png"/></picture> seconds), but that still results in very very large numbers of electrons &ndash; far more than we can hope to simulate with a program as small as the current one. As a consequence, let us presume that each particle represents <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> electrons. Then the particle mass and charge are also <picture><source srcset="form_3024_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Nm$" src="form_3024.png"/></picture> and <picture><source srcset="form_3025_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ne$" src="form_3025.png"/></picture> and the equations we have to solve are  </p><p class="formulaDsp">
+<picture><source srcset="form_3026_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (Nm) {\ddot {\mathbf x}}_i = (Ne)\mathbf E,
-\]" src="form_2963.png"/></picture>
+\]" src="form_3026.png"/></picture>
 </p>
-<p> which is of course exactly the same as above after dividing both sides by <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture>. On the other hand, the charge density for these "clumps" of electrons is given by  </p><p class="formulaDsp">
-<picture><source srcset="form_2964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> which is of course exactly the same as above after dividing both sides by <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture>. On the other hand, the charge density for these "clumps" of electrons is given by  </p><p class="formulaDsp">
+<picture><source srcset="form_3027_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \rho(\mathbf x) = \sum_i (Ne)\delta(\mathbf x-\mathbf x_i).
-\]" src="form_2964.png"/></picture>
+\]" src="form_3027.png"/></picture>
 </p>
-<p> It is this form that we will implement in the program, where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> is chosen rather large in the program to ensure that the particles actually affect the electric field. (This may not be realistic in practice: In most cases, there are just not enough electrons to actually affect the overall electric field. But realism is not our goal here.)</p>
-<p>As a final thought about the model, one may wonder why the equation for the electric field (or, rather, the electric potential) has no time derivative whereas the equations for the electron positions do. In essence, this is a modeling assumption: We assume that the particles move so slowly that at any given time the electric field is in equilibrium. This is saying, in other words, that the velocity of the electrons is much less than the speed of light. In yet other words, we can rephrase this in terms of the electrode voltage <picture><source srcset="form_2965_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_0$" src="form_2965.png"/></picture>: Since every volt of electric potential accelerates electrons by approximately 600 km/s (neglecting relativistic effects), requiring <picture><source srcset="form_2966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\mathbf v_i\|\ll c$" src="form_2966.png"/></picture> is equivalent to saying that <picture><source srcset="form_2967_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2V_0 \ll 500 \text{V}$" src="form_2967.png"/></picture>. Under this assumption (and the assumption that the total number of electrons is small), one can also neglect the creation of magnetic fields by the moving charges, which would otherwise also affect the movement of the electrons.</p>
+<p> It is this form that we will implement in the program, where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> is chosen rather large in the program to ensure that the particles actually affect the electric field. (This may not be realistic in practice: In most cases, there are just not enough electrons to actually affect the overall electric field. But realism is not our goal here.)</p>
+<p>As a final thought about the model, one may wonder why the equation for the electric field (or, rather, the electric potential) has no time derivative whereas the equations for the electron positions do. In essence, this is a modeling assumption: We assume that the particles move so slowly that at any given time the electric field is in equilibrium. This is saying, in other words, that the velocity of the electrons is much less than the speed of light. In yet other words, we can rephrase this in terms of the electrode voltage <picture><source srcset="form_3028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_0$" src="form_3028.png"/></picture>: Since every volt of electric potential accelerates electrons by approximately 600 km/s (neglecting relativistic effects), requiring <picture><source srcset="form_3029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\mathbf v_i\|\ll c$" src="form_3029.png"/></picture> is equivalent to saying that <picture><source srcset="form_3030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2V_0 \ll 500 \text{V}$" src="form_3030.png"/></picture>. Under this assumption (and the assumption that the total number of electrons is small), one can also neglect the creation of magnetic fields by the moving charges, which would otherwise also affect the movement of the electrons.</p>
 <p><a class="anchor" id="Timediscretization"></a></p><h3>Time discretization</h3>
 <p>The equations outlined above then form a set of coupled differential equations. Let us bring them all together in one place again to make that clear:  </p><p class="formulaDsp">
-<picture><source srcset="form_2968_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_3031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   -\epsilon_0 \Delta V &amp;= \sum_i e\delta(\mathbf x-\mathbf x_i)
   \\
   {\dot {\mathbf x}}_i &amp;= {\mathbf v}_i,
   \\
   {\dot {\mathbf v}}_i &amp;= \frac{e\mathbf E}{m} = \frac{e\mathbf \nabla V}{m}.
-\end{align*}" src="form_2968.png"/></picture>
+\end{align*}" src="form_3031.png"/></picture>
 </p>
 <p> Because of the awkward dependence of the electric potential on the particle locations, we don't want to solve this as a coupled system but instead use a decoupled approach where we first solve for the potential in each time step and then the particle locations. (One could also do it the other way around, of course.) This is very much in the same spirit as we do in <a class="el" href="step_21.html">step-21</a>, <a class="el" href="step_31.html">step-31</a>, and <a class="el" href="step_32.html">step-32</a>, to name just a few, and can all be understood in the context of the operator splitting methods discussed in <a class="el" href="step_58.html">step-58</a>.</p>
-<p>So, if we denote by an upper index <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> the time step, and if we use a simple time discretization for the ODE, then this means that we have to solve the following set of equations in each time step:  </p><p class="formulaDsp">
-<picture><source srcset="form_2969_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>So, if we denote by an upper index <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> the time step, and if we use a simple time discretization for the ODE, then this means that we have to solve the following set of equations in each time step:  </p><p class="formulaDsp">
+<picture><source srcset="form_3032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   -\epsilon_0 \Delta V^{(n)} &amp;= \sum_i e\delta(\mathbf x-\mathbf x_i^{(n-1)})
   \\
   \frac{{\mathbf v}_i^{(n)}-{\mathbf v}_i^{(n-1)}}{\Delta t} &amp;= \frac{e\nabla V^{(n)}}{m}
   \\
   \frac{{\mathbf x}_i^{(n)}-{\mathbf x}_i^{(n-1)}}{\Delta t} &amp;= {\mathbf v}_i^{(n)}.
-\end{align*}" src="form_2969.png"/></picture>
+\end{align*}" src="form_3032.png"/></picture>
 </p>
-<p> This scheme can be understood in the framework of operator splitting methods (specifically, the "Lie splitting" method) wherein a coupled system is solved by updating one variable at a time, using either the old values of other variables (e.g., using <picture><source srcset="form_2970_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_i^{(n-1)}$" src="form_2970.png"/></picture> in the first equation) or the values of variables that have already been updated in a previous sub-step (e.g., using <picture><source srcset="form_2971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^{(n)}$" src="form_2971.png"/></picture> in the second equation). There are of course many better ways to do a time discretization (for example the simple <a href="https://en.wikipedia.org/wiki/Leapfrog_integration">leapfrog scheme</a> when updating the velocity, or more general Strang splitting methods for the coupled system) but this isn't the point of the tutorial program, and so we will be content with what we have here. (We will comment on a piece of this puzzle in the <a href="#href_anchor">possibilities for extensions</a> section of this program, however.)</p>
-<p>There remains the question of how we should choose the time step size <picture><source srcset="form_1891_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t$" src="form_1891.png"/></picture>. The limitation here is that the <a class="el" href="classParticles_1_1ParticleHandler.html">Particles::ParticleHandler</a> class needs to keep track of which cell each particle is in. This is particularly an issue if we are running computations in parallel (say, in <a class="el" href="step_70.html">step-70</a>) because in that case every process only stores those cells it owns plus one layer of "ghost cells". That's not relevant here, but in general we should make sure that over the course of each time step, a particle moves only from one cell to any of its immediate neighbors (face, edge, or vertex neighbors). If we can ensure that, then <a class="el" href="classParticles_1_1ParticleHandler.html">Particles::ParticleHandler</a> is guaranteed to be able to figure out which cell a particle ends up in. To do this, a useful rule of thumb is that we should choose the time step so that for all particles the expected distance the particle moves by is less than one cell diameter:  </p><p class="formulaDsp">
-<picture><source srcset="form_2972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> This scheme can be understood in the framework of operator splitting methods (specifically, the "Lie splitting" method) wherein a coupled system is solved by updating one variable at a time, using either the old values of other variables (e.g., using <picture><source srcset="form_3033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_i^{(n-1)}$" src="form_3033.png"/></picture> in the first equation) or the values of variables that have already been updated in a previous sub-step (e.g., using <picture><source srcset="form_3034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^{(n)}$" src="form_3034.png"/></picture> in the second equation). There are of course many better ways to do a time discretization (for example the simple <a href="https://en.wikipedia.org/wiki/Leapfrog_integration">leapfrog scheme</a> when updating the velocity, or more general Strang splitting methods for the coupled system) but this isn't the point of the tutorial program, and so we will be content with what we have here. (We will comment on a piece of this puzzle in the <a href="#href_anchor">possibilities for extensions</a> section of this program, however.)</p>
+<p>There remains the question of how we should choose the time step size <picture><source srcset="form_1897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t$" src="form_1897.png"/></picture>. The limitation here is that the <a class="el" href="classParticles_1_1ParticleHandler.html">Particles::ParticleHandler</a> class needs to keep track of which cell each particle is in. This is particularly an issue if we are running computations in parallel (say, in <a class="el" href="step_70.html">step-70</a>) because in that case every process only stores those cells it owns plus one layer of "ghost cells". That's not relevant here, but in general we should make sure that over the course of each time step, a particle moves only from one cell to any of its immediate neighbors (face, edge, or vertex neighbors). If we can ensure that, then <a class="el" href="classParticles_1_1ParticleHandler.html">Particles::ParticleHandler</a> is guaranteed to be able to figure out which cell a particle ends up in. To do this, a useful rule of thumb is that we should choose the time step so that for all particles the expected distance the particle moves by is less than one cell diameter:  </p><p class="formulaDsp">
+<picture><source srcset="form_3035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \Delta t \le \frac{h_i}{\|\mathbf v_i\|} \qquad\qquad \forall i,
-\]" src="form_2972.png"/></picture>
+\]" src="form_3035.png"/></picture>
 </p>
 <p> or equivalently  </p><p class="formulaDsp">
-<picture><source srcset="form_2973_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \Delta t \le \min_i \frac{h_i}{\|\mathbf v_i\|}.
-\]" src="form_2973.png"/></picture>
+\]" src="form_3036.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_i$" src="form_537.png"/></picture> is the length of the shortest edge of the cell on which particle <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> is located &ndash; in essence, a measure of the size of a cell.</p>
+<p> Here, <picture><source srcset="form_541_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_i$" src="form_541.png"/></picture> is the length of the shortest edge of the cell on which particle <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> is located &ndash; in essence, a measure of the size of a cell.</p>
 <p>On the other hand, a particle might already be at the boundary of one cell and the neighboring cell might be once further refined. So then the time to cross that <em>neighboring</em> cell would actually be half the amount above, suggesting  </p><p class="formulaDsp">
-<picture><source srcset="form_2974_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \Delta t \le \min_i \frac{\tfrac 12 h_i}{\|\mathbf v_i\|}.
-\]" src="form_2974.png"/></picture>
+\]" src="form_3037.png"/></picture>
 </p>
 <p>But even that is not good enough: The formula above updates the particle positions in each time using the formula  </p><p class="formulaDsp">
-<picture><source srcset="form_2975_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{{\mathbf x}_i^{(n)}-{\mathbf x}_i^{(n-1)}}{\Delta t} = {\mathbf v}_i^{(n)},
-\]" src="form_2975.png"/></picture>
+\]" src="form_3038.png"/></picture>
 </p>
-<p> that is, using the <em>current</em> velocity <picture><source srcset="form_2976_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}_i^{n}$" src="form_2976.png"/></picture>. But we don't have the current velocity yet at the time when we need to choose <picture><source srcset="form_1891_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t$" src="form_1891.png"/></picture> &ndash; which is after we have updated the potential <picture><source srcset="form_2971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^{(n)}$" src="form_2971.png"/></picture> but before we update the velocity from <picture><source srcset="form_2977_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}_i^{(n-1)}$" src="form_2977.png"/></picture> to <picture><source srcset="form_2978_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}_i^{(n)}$" src="form_2978.png"/></picture>. All we have is <picture><source srcset="form_2977_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}_i^{(n-1)}$" src="form_2977.png"/></picture>. So we need an additional safety factor for our final choice:  </p><p class="formulaDsp">
-<picture><source srcset="form_2979_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> that is, using the <em>current</em> velocity <picture><source srcset="form_3039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}_i^{n}$" src="form_3039.png"/></picture>. But we don't have the current velocity yet at the time when we need to choose <picture><source srcset="form_1897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t$" src="form_1897.png"/></picture> &ndash; which is after we have updated the potential <picture><source srcset="form_3034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^{(n)}$" src="form_3034.png"/></picture> but before we update the velocity from <picture><source srcset="form_3040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}_i^{(n-1)}$" src="form_3040.png"/></picture> to <picture><source srcset="form_3041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}_i^{(n)}$" src="form_3041.png"/></picture>. All we have is <picture><source srcset="form_3040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}_i^{(n-1)}$" src="form_3040.png"/></picture>. So we need an additional safety factor for our final choice:  </p><p class="formulaDsp">
+<picture><source srcset="form_3042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \Delta t^{(n)} =
   c_\text{safety} \min_i \frac{\tfrac 12 h_i}{\|\mathbf v_i^{(n-1)}\|}.
-\]" src="form_2979.png"/></picture>
+\]" src="form_3042.png"/></picture>
 </p>
-<p> How large should <picture><source srcset="form_2980_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_\text{safety}$" src="form_2980.png"/></picture> be? That depends on how much of underestimate <picture><source srcset="form_2981_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf v_i^{(n-1)}\|$" src="form_2981.png"/></picture> might be compared to <picture><source srcset="form_2982_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf v_i^{(n)}\|$" src="form_2982.png"/></picture>, and that is actually quite easy to assess: A particle created in one time step with zero velocity will roughly pick up equal velocity increments in each successive time step if the electric field it encounters along the way were roughly constant. So the maximal difference between <picture><source srcset="form_2981_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf v_i^{(n-1)}\|$" src="form_2981.png"/></picture> and <picture><source srcset="form_2982_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf v_i^{(n)}\|$" src="form_2982.png"/></picture> would be a factor of two. As a consequence, we will choose <picture><source srcset="form_2983_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_\text{safety}=0.5$" src="form_2983.png"/></picture>.</p>
+<p> How large should <picture><source srcset="form_3043_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_\text{safety}$" src="form_3043.png"/></picture> be? That depends on how much of underestimate <picture><source srcset="form_3044_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf v_i^{(n-1)}\|$" src="form_3044.png"/></picture> might be compared to <picture><source srcset="form_3045_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf v_i^{(n)}\|$" src="form_3045.png"/></picture>, and that is actually quite easy to assess: A particle created in one time step with zero velocity will roughly pick up equal velocity increments in each successive time step if the electric field it encounters along the way were roughly constant. So the maximal difference between <picture><source srcset="form_3044_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf v_i^{(n-1)}\|$" src="form_3044.png"/></picture> and <picture><source srcset="form_3045_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf v_i^{(n)}\|$" src="form_3045.png"/></picture> would be a factor of two. As a consequence, we will choose <picture><source srcset="form_3046_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_\text{safety}=0.5$" src="form_3046.png"/></picture>.</p>
 <p>There is only one other case we ought to consider: What happens in the very first time step? There, any particles to be moved along have just been created, but they have a zero velocity. So we don't know what velocity we should choose for them. Of course, in all other time steps there are also particles that have just been created, but in general, the particles with the highest velocity limit the time step size and so the newly created particles with their zero velocity don't matter. But if we <em>only</em> have such particles?</p>
-<p>In that case, we can use the following approximation: If a particle starts at <picture><source srcset="form_2984_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v^{(0)}=0$" src="form_2984.png"/></picture>, then the update formula tells us that  </p><p class="formulaDsp">
-<picture><source srcset="form_2985_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>In that case, we can use the following approximation: If a particle starts at <picture><source srcset="form_3047_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v^{(0)}=0$" src="form_3047.png"/></picture>, then the update formula tells us that  </p><p class="formulaDsp">
+<picture><source srcset="form_3048_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   {\mathbf v}_i^{(1)} = \frac{e\nabla V^{(1)}}{m} \Delta t,
-\]" src="form_2985.png"/></picture>
+\]" src="form_3048.png"/></picture>
 </p>
 <p> and consequently  </p><p class="formulaDsp">
-<picture><source srcset="form_2986_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3049_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     \frac{{\mathbf x}_i^{(1)}-{\mathbf x}_i^{(0)}}{\Delta t} = {\mathbf v}_i^{(1)},
-\]" src="form_2986.png"/></picture>
+\]" src="form_3049.png"/></picture>
 </p>
 <p> which we can write as  </p><p class="formulaDsp">
-<picture><source srcset="form_2987_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3050_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     {\mathbf x}_i^{(1)} - {\mathbf x}_i^{(0)} = \frac{e\nabla V^{(1)}}{m} \Delta t^2.
-\]" src="form_2987.png"/></picture>
+\]" src="form_3050.png"/></picture>
 </p>
-<p> Not wanting to move a particle by more than <picture><source srcset="form_2988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 12 h_i$" src="form_2988.png"/></picture> then implies that we should choose the time step as  </p><p class="formulaDsp">
-<picture><source srcset="form_2989_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> Not wanting to move a particle by more than <picture><source srcset="form_3051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 12 h_i$" src="form_3051.png"/></picture> then implies that we should choose the time step as  </p><p class="formulaDsp">
+<picture><source srcset="form_3052_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \Delta t
   \le
   \min_i
   \sqrt{ \frac{h_i m}{e \|\nabla V^{(1)}\| }}.
-\]" src="form_2989.png"/></picture>
+\]" src="form_3052.png"/></picture>
 </p>
 <p> Using the same argument about neighboring cells possibly being smaller by a factor of two then leads to the final formula for time step zero:  </p><p class="formulaDsp">
-<picture><source srcset="form_2990_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3053_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \Delta t
   =
   \min_i
   \sqrt{ \frac{\frac 12 h_i m}{e \|\nabla V^{(1)}\| } }.
-\]" src="form_2990.png"/></picture>
+\]" src="form_3053.png"/></picture>
 </p>
-<p>Strictly speaking, we would have to evaluate the electric potential <picture><source srcset="form_2991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^{(1)}$" src="form_2991.png"/></picture> at the location of each particle, but a good enough approximation is to use the maximum of the values at the vertices of the respective cell. (Why the vertices and not the midpoint? Because the gradient of the solution of the Laplace equation, i.e., the electric field, is largest in corner singularities which are located at the vertices of cells.) This has the advantage that we can make good use of the <a class="el" href="classFEValues.html">FEValues</a> functionality which can recycle pre-computed material as long as the quadrature points are the same from one cell to the next.</p>
-<p>We could always run this kind of scheme to estimate the difference between <picture><source srcset="form_2992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v_i^{(n-1)}$" src="form_2992.png"/></picture> and <picture><source srcset="form_2993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v_i^{(n)}$" src="form_2993.png"/></picture>, but it relies on evaluating the electric field <picture><source srcset="form_1079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf E$" src="form_1079.png"/></picture> on each cell, and that is expensive. As a consequence, we will limit this approach to the very first time step.</p>
+<p>Strictly speaking, we would have to evaluate the electric potential <picture><source srcset="form_3054_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^{(1)}$" src="form_3054.png"/></picture> at the location of each particle, but a good enough approximation is to use the maximum of the values at the vertices of the respective cell. (Why the vertices and not the midpoint? Because the gradient of the solution of the Laplace equation, i.e., the electric field, is largest in corner singularities which are located at the vertices of cells.) This has the advantage that we can make good use of the <a class="el" href="classFEValues.html">FEValues</a> functionality which can recycle pre-computed material as long as the quadrature points are the same from one cell to the next.</p>
+<p>We could always run this kind of scheme to estimate the difference between <picture><source srcset="form_3055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v_i^{(n-1)}$" src="form_3055.png"/></picture> and <picture><source srcset="form_3056_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v_i^{(n)}$" src="form_3056.png"/></picture>, but it relies on evaluating the electric field <picture><source srcset="form_1115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf E$" src="form_1115.png"/></picture> on each cell, and that is expensive. As a consequence, we will limit this approach to the very first time step.</p>
 <p><a class="anchor" id="Spatialdiscretization"></a></p><h3>Spatial discretization</h3>
-<p>Having discussed the time discretization, the discussion of the spatial discretization is going to be short: We use quadratic finite elements, i.e., the space <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture>, to approximate the electric potential <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture>. The mesh is adapted a couple of times during the initial time step. All of this is entirely standard if you have read <a class="el" href="step_6.html">step-6</a>, and the implementation does not provide for any kind of surprise.</p>
+<p>Having discussed the time discretization, the discussion of the spatial discretization is going to be short: We use quadratic finite elements, i.e., the space <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture>, to approximate the electric potential <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture>. The mesh is adapted a couple of times during the initial time step. All of this is entirely standard if you have read <a class="el" href="step_6.html">step-6</a>, and the implementation does not provide for any kind of surprise.</p>
 <p><a class="anchor" id="Dealingwithparticlesprogrammatically"></a></p><h3>Dealing with particles programmatically</h3>
 <p>Adding and moving particles is, in practice, not very difficult in deal.II. To add one, the <code>create_particles()</code> function of this program simply uses a code snippet of the following form: </p><div class="fragment"><div class="line"><a class="code hl_class" href="classParticles_1_1Particle.html">Particles::Particle&lt;dim&gt;</a> new_particle;</div>
 <div class="line">new_particle.<a class="code hl_function" href="classParticles_1_1Particle.html#href_anchor">set_location</a>(location);</div>
@@ -289,7 +289,7 @@
 <div class="ttc" id="aclassParticles_1_1Particle_html_a57efa2034baca617ba3160ccfbbc7cd7"><div class="ttname"><a href="classParticles_1_1Particle.html#href_anchor">Particles::Particle::set_reference_location</a></div><div class="ttdeci">void set_reference_location(const Point&lt; dim &gt; &amp;new_reference_location)</div><div class="ttdef"><b>Definition</b> <a href="particle_8h_source.html#href_anchor">particle.h:542</a></div></div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_2.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_2.html	2024-03-17 21:57:44.247239264 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_2.html	2024-03-17 21:57:44.243239239 +0000
@@ -119,14 +119,14 @@
 </ol> </td> </tr> </table>
  <a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <dl class="section note"><dt>Note</dt><dd>The material presented here is also discussed in <a href="http://www.math.colostate.edu/~bangerth/videos.676.9.html">video lecture 9</a>. (All video lectures are also available <a href="http://www.math.colostate.edu/~bangerth/videos.html">here</a>.)</dd></dl>
-<p>The finite element method is based on approximating the solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> of a differential equation such as <picture><source srcset="form_2910_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u=f$" src="form_2910.png"/></picture> by a function <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> that is "piecewise" polynomial; that is, we subdivide the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> on which the equation is posed into small cells that in the documentation we will generally denote by the symbol <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. On each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, the approximating function <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> we seek is then a polynomial. (Or, strictly speaking, a function that is the image of a polynomial from a "reference cell", but let us not make things more complicated than necessary for now.)</p>
-<p>In the previous tutorial program (in <a class="el" href="step_1.html">step-1</a>), we showed how we should think of the subdivision of the domain into cells as a "mesh" represented by the <a class="el" href="classTriangulation.html">Triangulation</a> class, and how this looks like in code. In the current tutorial program, we now show how one represents piecewise polynomial functions through the concept of degrees of freedom defined on this mesh. For this example, we will use the lowest order ( <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture>) finite elements, that is the approximating function <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> we are looking for will be "bi-linear" on each quadrilateral cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> of the mesh. (They would be linear if we would work on triangles.)</p>
-<p>In practice, we represent the function as a linear combination of shape functions <picture><source srcset="form_2939_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(\mathbf x)$" src="form_2939.png"/></picture> with multipliers <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> that we call the "degrees of freedom". For the bi-linear functions we consider here, each of these shape functions and degrees of freedom is associated with a vertex of the mesh. Later examples will demonstrate higher order elements where degrees of freedom are not necessarily associated with vertices any more, but can be associated with edges, faces, or cells.</p>
-<p>The term "degree of freedom" is commonly used in the finite element community to indicate two slightly different, but related things. The first is that we'd like to represent the finite element solution as a linear combination of shape functions, in the form <picture><source srcset="form_2940_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x) = \sum_{j=0}^{N-1} U_j \varphi_j(\mathbf
-x)$" src="form_2940.png"/></picture>. Here, <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> is a vector of expansion coefficients. Because we don't know their values yet (we will compute them as the solution of a linear or nonlinear system), they are called "unknowns" or "degrees of freedom". The second meaning of the term can be explained as follows: A mathematical description of finite element problems is often to say that we are looking for a finite dimensional function <picture><source srcset="form_133_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h \in V_h$" src="form_133.png"/></picture> that satisfies some set of equations (e.g. <picture><source srcset="form_134_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(u_h,\varphi_h)=(f,\varphi_h)$" src="form_134.png"/></picture> for all test functions <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_h\in
-V_h$" src="form_2941.png"/></picture>). In other words, all we say here is that the solution needs to lie in some space <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture>. However, to actually solve this problem on a computer we need to choose a basis of this space; this is the set of shape functions <picture><source srcset="form_2939_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(\mathbf x)$" src="form_2939.png"/></picture> we have used above in the expansion of <picture><source srcset="form_1305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1305.png"/></picture> with coefficients <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture>. There are of course many bases of the space <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture>, but we will specifically choose the one that is described by the finite element functions that are traditionally defined locally on the cells of the mesh.</p>
+<p>The finite element method is based on approximating the solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> of a differential equation such as <picture><source srcset="form_2828_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u=f$" src="form_2828.png"/></picture> by a function <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> that is "piecewise" polynomial; that is, we subdivide the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> on which the equation is posed into small cells that in the documentation we will generally denote by the symbol <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. On each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, the approximating function <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> we seek is then a polynomial. (Or, strictly speaking, a function that is the image of a polynomial from a "reference cell", but let us not make things more complicated than necessary for now.)</p>
+<p>In the previous tutorial program (in <a class="el" href="step_1.html">step-1</a>), we showed how we should think of the subdivision of the domain into cells as a "mesh" represented by the <a class="el" href="classTriangulation.html">Triangulation</a> class, and how this looks like in code. In the current tutorial program, we now show how one represents piecewise polynomial functions through the concept of degrees of freedom defined on this mesh. For this example, we will use the lowest order ( <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture>) finite elements, that is the approximating function <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> we are looking for will be "bi-linear" on each quadrilateral cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> of the mesh. (They would be linear if we would work on triangles.)</p>
+<p>In practice, we represent the function as a linear combination of shape functions <picture><source srcset="form_3075_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(\mathbf x)$" src="form_3075.png"/></picture> with multipliers <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> that we call the "degrees of freedom". For the bi-linear functions we consider here, each of these shape functions and degrees of freedom is associated with a vertex of the mesh. Later examples will demonstrate higher order elements where degrees of freedom are not necessarily associated with vertices any more, but can be associated with edges, faces, or cells.</p>
+<p>The term "degree of freedom" is commonly used in the finite element community to indicate two slightly different, but related things. The first is that we'd like to represent the finite element solution as a linear combination of shape functions, in the form <picture><source srcset="form_3076_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x) = \sum_{j=0}^{N-1} U_j \varphi_j(\mathbf
+x)$" src="form_3076.png"/></picture>. Here, <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> is a vector of expansion coefficients. Because we don't know their values yet (we will compute them as the solution of a linear or nonlinear system), they are called "unknowns" or "degrees of freedom". The second meaning of the term can be explained as follows: A mathematical description of finite element problems is often to say that we are looking for a finite dimensional function <picture><source srcset="form_106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h \in V_h$" src="form_106.png"/></picture> that satisfies some set of equations (e.g. <picture><source srcset="form_107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(u_h,\varphi_h)=(f,\varphi_h)$" src="form_107.png"/></picture> for all test functions <picture><source srcset="form_3077_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_h\in
+V_h$" src="form_3077.png"/></picture>). In other words, all we say here is that the solution needs to lie in some space <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture>. However, to actually solve this problem on a computer we need to choose a basis of this space; this is the set of shape functions <picture><source srcset="form_3075_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(\mathbf x)$" src="form_3075.png"/></picture> we have used above in the expansion of <picture><source srcset="form_1249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)$" src="form_1249.png"/></picture> with coefficients <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture>. There are of course many bases of the space <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture>, but we will specifically choose the one that is described by the finite element functions that are traditionally defined locally on the cells of the mesh.</p>
 <p><a class="anchor" id="Enumeratingdegreesoffreedom"></a></p><h3>Enumerating degrees of freedom </h3>
-<p>Describing "degrees of freedom" in this context requires us to simply <em>enumerate</em> the basis functions of the space <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture>. For <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements this means simply enumerating the vertices of the mesh in some way, but for higher order elements, one also has to enumerate the shape functions that are associated with edges, faces, or cell interiors of the mesh. In other words, the enumeration of degrees of freedom is an entirely separate thing from the indices we use for vertices. The class that provides this enumeration of the basis functions of <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture> is called <a class="el" href="classDoFHandler.html">DoFHandler</a>.</p>
+<p>Describing "degrees of freedom" in this context requires us to simply <em>enumerate</em> the basis functions of the space <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture>. For <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements this means simply enumerating the vertices of the mesh in some way, but for higher order elements, one also has to enumerate the shape functions that are associated with edges, faces, or cell interiors of the mesh. In other words, the enumeration of degrees of freedom is an entirely separate thing from the indices we use for vertices. The class that provides this enumeration of the basis functions of <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture> is called <a class="el" href="classDoFHandler.html">DoFHandler</a>.</p>
 <p>Defining degrees of freedom ("DoF"s in short) on a mesh is, in practice, a rather simple task, since the library does all the work for you. Essentially, all you have to do is create a finite element object (from one of the many finite element classes deal.II already has, see for example the <a class="el" href="group__fe.html">Finite element space descriptions</a> documentation) and give it to a <a class="el" href="classDoFHandler.html">DoFHandler</a> object through the <a class="el" href="classDoFHandler.html#href_anchor">DoFHandler::distribute_dofs()</a> function ("distributing DoFs" is the term we use to describe the process of <em>enumerating</em> the basis functions as discussed above). The <a class="el" href="classDoFHandler.html">DoFHandler</a> is a class that knows which degrees of freedom live where, i.e., it can answer questions like "how many degrees of freedom are there globally" and "on this cell, give me the global indices of the shape functions that
 live here". This is the sort of information you need when determining how big your system matrix should be, and when copying the contributions of a single cell into the global matrix.</p>
 <p>The first task of the current program is therefore to take a mesh and a finite element, and enumerate the degrees of freedom. In the current context, this means simply giving each vertex of the mesh a DoF index. Once that has happened, we will output in a picture which vertex ended up with which DoF index. You can find the corresponding pictures in the <a href="#href_anchor">results section</a> of this tutorial.</p>
@@ -135,11 +135,11 @@
 <p>The next step would then be to compute a matrix and right hand side corresponding to a particular differential equation using this finite element and mesh. We will keep this step for the <a class="el" href="step_3.html">step-3</a> program and rather talk about one practical aspect of a finite element program, namely that finite element matrices are always very sparse: almost all entries in these matrices are zero.</p>
 <p>To be more precise, we say that a matrix is sparse if the number of nonzero entries <em>per row</em> in the matrix is bounded by a number that is independent of the overall number of degrees of freedom. For example, the simple 5-point stencil of a finite difference approximation of the Laplace equation leads to a sparse matrix since the number of nonzero entries per row is five, and therefore independent of the total size of the matrix. For more complicated problems &ndash; say, the Stokes problem of <a class="el" href="step_22.html">step-22</a> &ndash; and in particular in 3d, the number of entries per row may be several hundred. But the important point is that this number is independent of the overall size of the problem: If you refine the mesh, the maximal number of unknowns per row remains the same.</p>
 <p>Sparsity is one of the distinguishing feature of the finite element method compared to, say, approximating the solution of a partial differential equation using a Taylor expansion and matching coefficients, or using a Fourier basis.</p>
-<p>In practical terms, it is the sparsity of matrices that enables us to solve problems with millions or billions of unknowns. To understand this, note that a matrix with <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> rows, each with a fixed upper bound for the number of nonzero entries, requires <picture><source srcset="form_183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_183.png"/></picture> memory locations for storage, and a matrix-vector multiplication also requires only <picture><source srcset="form_183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_183.png"/></picture> operations. Consequently, if we had a linear solver that requires only a fixed number of matrix-vector multiplications to come up with the solution of a linear system with this matrix, then we would have a solver that can find the values of all <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> unknowns with optimal complexity, i.e., with a total of <picture><source srcset="form_183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_183.png"/></picture> operations. It is clear that this wouldn't be possible if the matrix were not sparse (because then the number of entries in the matrix would have to be <picture><source srcset="form_2942_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N^s)$" src="form_2942.png"/></picture> with some <picture><source srcset="form_2943_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s&gt;1$" src="form_2943.png"/></picture>, and doing a fixed number of matrix-vector products would take <picture><source srcset="form_2942_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N^s)$" src="form_2942.png"/></picture> operations), but it also requires very specialized solvers such as multigrid methods to satisfy the requirement that the solution requires only a fixed number of matrix-vector multiplications. We will frequently look at the question of what solver to use in the remaining programs of this tutorial.</p>
-<p>The sparsity is generated by the fact that finite element shape functions are defined <em>locally</em> on individual cells, rather than globally, and that the local differential operators in the bilinear form only couple shape functions whose support overlaps. (The "support" of a function is the area where it is nonzero. For the finite element method, the support of a shape function is generally the cells adjacent to the vertex, edge, or face it is defined on.) In other words, degrees of freedom <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> that are not defined on the same cell do not overlap, and consequently the matrix entry <picture><source srcset="form_794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij}$" src="form_794.png"/></picture> will be zero. (In some cases such as the Discontinuous Galerkin method, shape functions may also connect to neighboring cells through face integrals. But finite element methods do not generally couple shape functions beyond the immediate neighbors of a cell on which the function is defined.)</p>
+<p>In practical terms, it is the sparsity of matrices that enables us to solve problems with millions or billions of unknowns. To understand this, note that a matrix with <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> rows, each with a fixed upper bound for the number of nonzero entries, requires <picture><source srcset="form_157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_157.png"/></picture> memory locations for storage, and a matrix-vector multiplication also requires only <picture><source srcset="form_157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_157.png"/></picture> operations. Consequently, if we had a linear solver that requires only a fixed number of matrix-vector multiplications to come up with the solution of a linear system with this matrix, then we would have a solver that can find the values of all <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> unknowns with optimal complexity, i.e., with a total of <picture><source srcset="form_157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_157.png"/></picture> operations. It is clear that this wouldn't be possible if the matrix were not sparse (because then the number of entries in the matrix would have to be <picture><source srcset="form_3078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N^s)$" src="form_3078.png"/></picture> with some <picture><source srcset="form_3079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s&gt;1$" src="form_3079.png"/></picture>, and doing a fixed number of matrix-vector products would take <picture><source srcset="form_3078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N^s)$" src="form_3078.png"/></picture> operations), but it also requires very specialized solvers such as multigrid methods to satisfy the requirement that the solution requires only a fixed number of matrix-vector multiplications. We will frequently look at the question of what solver to use in the remaining programs of this tutorial.</p>
+<p>The sparsity is generated by the fact that finite element shape functions are defined <em>locally</em> on individual cells, rather than globally, and that the local differential operators in the bilinear form only couple shape functions whose support overlaps. (The "support" of a function is the area where it is nonzero. For the finite element method, the support of a shape function is generally the cells adjacent to the vertex, edge, or face it is defined on.) In other words, degrees of freedom <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> that are not defined on the same cell do not overlap, and consequently the matrix entry <picture><source srcset="form_794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij}$" src="form_794.png"/></picture> will be zero. (In some cases such as the Discontinuous Galerkin method, shape functions may also connect to neighboring cells through face integrals. But finite element methods do not generally couple shape functions beyond the immediate neighbors of a cell on which the function is defined.)</p>
 <p><a class="anchor" id="Howdegreesoffreedomareenumerated"></a></p><h3>How degrees of freedom are enumerated </h3>
 <p>By default, the <a class="el" href="classDoFHandler.html">DoFHandler</a> class enumerates degrees of freedom on a mesh using an algorithm that is difficult to describe and leads to results that do look right if you know what it is doing but otherwise appears rather random; consequently, the sparsity pattern is also not optimized for any particular purpose. To show this, the code below will demonstrate a simple way to output the "sparsity pattern" that corresponds to a <a class="el" href="classDoFHandler.html">DoFHandler</a>, i.e., an object that represents all of the potentially nonzero elements of a matrix one may build when discretizing a partial differential equation on a mesh and its <a class="el" href="classDoFHandler.html">DoFHandler</a>. This lack of structure in the sparsity pattern will be apparent from the pictures we show below.</p>
-<p>For most applications and algorithms, the exact way in which degrees of freedom are numbered does not matter. For example, the Conjugate Gradient method we use to solve linear systems does not care. On the other hand, some algorithms do care: in particular, some preconditioners such as SSOR will work better if they can walk through degrees of freedom in a particular order, and it would be nice if we could just sort them in such a way that SSOR can iterate through them from zero to <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> in this order. Other examples include computing incomplete LU or Cholesky factorizations, or if we care about the block structure of matrices (see <a class="el" href="step_20.html">step-20</a> for an example). deal.II therefore has algorithms that can re-enumerate degrees of freedom in particular ways in namespace <a class="el" href="namespaceDoFRenumbering.html">DoFRenumbering</a>. Renumbering can be thought of as choosing a different, permuted basis of the finite element space. The sparsity pattern and matrices that result from this renumbering are therefore also simply a permutation of rows and columns compared to the ones we would get without explicit renumbering.</p>
+<p>For most applications and algorithms, the exact way in which degrees of freedom are numbered does not matter. For example, the Conjugate Gradient method we use to solve linear systems does not care. On the other hand, some algorithms do care: in particular, some preconditioners such as SSOR will work better if they can walk through degrees of freedom in a particular order, and it would be nice if we could just sort them in such a way that SSOR can iterate through them from zero to <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> in this order. Other examples include computing incomplete LU or Cholesky factorizations, or if we care about the block structure of matrices (see <a class="el" href="step_20.html">step-20</a> for an example). deal.II therefore has algorithms that can re-enumerate degrees of freedom in particular ways in namespace <a class="el" href="namespaceDoFRenumbering.html">DoFRenumbering</a>. Renumbering can be thought of as choosing a different, permuted basis of the finite element space. The sparsity pattern and matrices that result from this renumbering are therefore also simply a permutation of rows and columns compared to the ones we would get without explicit renumbering.</p>
 <p>In the program below, we will use the algorithm of Cuthill and McKee to do so. We will show the sparsity pattern for both the original enumeration of degrees of freedom and of the renumbered version below, in the <a href="#href_anchor">results section</a>.</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
 <p>The first few includes are just like in the previous program, so do not require additional comments:</p>
@@ -277,7 +277,7 @@
 <div class="line">  </div>
 </div><!-- fragment --><p><a class="anchor" id="RenumberingofDoFs"></a> </p><h3>Renumbering of DoFs</h3>
 <p>In the sparsity pattern produced above, the nonzero entries extended quite far off from the diagonal. For some algorithms, for example for incomplete LU decompositions or Gauss-Seidel preconditioners, this is unfavorable, and we will show a simple way how to improve this situation.</p>
-<p>Remember that for an entry <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> in the matrix to be nonzero, the supports of the shape functions i and j needed to intersect (otherwise in the integral, the integrand would be zero everywhere since either the one or the other shape function is zero at some point). However, the supports of shape functions intersected only if they were adjacent to each other, so in order to have the nonzero entries clustered around the diagonal (where <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> equals <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>), we would like to have adjacent shape functions to be numbered with indices (DoF numbers) that differ not too much.</p>
+<p>Remember that for an entry <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> in the matrix to be nonzero, the supports of the shape functions i and j needed to intersect (otherwise in the integral, the integrand would be zero everywhere since either the one or the other shape function is zero at some point). However, the supports of shape functions intersected only if they were adjacent to each other, so in order to have the nonzero entries clustered around the diagonal (where <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> equals <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>), we would like to have adjacent shape functions to be numbered with indices (DoF numbers) that differ not too much.</p>
 <p>This can be accomplished by a simple front marching algorithm, where one starts at a given vertex and gives it the index zero. Then, its neighbors are numbered successively, making their indices close to the original one. Then, their neighbors, if not yet numbered, are numbered, and so on.</p>
 <p>One algorithm that adds a little bit of sophistication along these lines is the one by Cuthill and McKee. We will use it in the following function to renumber the degrees of freedom such that the resulting sparsity pattern is more localized around the diagonal. The only interesting part of the function is the first call to <code><a class="el" href="namespaceDoFRenumbering.html#href_anchor">DoFRenumbering::Cuthill_McKee</a></code>, the rest is essentially as before:</p>
 <div class="fragment"><div class="line">  <span class="keywordtype">void</span> renumber_dofs(<a class="code hl_class" href="classDoFHandler.html">DoFHandler&lt;2&gt;</a> &amp;dof_handler)</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_20.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_20.html	2024-03-17 21:57:44.323239733 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_20.html	2024-03-17 21:57:44.327239758 +0000
@@ -149,98 +149,98 @@
  <a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <dl class="section note"><dt>Note</dt><dd>The material presented here is also discussed in <a href="http://www.math.colostate.edu/~bangerth/videos.676.19.html">video lecture 19</a>, <a href="http://www.math.colostate.edu/~bangerth/videos.676.20.html">video lecture 20</a>, <a href="http://www.math.colostate.edu/~bangerth/videos.676.21.html">video lecture 21</a>. (All video lectures are also available <a href="http://www.math.colostate.edu/~bangerth/videos.html">here</a>.)</dd></dl>
 <p>This program is devoted to two aspects: the use of mixed finite elements &ndash; in particular Raviart-Thomas elements &ndash; and using block matrices to define solvers, preconditioners, and nested versions of those that use the substructure of the system matrix. The equation we are going to solve is again the Poisson equation, though with a matrix-valued coefficient:  </p><p class="formulaDsp">
-<picture><source srcset="form_3173_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3080_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   -\nabla \cdot K({\mathbf x}) \nabla p &amp;=&amp; f \qquad {\textrm{in}\ } \Omega, \\
   p &amp;=&amp; g \qquad {\textrm{on}\ }\partial\Omega.
-\end{eqnarray*}" src="form_3173.png"/></picture>
+\end{eqnarray*}" src="form_3080.png"/></picture>
 </p>
-<p> <picture><source srcset="form_3174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K({\mathbf x})$" src="form_3174.png"/></picture> is assumed to be uniformly positive definite, i.e., there is <picture><source srcset="form_3175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha&gt;0$" src="form_3175.png"/></picture> such that the eigenvalues <picture><source srcset="form_3176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_i({\mathbf x})$" src="form_3176.png"/></picture> of <picture><source srcset="form_3177_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K(x)$" src="form_3177.png"/></picture> satisfy <picture><source srcset="form_3178_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_i({\mathbf x})\ge \alpha$" src="form_3178.png"/></picture>. The use of the symbol <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> instead of the usual <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> for the solution variable will become clear in the next section.</p>
+<p> <picture><source srcset="form_3081_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K({\mathbf x})$" src="form_3081.png"/></picture> is assumed to be uniformly positive definite, i.e., there is <picture><source srcset="form_3082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha&gt;0$" src="form_3082.png"/></picture> such that the eigenvalues <picture><source srcset="form_3083_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_i({\mathbf x})$" src="form_3083.png"/></picture> of <picture><source srcset="form_3084_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K(x)$" src="form_3084.png"/></picture> satisfy <picture><source srcset="form_3085_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_i({\mathbf x})\ge \alpha$" src="form_3085.png"/></picture>. The use of the symbol <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> instead of the usual <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> for the solution variable will become clear in the next section.</p>
 <p>After discussing the equation and the formulation we are going to use to solve it, this introduction will cover the use of block matrices and vectors, the definition of solvers and preconditioners, and finally the actual test case we are going to solve.</p>
 <p>We are going to extend this tutorial program in <a class="el" href="step_21.html">step-21</a> to solve not only the mixed Laplace equation, but add another equation that describes the transport of a mixture of two fluids.</p>
 <p>The equations covered here fall into the class of vector-valued problems. A toplevel overview of this topic can be found in the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> module.</p>
 <p><a class="anchor" id="Theequations"></a></p><h3>The equations</h3>
 <p>In the form above, the Poisson equation (i.e., the Laplace equation with a nonzero right hand side) is generally considered a good model equation for fluid flow in porous media. Of course, one typically models fluid flow through the <a href="https://en.wikipedia.org/wiki/Navier%E2%80%93Stokes_equations">Navier-Stokes equations</a> or, if fluid velocities are slow or the viscosity is large, the <a href="https://en.wikipedia.org/wiki/Stokes_flow">Stokes equations</a> (which we cover in <a class="el" href="step_22.html">step-22</a>). In the first of these two models, the forces that act are inertia and viscous friction, whereas in the second it is only viscous friction &ndash; i.e., forces that one fluid particle exerts on a nearby one. This is appropriate if you have free flow in a large domain, say a pipe, a river, or in the air. On the other hand, if the fluid is confined in pores, then friction forces exerted by the pore walls on the fluid become more and more important and internal viscous friction becomes less and less important. Modeling this then first leads to the <a href="https://en.wikipedia.org/wiki/Darcy%27s_law#href_anchor">Brinkman model</a> if both effects are important, and in the limit of very small pores to the <a href="https://en.wikipedia.org/wiki/Darcy%27s_law">Darcy equations</a>. The latter is just a different name for the Poisson or Laplace equation, connotating it with the area to which one wants to apply it: slow flow in a porous medium. In essence it says that the velocity is proportional to the negative pressure gradient that drives the fluid through the porous medium.</p>
-<p>The Darcy equation models this pressure that drives the flow. (Because the solution variable is a pressure, we here use the name <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> instead of the name <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> more commonly used for the solution of partial differential equations.) Typical applications of this view of the Laplace equation are then modeling groundwater flow, or the flow of hydrocarbons in oil reservoirs. In these applications, <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is the permeability tensor, i.e., a measure for how much resistance the soil or rock matrix asserts on the fluid flow.</p>
+<p>The Darcy equation models this pressure that drives the flow. (Because the solution variable is a pressure, we here use the name <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> instead of the name <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> more commonly used for the solution of partial differential equations.) Typical applications of this view of the Laplace equation are then modeling groundwater flow, or the flow of hydrocarbons in oil reservoirs. In these applications, <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is the permeability tensor, i.e., a measure for how much resistance the soil or rock matrix asserts on the fluid flow.</p>
 <p>In the applications named above, a desirable feature for a numerical scheme is that it should be locally conservative, i.e., that whatever flows into a cell also flows out of it (or the difference is equal to the integral over the source terms over each cell, if the sources are nonzero). However, as it turns out, the usual discretizations of the Laplace equation (such as those used in <a class="el" href="step_3.html">step-3</a>, <a class="el" href="step_4.html">step-4</a>, or <a class="el" href="step_6.html">step-6</a>) do not satisfy this property. But, one can achieve this by choosing a different formulation of the problem and a particular combination of finite element spaces.</p>
 <p><a class="anchor" id="Formulationweakformanddiscreteproblem"></a></p><h3>Formulation, weak form, and discrete problem</h3>
-<p>To this end, one first introduces a second variable, called the velocity, <picture><source srcset="form_3182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u}=-K\nabla p$" src="form_3182.png"/></picture>. By its definition, the velocity is a vector in the negative direction of the pressure gradient, multiplied by the permeability tensor. If the permeability tensor is proportional to the unit matrix, this equation is easy to understand and intuitive: the higher the permeability, the higher the velocity; and the velocity is proportional to the gradient of the pressure, going from areas of high pressure to areas of low pressure (thus the negative sign).</p>
+<p>To this end, one first introduces a second variable, called the velocity, <picture><source srcset="form_3086_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u}=-K\nabla p$" src="form_3086.png"/></picture>. By its definition, the velocity is a vector in the negative direction of the pressure gradient, multiplied by the permeability tensor. If the permeability tensor is proportional to the unit matrix, this equation is easy to understand and intuitive: the higher the permeability, the higher the velocity; and the velocity is proportional to the gradient of the pressure, going from areas of high pressure to areas of low pressure (thus the negative sign).</p>
 <p>With this second variable, one then finds an alternative version of the Laplace equation, called the <em>mixed formulation</em>:  </p><p class="formulaDsp">
-<picture><source srcset="form_3183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   K^{-1} {\mathbf u} + \nabla p &amp;=&amp; 0 \qquad {\textrm{in}\ } \Omega, \\
   -{\textrm{div}}\ {\mathbf u} &amp;=&amp; -f \qquad {\textrm{in}\ }\Omega, \\
   p &amp;=&amp; g \qquad {\textrm{on}\ } \partial\Omega.
-\end{eqnarray*}" src="form_3183.png"/></picture>
+\end{eqnarray*}" src="form_3087.png"/></picture>
 </p>
-<p> Here, we have multiplied the equation defining the velocity <picture><source srcset="form_3184_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf
-u}$" src="form_3184.png"/></picture> by <picture><source srcset="form_3185_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K^{-1}$" src="form_3185.png"/></picture> because this makes the set of equations symmetric: one of the equations has the gradient, the second the negative divergence, and these two are of course adjoints of each other, resulting in a symmetric bilinear form and a consequently symmetric system matrix under the common assumption that <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is a symmetric tensor.</p>
+<p> Here, we have multiplied the equation defining the velocity <picture><source srcset="form_3088_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf
+u}$" src="form_3088.png"/></picture> by <picture><source srcset="form_3089_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K^{-1}$" src="form_3089.png"/></picture> because this makes the set of equations symmetric: one of the equations has the gradient, the second the negative divergence, and these two are of course adjoints of each other, resulting in a symmetric bilinear form and a consequently symmetric system matrix under the common assumption that <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is a symmetric tensor.</p>
 <p>The weak formulation of this problem is found by multiplying the two equations with test functions and integrating some terms by parts:  </p><p class="formulaDsp">
-<picture><source srcset="form_3186_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3090_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   A(\{{\mathbf u},p\},\{{\mathbf v},q\}) = F(\{{\mathbf v},q\}),
-\end{eqnarray*}" src="form_3186.png"/></picture>
+\end{eqnarray*}" src="form_3090.png"/></picture>
 </p>
 <p> where  </p><p class="formulaDsp">
-<picture><source srcset="form_3187_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3091_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   A(\{{\mathbf u},p\},\{{\mathbf v},q\})
   &amp;=&amp;
   ({\mathbf v}, K^{-1}{\mathbf u})_\Omega - ({\textrm{div}}\ {\mathbf v}, p)_\Omega
   - (q,{\textrm{div}}\ {\mathbf u})_\Omega
   \\
   F(\{{\mathbf v},q\}) &amp;=&amp; -(g,{\mathbf v}\cdot {\mathbf n})_{\partial\Omega} - (f,q)_\Omega.
-\end{eqnarray*}" src="form_3187.png"/></picture>
+\end{eqnarray*}" src="form_3091.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_3188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf n}$" src="form_3188.png"/></picture> is the outward normal vector at the boundary. Note how in this formulation, Dirichlet boundary values of the original problem are incorporated in the weak form.</p>
-<p>To be well-posed, we have to look for solutions and test functions in the space <picture><source srcset="form_3189_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H({\textrm{div}})=\{{\mathbf w}\in L^2(\Omega)^d:\ {\textrm{div}}\ {\mathbf w}\in L^2\}$" src="form_3189.png"/></picture> for <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture>, <picture><source srcset="form_321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v$" src="form_321.png"/></picture>, and <picture><source srcset="form_1209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2$" src="form_1209.png"/></picture> for <picture><source srcset="form_1814_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p,q$" src="form_1814.png"/></picture>. It is a well-known fact stated in almost every book on finite element theory that if one chooses discrete finite element spaces for the approximation of <picture><source srcset="form_3191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u},p$" src="form_3191.png"/></picture> inappropriately, then the resulting discrete problem is instable and the discrete solution will not converge to the exact solution. (Some details on the problem considered here &ndash; which falls in the class of "saddle-point problems" &ndash; can be found on the Wikipedia page on the <a href="https://en.wikipedia.org/wiki/Ladyzhenskaya%E2%80%93Babu%C5%A1ka%E2%80%93Brezzi_condition">Ladyzhenskaya-Babuska-Brezzi (LBB) condition</a>.)</p>
-<p>To overcome this, a number of different finite element pairs for <picture><source srcset="form_3191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u},p$" src="form_3191.png"/></picture> have been developed that lead to a stable discrete problem. One such pair is to use the Raviart-Thomas spaces <picture><source srcset="form_3193_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT(k)$" src="form_3193.png"/></picture> for the velocity <picture><source srcset="form_3194_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u}$" src="form_3194.png"/></picture> and discontinuous elements of class <picture><source srcset="form_3195_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DQ(k)$" src="form_3195.png"/></picture> for the pressure <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>. For details about these spaces, we refer in particular to the book on mixed finite element methods by Brezzi and Fortin, but many other books on the theory of finite elements, for example the classic book by Brenner and Scott, also state the relevant results. In any case, with appropriate choices of function spaces, the discrete formulation reads as follows: Find <picture><source srcset="form_3197_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf
-u}_h,p_h$" src="form_3197.png"/></picture> so that  </p><p class="formulaDsp">
-<picture><source srcset="form_3199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> Here, <picture><source srcset="form_3092_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf n}$" src="form_3092.png"/></picture> is the outward normal vector at the boundary. Note how in this formulation, Dirichlet boundary values of the original problem are incorporated in the weak form.</p>
+<p>To be well-posed, we have to look for solutions and test functions in the space <picture><source srcset="form_3093_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H({\textrm{div}})=\{{\mathbf w}\in L^2(\Omega)^d:\ {\textrm{div}}\ {\mathbf w}\in L^2\}$" src="form_3093.png"/></picture> for <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture>, <picture><source srcset="form_321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v$" src="form_321.png"/></picture>, and <picture><source srcset="form_1209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2$" src="form_1209.png"/></picture> for <picture><source srcset="form_1784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p,q$" src="form_1784.png"/></picture>. It is a well-known fact stated in almost every book on finite element theory that if one chooses discrete finite element spaces for the approximation of <picture><source srcset="form_3094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u},p$" src="form_3094.png"/></picture> inappropriately, then the resulting discrete problem is instable and the discrete solution will not converge to the exact solution. (Some details on the problem considered here &ndash; which falls in the class of "saddle-point problems" &ndash; can be found on the Wikipedia page on the <a href="https://en.wikipedia.org/wiki/Ladyzhenskaya%E2%80%93Babu%C5%A1ka%E2%80%93Brezzi_condition">Ladyzhenskaya-Babuska-Brezzi (LBB) condition</a>.)</p>
+<p>To overcome this, a number of different finite element pairs for <picture><source srcset="form_3094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u},p$" src="form_3094.png"/></picture> have been developed that lead to a stable discrete problem. One such pair is to use the Raviart-Thomas spaces <picture><source srcset="form_3095_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT(k)$" src="form_3095.png"/></picture> for the velocity <picture><source srcset="form_3096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u}$" src="form_3096.png"/></picture> and discontinuous elements of class <picture><source srcset="form_3097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DQ(k)$" src="form_3097.png"/></picture> for the pressure <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>. For details about these spaces, we refer in particular to the book on mixed finite element methods by Brezzi and Fortin, but many other books on the theory of finite elements, for example the classic book by Brenner and Scott, also state the relevant results. In any case, with appropriate choices of function spaces, the discrete formulation reads as follows: Find <picture><source srcset="form_3098_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf
+u}_h,p_h$" src="form_3098.png"/></picture> so that  </p><p class="formulaDsp">
+<picture><source srcset="form_3099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   A(\{{\mathbf u}_h,p_h\},\{{\mathbf v}_h,q_h\}) = F(\{{\mathbf v}_h,q_h\})
   \qquad\qquad \forall {\mathbf v}_h,q_h.
-\end{eqnarray*}" src="form_3199.png"/></picture>
+\end{eqnarray*}" src="form_3099.png"/></picture>
 </p>
-<p>Before continuing, let us briefly pause and show that the choice of function spaces above provides us with the desired local conservation property. In particular, because the pressure space consists of discontinuous piecewise polynomials, we can choose the test function <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> as the function that is equal to one on any given cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> and zero everywhere else. If we also choose <picture><source srcset="form_3200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}=0$" src="form_3200.png"/></picture> everywhere (remember that the weak form above has to hold for <em>all</em> discrete test functions <picture><source srcset="form_3204_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q,v$" src="form_3204.png"/></picture>), then putting these choices of test functions into the weak formulation above implies in particular that  </p><p class="formulaDsp">
-<picture><source srcset="form_3207_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>Before continuing, let us briefly pause and show that the choice of function spaces above provides us with the desired local conservation property. In particular, because the pressure space consists of discontinuous piecewise polynomials, we can choose the test function <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> as the function that is equal to one on any given cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> and zero everywhere else. If we also choose <picture><source srcset="form_3100_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}=0$" src="form_3100.png"/></picture> everywhere (remember that the weak form above has to hold for <em>all</em> discrete test functions <picture><source srcset="form_3101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q,v$" src="form_3101.png"/></picture>), then putting these choices of test functions into the weak formulation above implies in particular that  </p><p class="formulaDsp">
+<picture><source srcset="form_3102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   - (1,{\textrm{div}}\ {\mathbf u}_h)_K
   =
   -(1,f)_K,
-\end{eqnarray*}" src="form_3207.png"/></picture>
+\end{eqnarray*}" src="form_3102.png"/></picture>
 </p>
 <p> which we can of course write in more explicit form as  </p><p class="formulaDsp">
-<picture><source srcset="form_3210_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \int_K {\textrm{div}}\ {\mathbf u}_h
  =
   \int_K f.
-\end{eqnarray*}" src="form_3210.png"/></picture>
+\end{eqnarray*}" src="form_3103.png"/></picture>
 </p>
-<p> Applying the divergence theorem results in the fact that <picture><source srcset="form_3212_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf
-u}_h$" src="form_3212.png"/></picture> has to satisfy, for every choice of cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, the relationship  </p><p class="formulaDsp">
-<picture><source srcset="form_3213_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> Applying the divergence theorem results in the fact that <picture><source srcset="form_3104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf
+u}_h$" src="form_3104.png"/></picture> has to satisfy, for every choice of cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, the relationship  </p><p class="formulaDsp">
+<picture><source srcset="form_3105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \int_{\partial K} {\mathbf u}_h\cdot{\mathbf n}
   =
   \int_K f.
-\end{eqnarray*}" src="form_3213.png"/></picture>
+\end{eqnarray*}" src="form_3105.png"/></picture>
 </p>
-<p> If you now recall that <picture><source srcset="form_3194_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u}$" src="form_3194.png"/></picture> was the velocity, then the integral on the left is exactly the (discrete) flux across the boundary of the cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. The statement is then that the flux must be equal to the integral over the sources within <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. In particular, if there are no sources (i.e., <picture><source srcset="form_3214_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=0$" src="form_3214.png"/></picture> in <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>), then the statement is that <em>total</em> flux is zero, i.e., whatever flows into a cell must flow out of it through some other part of the cell boundary. This is what we call <em>local conservation</em> because it holds for every cell.</p>
-<p>On the other hand, the usual continuous <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_k$" src="form_165.png"/></picture> elements would not result in this kind of property when used for the pressure (as, for example, we do in <a class="el" href="step_43.html">step-43</a>) because one can not choose a discrete test function <picture><source srcset="form_3218_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q_h$" src="form_3218.png"/></picture> that is one on a cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> and zero everywhere else: It would be discontinuous and consequently not in the finite element space. (Strictly speaking, all we can say is that the proof above would not work for continuous elements. Whether these elements might still result in local conservation is a different question as one could think that a different kind of proof might still work; in reality, however, the property really does not hold.)</p>
+<p> If you now recall that <picture><source srcset="form_3096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u}$" src="form_3096.png"/></picture> was the velocity, then the integral on the left is exactly the (discrete) flux across the boundary of the cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. The statement is then that the flux must be equal to the integral over the sources within <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. In particular, if there are no sources (i.e., <picture><source srcset="form_3106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=0$" src="form_3106.png"/></picture> in <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>), then the statement is that <em>total</em> flux is zero, i.e., whatever flows into a cell must flow out of it through some other part of the cell boundary. This is what we call <em>local conservation</em> because it holds for every cell.</p>
+<p>On the other hand, the usual continuous <picture><source srcset="form_139_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_k$" src="form_139.png"/></picture> elements would not result in this kind of property when used for the pressure (as, for example, we do in <a class="el" href="step_43.html">step-43</a>) because one can not choose a discrete test function <picture><source srcset="form_3107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q_h$" src="form_3107.png"/></picture> that is one on a cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> and zero everywhere else: It would be discontinuous and consequently not in the finite element space. (Strictly speaking, all we can say is that the proof above would not work for continuous elements. Whether these elements might still result in local conservation is a different question as one could think that a different kind of proof might still work; in reality, however, the property really does not hold.)</p>
 <p><a class="anchor" id="Assemblingthelinearsystem"></a></p><h3>Assembling the linear system</h3>
-<p>The deal.II library (of course) implements Raviart-Thomas elements <picture><source srcset="form_3193_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT(k)$" src="form_3193.png"/></picture> of arbitrary order <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>, as well as discontinuous elements <picture><source srcset="form_3222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DG(k)$" src="form_3222.png"/></picture>. If we forget about their particular properties for a second, we then have to solve a discrete problem  </p><p class="formulaDsp">
-<picture><source srcset="form_3223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>The deal.II library (of course) implements Raviart-Thomas elements <picture><source srcset="form_3095_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT(k)$" src="form_3095.png"/></picture> of arbitrary order <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>, as well as discontinuous elements <picture><source srcset="form_3108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DG(k)$" src="form_3108.png"/></picture>. If we forget about their particular properties for a second, we then have to solve a discrete problem  </p><p class="formulaDsp">
+<picture><source srcset="form_3109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   A(x_h,w_h) = F(w_h),
-\end{eqnarray*}" src="form_3223.png"/></picture>
+\end{eqnarray*}" src="form_3109.png"/></picture>
 </p>
-<p> with the bilinear form and right hand side as stated above, and <picture><source srcset="form_3224_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_h=\{{\mathbf u}_h,p_h\}$" src="form_3224.png"/></picture>, <picture><source srcset="form_3225_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_h=\{{\mathbf v}_h,q_h\}$" src="form_3225.png"/></picture>. Both <picture><source srcset="form_3226_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_h$" src="form_3226.png"/></picture> and <picture><source srcset="form_3227_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_h$" src="form_3227.png"/></picture> are from the space <picture><source srcset="form_3228_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_h=RT(k)\times DQ(k)$" src="form_3228.png"/></picture>, where <picture><source srcset="form_3193_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT(k)$" src="form_3193.png"/></picture> is itself a space of <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture>-dimensional functions to accommodate for the fact that the flow velocity is vector-valued. The necessary question then is: how do we do this in a program?</p>
-<p>Vector-valued elements have already been discussed in previous tutorial programs, the first time and in detail in <a class="el" href="step_8.html">step-8</a>. The main difference there was that the vector-valued space <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture> is uniform in all its components: the <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture> components of the displacement vector are all equal and from the same function space. What we could therefore do was to build <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture> as the outer product of the <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture> times the usual <picture><source srcset="form_3234_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q(1)$" src="form_3234.png"/></picture> finite element space, and by this make sure that all our shape functions have only a single non-zero vector component. Instead of dealing with vector-valued shape functions, all we did in <a class="el" href="step_8.html">step-8</a> was therefore to look at the (scalar) only non-zero component and use the <code>fe.system_to_component_index(i).first</code> call to figure out which component this actually is.</p>
-<p>This doesn't work with Raviart-Thomas elements: following from their construction to satisfy certain regularity properties of the space <picture><source srcset="form_3238_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H({\textrm{div}})$" src="form_3238.png"/></picture>, the shape functions of <picture><source srcset="form_3193_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT(k)$" src="form_3193.png"/></picture> are usually nonzero in all their vector components at once. For this reason, were <code>fe.system_to_component_index(i).first</code> applied to determine the only nonzero component of shape function <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>, an exception would be generated. What we really need to do is to get at <em>all</em> vector components of a shape function. In deal.II diction, we call such finite elements <em>non-primitive</em>, whereas finite elements that are either scalar or for which every vector-valued shape function is nonzero only in a single vector component are called <em>primitive</em>.</p>
+<p> with the bilinear form and right hand side as stated above, and <picture><source srcset="form_3110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_h=\{{\mathbf u}_h,p_h\}$" src="form_3110.png"/></picture>, <picture><source srcset="form_3111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_h=\{{\mathbf v}_h,q_h\}$" src="form_3111.png"/></picture>. Both <picture><source srcset="form_3112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_h$" src="form_3112.png"/></picture> and <picture><source srcset="form_3113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_h$" src="form_3113.png"/></picture> are from the space <picture><source srcset="form_3114_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X_h=RT(k)\times DQ(k)$" src="form_3114.png"/></picture>, where <picture><source srcset="form_3095_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT(k)$" src="form_3095.png"/></picture> is itself a space of <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture>-dimensional functions to accommodate for the fact that the flow velocity is vector-valued. The necessary question then is: how do we do this in a program?</p>
+<p>Vector-valued elements have already been discussed in previous tutorial programs, the first time and in detail in <a class="el" href="step_8.html">step-8</a>. The main difference there was that the vector-valued space <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture> is uniform in all its components: the <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture> components of the displacement vector are all equal and from the same function space. What we could therefore do was to build <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture> as the outer product of the <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture> times the usual <picture><source srcset="form_3115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q(1)$" src="form_3115.png"/></picture> finite element space, and by this make sure that all our shape functions have only a single non-zero vector component. Instead of dealing with vector-valued shape functions, all we did in <a class="el" href="step_8.html">step-8</a> was therefore to look at the (scalar) only non-zero component and use the <code>fe.system_to_component_index(i).first</code> call to figure out which component this actually is.</p>
+<p>This doesn't work with Raviart-Thomas elements: following from their construction to satisfy certain regularity properties of the space <picture><source srcset="form_3116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H({\textrm{div}})$" src="form_3116.png"/></picture>, the shape functions of <picture><source srcset="form_3095_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT(k)$" src="form_3095.png"/></picture> are usually nonzero in all their vector components at once. For this reason, were <code>fe.system_to_component_index(i).first</code> applied to determine the only nonzero component of shape function <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>, an exception would be generated. What we really need to do is to get at <em>all</em> vector components of a shape function. In deal.II diction, we call such finite elements <em>non-primitive</em>, whereas finite elements that are either scalar or for which every vector-valued shape function is nonzero only in a single vector component are called <em>primitive</em>.</p>
 <p>So what do we have to do for non-primitive elements? To figure this out, let us go back in the tutorial programs, almost to the very beginnings. There, we learned that we use the <code><a class="el" href="classFEValues.html">FEValues</a></code> class to determine the values and gradients of shape functions at quadrature points. For example, we would call <code>fe_values.shape_value(i,q_point)</code> to obtain the value of the <code>i</code>th shape function on the quadrature point with number <code>q_point</code>. Later, in <a class="el" href="step_8.html">step-8</a> and other tutorial programs, we learned that this function call also works for vector-valued shape functions (of primitive finite elements), and that it returned the value of the only non-zero component of shape function <code>i</code> at quadrature point <code>q_point</code>.</p>
-<p>For non-primitive shape functions, this is clearly not going to work: there is no single non-zero vector component of shape function <code>i</code>, and the call to <code>fe_values.shape_value(i,q_point)</code> would consequently not make much sense. However, deal.II offers a second function call, <code>fe_values.shape_value_component(i,q_point,comp)</code> that returns the value of the <code>comp</code>th vector component of shape function <code>i</code> at quadrature point <code>q_point</code>, where <code>comp</code> is an index between zero and the number of vector components of the present finite element; for example, the element we will use to describe velocities and pressures is going to have <picture><source srcset="form_3246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim+1$" src="form_3246.png"/></picture> components. It is worth noting that this function call can also be used for primitive shape functions: it will simply return zero for all components except one; for non-primitive shape functions, it will in general return a non-zero value for more than just one component.</p>
-<p>We could now attempt to rewrite the bilinear form above in terms of vector components. For example, in 2d, the first term could be rewritten like this (note that <picture><source srcset="form_3247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0=x_0, u_1=x_1, p=x_2$" src="form_3247.png"/></picture>):  </p><p class="formulaDsp">
-<picture><source srcset="form_3249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>For non-primitive shape functions, this is clearly not going to work: there is no single non-zero vector component of shape function <code>i</code>, and the call to <code>fe_values.shape_value(i,q_point)</code> would consequently not make much sense. However, deal.II offers a second function call, <code>fe_values.shape_value_component(i,q_point,comp)</code> that returns the value of the <code>comp</code>th vector component of shape function <code>i</code> at quadrature point <code>q_point</code>, where <code>comp</code> is an index between zero and the number of vector components of the present finite element; for example, the element we will use to describe velocities and pressures is going to have <picture><source srcset="form_3117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim+1$" src="form_3117.png"/></picture> components. It is worth noting that this function call can also be used for primitive shape functions: it will simply return zero for all components except one; for non-primitive shape functions, it will in general return a non-zero value for more than just one component.</p>
+<p>We could now attempt to rewrite the bilinear form above in terms of vector components. For example, in 2d, the first term could be rewritten like this (note that <picture><source srcset="form_3118_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0=x_0, u_1=x_1, p=x_2$" src="form_3118.png"/></picture>):  </p><p class="formulaDsp">
+<picture><source srcset="form_3119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   ({\mathbf u}_h^i, K^{-1}{\mathbf u}_h^j)
   =
   &amp;\left((x_h^i)_0, K^{-1}_{00} (x_h^j)_0\right) +
    \left((x_h^i)_0, K^{-1}_{01} (x_h^j)_1\right) + \\
   &amp;\left((x_h^i)_1, K^{-1}_{10} (x_h^j)_0\right) +
    \left((x_h^i)_1, K^{-1}_{11} (x_h^j)_1\right).
-\end{eqnarray*}" src="form_3249.png"/></picture>
+\end{eqnarray*}" src="form_3119.png"/></picture>
 </p>
 <p> If we implemented this, we would get code like this:</p>
 <div class="fragment"><div class="line"><span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> q=0; q&lt;n_q_points; ++q)</div>
@@ -263,7 +263,7 @@
 <div class="line">                            fe_values.shape_value_component(j,q,1)</div>
 <div class="line">                           ) *</div>
 <div class="line">                           fe_values.JxW(q);</div>
-</div><!-- fragment --><p>This is, at best, tedious, error prone, and not dimension independent. There are obvious ways to make things dimension independent, but in the end, the code is simply not pretty. What would be much nicer is if we could simply extract the <picture><source srcset="form_3194_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u}$" src="form_3194.png"/></picture> and <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> components of a shape function <picture><source srcset="form_3254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_h^i$" src="form_3254.png"/></picture>. In the program we do that in the following way:</p>
+</div><!-- fragment --><p>This is, at best, tedious, error prone, and not dimension independent. There are obvious ways to make things dimension independent, but in the end, the code is simply not pretty. What would be much nicer is if we could simply extract the <picture><source srcset="form_3096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u}$" src="form_3096.png"/></picture> and <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> components of a shape function <picture><source srcset="form_3120_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_h^i$" src="form_3120.png"/></picture>. In the program we do that in the following way:</p>
 <div class="fragment"><div class="line"><span class="keyword">const</span> <a class="code hl_struct" href="structFEValuesExtractors_1_1Vector.html">FEValuesExtractors::Vector</a> velocities (0);</div>
 <div class="line"><span class="keyword">const</span> <a class="code hl_struct" href="structFEValuesExtractors_1_1Scalar.html">FEValuesExtractors::Scalar</a> pressure (dim);</div>
 <div class="line"> </div>
@@ -285,7 +285,7 @@
 <div class="ttc" id="astructFEValuesExtractors_1_1Scalar_html"><div class="ttname"><a href="structFEValuesExtractors_1_1Scalar.html">FEValuesExtractors::Scalar</a></div><div class="ttdef"><b>Definition</b> <a href="fe__values__extractors_8h_source.html#href_anchor">fe_values_extractors.h:96</a></div></div>
 <div class="ttc" id="astructFEValuesExtractors_1_1Vector_html"><div class="ttname"><a href="structFEValuesExtractors_1_1Vector.html">FEValuesExtractors::Vector</a></div><div class="ttdef"><b>Definition</b> <a href="fe__values__extractors_8h_source.html#href_anchor">fe_values_extractors.h:151</a></div></div>
 </div><!-- fragment --><p>This is, in fact, not only the first term of the bilinear form, but the whole thing (sans boundary contributions).</p>
-<p>What this piece of code does is, given an <code>fe_values</code> object, to extract the values of the first <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture> components of shape function <code>i</code> at quadrature points <code>q</code>, that is the velocity components of that shape function. Put differently, if we write shape functions <picture><source srcset="form_3254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_h^i$" src="form_3254.png"/></picture> as the tuple <picture><source srcset="form_3257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{{\mathbf u}_h^i,p_h^i\}$" src="form_3257.png"/></picture>, then the function returns the velocity part of this tuple. Note that the velocity is of course a <code>dim</code>-dimensional tensor, and that the function returns a corresponding object. Similarly, where we subscript with the pressure extractor, we extract the scalar pressure component. The whole mechanism is described in more detail in the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> module.</p>
+<p>What this piece of code does is, given an <code>fe_values</code> object, to extract the values of the first <picture><source srcset="form_486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dim$" src="form_486.png"/></picture> components of shape function <code>i</code> at quadrature points <code>q</code>, that is the velocity components of that shape function. Put differently, if we write shape functions <picture><source srcset="form_3120_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_h^i$" src="form_3120.png"/></picture> as the tuple <picture><source srcset="form_3121_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{{\mathbf u}_h^i,p_h^i\}$" src="form_3121.png"/></picture>, then the function returns the velocity part of this tuple. Note that the velocity is of course a <code>dim</code>-dimensional tensor, and that the function returns a corresponding object. Similarly, where we subscript with the pressure extractor, we extract the scalar pressure component. The whole mechanism is described in more detail in the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> module.</p>
 <p>In practice, it turns out that we can do a bit better if we evaluate the shape functions, their gradients and divergences only once per outermost loop, and store the result, as this saves us a few otherwise repeated computations (it is possible to save even more repeated operations by calculating all relevant quantities in advance and then only inserting the results in the actual loop, see <a class="el" href="step_22.html">step-22</a> for a realization of that approach). The final result then looks like this, working in every space dimension:</p>
 <div class="fragment"><div class="line"><span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;cell : dof_handler.active_cell_iterators())</div>
 <div class="line">  {</div>
@@ -323,7 +323,7 @@
 <div class="line">        }</div>
 <div class="ttc" id="aclassTensor_html"><div class="ttname"><a href="classTensor.html">Tensor</a></div><div class="ttdef"><b>Definition</b> <a href="tensor_8h_source.html#href_anchor">tensor.h:516</a></div></div>
 </div><!-- fragment --><p>This very closely resembles the form in which we have originally written down the bilinear form and right hand side.</p>
-<p>There is one final term that we have to take care of: the right hand side contained the term <picture><source srcset="form_3261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(g,{\mathbf v}\cdot {\mathbf n})_{\partial\Omega}$" src="form_3261.png"/></picture>, constituting the weak enforcement of pressure boundary conditions. We have already seen in <a class="el" href="step_7.html">step-7</a> how to deal with face integrals: essentially exactly the same as with domain integrals, except that we have to use the <a class="el" href="classFEFaceValues.html">FEFaceValues</a> class instead of <code><a class="el" href="classFEValues.html">FEValues</a></code>. To compute the boundary term we then simply have to loop over all boundary faces and integrate there. The mechanism works in the same way as above, i.e. the extractor classes also work on <a class="el" href="classFEFaceValues.html">FEFaceValues</a> objects:</p>
+<p>There is one final term that we have to take care of: the right hand side contained the term <picture><source srcset="form_3122_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(g,{\mathbf v}\cdot {\mathbf n})_{\partial\Omega}$" src="form_3122.png"/></picture>, constituting the weak enforcement of pressure boundary conditions. We have already seen in <a class="el" href="step_7.html">step-7</a> how to deal with face integrals: essentially exactly the same as with domain integrals, except that we have to use the <a class="el" href="classFEFaceValues.html">FEFaceValues</a> class instead of <code><a class="el" href="classFEValues.html">FEValues</a></code>. To compute the boundary term we then simply have to loop over all boundary faces and integrate there. The mechanism works in the same way as above, i.e. the extractor classes also work on <a class="el" href="classFEFaceValues.html">FEFaceValues</a> objects:</p>
 <div class="fragment"><div class="line"><span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;face : cell-&gt;face_iterators())</div>
 <div class="line">  if (face-&gt;at_boundary())</div>
 <div class="line">    {</div>
@@ -341,15 +341,15 @@
 </div><!-- fragment --><p>You will find the exact same code as above in the sources for the present program. We will therefore not comment much on it below.</p>
 <p><a class="anchor" id="Linearsolversandpreconditioners"></a></p><h3>Linear solvers and preconditioners</h3>
 <p>After assembling the linear system we are faced with the task of solving it. The problem here is that the matrix possesses two undesirable properties:</p><ul>
-<li>It is <a href="https://en.wikipedia.org/wiki/Definiteness_of_a_matrix">indefinite</a>, i.e., it has both positive and negative eigenvalues. We don't want to prove this property here, but note that this is true for all matrices of the form <picture><source srcset="form_3263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(\begin{array}{cc} M &amp; B \\ B^T &amp; 0 \end{array}\right)$" src="form_3263.png"/></picture> such as the one here where <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> is positive definite.</li>
-<li>The matrix has a zero block at the bottom right (there is no term in the bilinear form that couples the pressure <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> with the pressure test function <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>).</li>
+<li>It is <a href="https://en.wikipedia.org/wiki/Definiteness_of_a_matrix">indefinite</a>, i.e., it has both positive and negative eigenvalues. We don't want to prove this property here, but note that this is true for all matrices of the form <picture><source srcset="form_3123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(\begin{array}{cc} M &amp; B \\ B^T &amp; 0 \end{array}\right)$" src="form_3123.png"/></picture> such as the one here where <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> is positive definite.</li>
+<li>The matrix has a zero block at the bottom right (there is no term in the bilinear form that couples the pressure <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> with the pressure test function <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>).</li>
 </ul>
 <p>At least it is symmetric, but the first issue above still means that the Conjugate Gradient method is not going to work since it is only applicable to problems in which the matrix is symmetric and positive definite. We would have to resort to other iterative solvers instead, such as MinRes, SymmLQ, or GMRES, that can deal with indefinite systems. However, then the next problem immediately surfaces: Due to the zero block, there are zeros on the diagonal and none of the usual, "simple" preconditioners (Jacobi, SSOR) will work as they require division by diagonal elements.</p>
 <p>For the matrix sizes we expect to run with this program, the by far simplest approach would be to just use a direct solver (in particular, the <a class="el" href="classSparseDirectUMFPACK.html">SparseDirectUMFPACK</a> class that is bundled with deal.II). <a class="el" href="step_29.html">step-29</a> goes this route and shows that solving <em>any</em> linear system can be done in just 3 or 4 lines of code.</p>
 <p>But then, this is a tutorial: We teach how to do things. Consequently, in the following, we will introduce some techniques that can be used in cases like these. Namely, we will consider the linear system as not consisting of one large matrix and vectors, but we will want to decompose matrices into <em>blocks</em> that correspond to the individual operators that appear in the system. We note that the resulting solver is not optimal &ndash; there are much better ways to efficiently compute the system, for example those explained in the results section of <a class="el" href="step_22.html">step-22</a> or the one we use in <a class="el" href="step_43.html">step-43</a> for a problem similar to the current one. Here, our goal is simply to introduce new solution techniques and how they can be implemented in deal.II.</p>
 <p><a class="anchor" id="SolvingusingtheSchurcomplement"></a></p><h4>Solving using the Schur complement</h4>
 <p>In view of the difficulties using standard solvers and preconditioners mentioned above, let us take another look at the matrix. If we sort our degrees of freedom so that all velocity come before all pressure variables, then we can subdivide the linear system <picture><source srcset="form_57_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=b$" src="form_57.png"/></picture> into the following blocks:  </p><p class="formulaDsp">
-<picture><source srcset="form_3267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3124_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \left(\begin{array}{cc}
     M &amp; B \\ B^T &amp; 0
   \end{array}\right)
@@ -360,26 +360,26 @@
   \left(\begin{array}{cc}
     F \\ G
   \end{array}\right),
-\end{eqnarray*}" src="form_3267.png"/></picture>
+\end{eqnarray*}" src="form_3124.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U,P$" src="form_101.png"/></picture> are the values of velocity and pressure degrees of freedom, respectively, <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> is the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> on the velocity space, <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B^T$" src="form_103.png"/></picture> corresponds to the negative divergence operator, and <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is its transpose and corresponds to the gradient.</p>
+<p> where <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U,P$" src="form_93.png"/></picture> are the values of velocity and pressure degrees of freedom, respectively, <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> is the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> on the velocity space, <picture><source srcset="form_96_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B^T$" src="form_96.png"/></picture> corresponds to the negative divergence operator, and <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is its transpose and corresponds to the gradient.</p>
 <p>By block elimination, we can then re-order this system in the following way (multiply the first row of the system by <picture><source srcset="form_342_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B^TM^{-1}$" src="form_342.png"/></picture> and then subtract the second row from it):  </p><p class="formulaDsp">
-<picture><source srcset="form_3268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3125_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   B^TM^{-1}B P &amp;=&amp; B^TM^{-1} F - G, \\
/usr/share/doc/packages/dealii/doxygen/deal.II/step_21.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_21.html	2024-03-17 21:57:44.423240351 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_21.html	2024-03-17 21:57:44.423240351 +0000
@@ -155,113 +155,113 @@
 <p>The equations covered here are an extension of the material already covered in <a class="el" href="step_20.html">step-20</a>. In particular, they fall into the class of vector-valued problems. A toplevel overview of this topic can be found in the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> module.</p>
 <p><a class="anchor" id="Thetwophaseflowproblem"></a></p><h3>The two phase flow problem</h3>
 <p>Modeling of two phase flow in porous media is important for both environmental remediation and the management of petroleum and groundwater reservoirs. Practical situations involving two phase flow include the dispersal of a nonaqueous phase liquid in an aquifer, or the joint movement of a mixture of fluids such as oil and water in a reservoir. Simulation models, if they are to provide realistic predictions, must accurately account for these effects.</p>
-<p>To derive the governing equations, consider two phase flow in a reservoir <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> under the assumption that the movement of fluids is dominated by viscous effects; i.e. we neglect the effects of gravity, compressibility, and capillary pressure. Porosity will be considered to be constant. We will denote variables referring to either of the two phases using subscripts <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture> and <picture><source srcset="form_565_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$o$" src="form_565.png"/></picture>, short for water and oil. The derivation of the equations holds for other pairs of fluids as well, however.</p>
+<p>To derive the governing equations, consider two phase flow in a reservoir <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> under the assumption that the movement of fluids is dominated by viscous effects; i.e. we neglect the effects of gravity, compressibility, and capillary pressure. Porosity will be considered to be constant. We will denote variables referring to either of the two phases using subscripts <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture> and <picture><source srcset="form_565_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$o$" src="form_565.png"/></picture>, short for water and oil. The derivation of the equations holds for other pairs of fluids as well, however.</p>
 <p>The velocity with which molecules of each of the two phases move is determined by Darcy's law that states that the velocity is proportional to the pressure gradient:  </p><p class="formulaDsp">
-<picture><source srcset="form_3080_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \mathbf{u}_{j}
   =
   -\frac{k_{rj}(S)}{\mu_{j}} \mathbf{K} \cdot \nabla p
-\end{eqnarray*}" src="form_3080.png"/></picture>
+\end{eqnarray*}" src="form_3156.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_3081_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}_{j}$" src="form_3081.png"/></picture> is the velocity of phase <picture><source srcset="form_3082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=o,w$" src="form_3082.png"/></picture>, <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is the permeability tensor, <picture><source srcset="form_3083_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{rj}$" src="form_3083.png"/></picture> is the relative permeability of phase <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>, <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> is the pressure and <picture><source srcset="form_3084_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu_{j}$" src="form_3084.png"/></picture> is the viscosity of phase <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>. Finally, <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> is the saturation (volume fraction), i.e. a function with values between 0 and 1 indicating the composition of the mixture of fluids. In general, the coefficients <picture><source srcset="form_3085_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K, k_{rj}, \mu$" src="form_3085.png"/></picture> may be spatially dependent variables, and we will always treat them as non-constant functions in the following.</p>
+<p> where <picture><source srcset="form_3157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}_{j}$" src="form_3157.png"/></picture> is the velocity of phase <picture><source srcset="form_3158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=o,w$" src="form_3158.png"/></picture>, <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is the permeability tensor, <picture><source srcset="form_3159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{rj}$" src="form_3159.png"/></picture> is the relative permeability of phase <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>, <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> is the pressure and <picture><source srcset="form_3160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu_{j}$" src="form_3160.png"/></picture> is the viscosity of phase <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>. Finally, <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> is the saturation (volume fraction), i.e. a function with values between 0 and 1 indicating the composition of the mixture of fluids. In general, the coefficients <picture><source srcset="form_3161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K, k_{rj}, \mu$" src="form_3161.png"/></picture> may be spatially dependent variables, and we will always treat them as non-constant functions in the following.</p>
 <p>We combine Darcy's law with the statement of conservation of mass for each phase,  </p><p class="formulaDsp">
-<picture><source srcset="form_3086_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \textrm{div}\ \mathbf{u}_{j} = q_j,
-\]" src="form_3086.png"/></picture>
+\]" src="form_3162.png"/></picture>
 </p>
 <p> with a source term for each phase. By summing over the two phases, we can express the governing equations in terms of the so-called pressure equation:  </p><p class="formulaDsp">
-<picture><source srcset="form_3087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 - \nabla \cdot (\mathbf{K}\lambda(S) \nabla p)= q.
-\end{eqnarray*}" src="form_3087.png"/></picture>
+\end{eqnarray*}" src="form_3163.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> is the sum source term, and  </p><p class="formulaDsp">
-<picture><source srcset="form_3088_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> Here, <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> is the sum source term, and  </p><p class="formulaDsp">
+<picture><source srcset="form_3164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \lambda(S) = \frac{k_{rw}(S)}{\mu_{w}}+\frac{k_{ro}(S)}{\mu_{o}}
-\]" src="form_3088.png"/></picture>
+\]" src="form_3164.png"/></picture>
 </p>
 <p> is the total mobility.</p>
 <p>So far, this looks like an ordinary stationary, Poisson-like equation that we can solve right away with the techniques of the first few tutorial programs (take a look at <a class="el" href="step_6.html">step-6</a>, for example, for something very similar). However, we have not said anything yet about the saturation, which of course is going to change as the fluids move around.</p>
 <p>The second part of the equations is the description of the dynamics of the saturation, i.e., how the relative concentration of the two fluids changes with time. The saturation equation for the displacing fluid (water) is given by the following conservation law:  </p><p class="formulaDsp">
-<picture><source srcset="form_3089_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   S_{t} + \nabla \cdot (F(S) \mathbf{u}) = q_{w},
-\end{eqnarray*}" src="form_3089.png"/></picture>
+\end{eqnarray*}" src="form_3165.png"/></picture>
 </p>
 <p> which can be rewritten by using the product rule of the divergence operator in the previous equation:  </p><p class="formulaDsp">
-<picture><source srcset="form_3090_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   S_{t} + F(S) \left[\nabla \cdot \mathbf{u}\right]
         + \mathbf{u} \cdot \left[ \nabla F(S)\right]
   = S_{t} + F(S) q + \mathbf{u} \cdot \nabla F(S) = q_{w}.
-\end{eqnarray*}" src="form_3090.png"/></picture>
+\end{eqnarray*}" src="form_3166.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_3091_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q=\nabla\cdot \mathbf{u}$" src="form_3091.png"/></picture> is the total influx introduced above, and <picture><source srcset="form_3092_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q_{w}$" src="form_3092.png"/></picture> is the flow rate of the displacing fluid (water). These two are related to the fractional flow <picture><source srcset="form_3093_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(S)$" src="form_3093.png"/></picture> in the following way:  </p><p class="formulaDsp">
-<picture><source srcset="form_3094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> Here, <picture><source srcset="form_3167_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q=\nabla\cdot \mathbf{u}$" src="form_3167.png"/></picture> is the total influx introduced above, and <picture><source srcset="form_3168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q_{w}$" src="form_3168.png"/></picture> is the flow rate of the displacing fluid (water). These two are related to the fractional flow <picture><source srcset="form_3169_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(S)$" src="form_3169.png"/></picture> in the following way:  </p><p class="formulaDsp">
+<picture><source srcset="form_3170_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   q_{w} = F(S) q,
-\]" src="form_3094.png"/></picture>
+\]" src="form_3170.png"/></picture>
 </p>
 <p> where the fractional flow is often parameterized via the (heuristic) expression  </p><p class="formulaDsp">
-<picture><source srcset="form_3095_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3171_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   F(S)
   =
   \frac{k_{rw}(S)/\mu_{w}}{k_{rw}(S)/\mu_{w} + k_{ro}(S)/\mu_{o}}.
-\]" src="form_3095.png"/></picture>
+\]" src="form_3171.png"/></picture>
 </p>
 <p> Putting it all together yields the saturation equation in the following, advected form:  </p><p class="formulaDsp">
-<picture><source srcset="form_3096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3172_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   S_{t} + \mathbf{u} \cdot \nabla F(S) = 0,
-\end{eqnarray*}" src="form_3096.png"/></picture>
+\end{eqnarray*}" src="form_3172.png"/></picture>
 </p>
 <p> where <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> is the total velocity  </p><p class="formulaDsp">
-<picture><source srcset="form_3097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3173_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf{u} =
   \mathbf{u}_{o} + \mathbf{u}_{w} = -\lambda(S) \mathbf{K}\cdot\nabla p.
-\]" src="form_3097.png"/></picture>
+\]" src="form_3173.png"/></picture>
 </p>
-<p> Note that the advection equation contains the term <picture><source srcset="form_3098_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} \cdot \nabla
-F(S)$" src="form_3098.png"/></picture> rather than <picture><source srcset="form_3099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} \cdot \nabla S$" src="form_3099.png"/></picture> to indicate that the saturation is not simply transported along; rather, since the two phases move with different velocities, the saturation can actually change even in the advected coordinate system. To see this, rewrite <picture><source srcset="form_3100_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} \cdot \nabla F(S)
-= \mathbf{u} F'(S) \cdot \nabla S$" src="form_3100.png"/></picture> to observe that the <em>actual</em> velocity with which the phase with saturation <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> is transported is <picture><source srcset="form_3101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u F'(S)$" src="form_3101.png"/></picture> whereas the other phase is transported at velocity <picture><source srcset="form_3102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u (1-F'(S))$" src="form_3102.png"/></picture>. <picture><source srcset="form_3093_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(S)$" src="form_3093.png"/></picture> is consequently often referred to as the <em>fractional flow</em>.</p>
+<p> Note that the advection equation contains the term <picture><source srcset="form_3174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} \cdot \nabla
+F(S)$" src="form_3174.png"/></picture> rather than <picture><source srcset="form_3175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} \cdot \nabla S$" src="form_3175.png"/></picture> to indicate that the saturation is not simply transported along; rather, since the two phases move with different velocities, the saturation can actually change even in the advected coordinate system. To see this, rewrite <picture><source srcset="form_3176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} \cdot \nabla F(S)
+= \mathbf{u} F'(S) \cdot \nabla S$" src="form_3176.png"/></picture> to observe that the <em>actual</em> velocity with which the phase with saturation <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> is transported is <picture><source srcset="form_3177_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u F'(S)$" src="form_3177.png"/></picture> whereas the other phase is transported at velocity <picture><source srcset="form_3178_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u (1-F'(S))$" src="form_3178.png"/></picture>. <picture><source srcset="form_3169_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(S)$" src="form_3169.png"/></picture> is consequently often referred to as the <em>fractional flow</em>.</p>
 <p>In summary, what we get are the following two equations:  </p><p class="formulaDsp">
-<picture><source srcset="form_3103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3179_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   - \nabla \cdot (\mathbf{K}\lambda(S) \nabla p) &amp;=&amp; q
   \qquad \textrm{in}\ \Omega\times[0,T],
   \\
   S_{t} + \mathbf{u} \cdot \nabla F(S) &amp;=&amp; 0
   \qquad \textrm{in}\ \Omega\times[0,T].
-\end{eqnarray*}" src="form_3103.png"/></picture>
+\end{eqnarray*}" src="form_3179.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_3104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p=p(\mathbf x, t), S=S(\mathbf x, t)$" src="form_3104.png"/></picture> are now time dependent functions: while at every time instant the flow field is in equilibrium with the pressure (i.e. we neglect dynamic accelerations), the saturation is transported along with the flow and therefore changes over time, in turn affected the flow field again through the dependence of the first equation on <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>.</p>
+<p> Here, <picture><source srcset="form_3180_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p=p(\mathbf x, t), S=S(\mathbf x, t)$" src="form_3180.png"/></picture> are now time dependent functions: while at every time instant the flow field is in equilibrium with the pressure (i.e. we neglect dynamic accelerations), the saturation is transported along with the flow and therefore changes over time, in turn affected the flow field again through the dependence of the first equation on <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>.</p>
 <p>This set of equations has a peculiar character: one of the two equations has a time derivative, the other one doesn't. This corresponds to the character that the pressure and velocities are coupled through an instantaneous constraint, whereas the saturation evolves over finite time scales.</p>
-<p>Such systems of equations are called Differential Algebraic Equations (DAEs), since one of the equations is a differential equation, the other is not (at least not with respect to the time variable) and is therefore an "algebraic" equation. (The notation comes from the field of ordinary differential equations, where everything that does not have derivatives with respect to the time variable is necessarily an algebraic equation.) This class of equations contains pretty well-known cases: for example, the time dependent Stokes and Navier-Stokes equations (where the algebraic constraint is that the divergence of the flow field, <picture><source srcset="form_3105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{div}\ \mathbf u$" src="form_3105.png"/></picture>, must be zero) as well as the time dependent Maxwell equations (here, the algebraic constraint is that the divergence of the electric displacement field equals the charge density, <picture><source srcset="form_3106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{div}\ \mathbf D = \rho$" src="form_3106.png"/></picture> and that the divergence of the magnetic flux density is zero: <picture><source srcset="form_3107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{div}\ \mathbf
-B = 0$" src="form_3107.png"/></picture>); even the quasistatic model of <a class="el" href="step_18.html">step-18</a> falls into this category. We will see that the different character of the two equations will inform our discretization strategy for the two equations.</p>
+<p>Such systems of equations are called Differential Algebraic Equations (DAEs), since one of the equations is a differential equation, the other is not (at least not with respect to the time variable) and is therefore an "algebraic" equation. (The notation comes from the field of ordinary differential equations, where everything that does not have derivatives with respect to the time variable is necessarily an algebraic equation.) This class of equations contains pretty well-known cases: for example, the time dependent Stokes and Navier-Stokes equations (where the algebraic constraint is that the divergence of the flow field, <picture><source srcset="form_3181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{div}\ \mathbf u$" src="form_3181.png"/></picture>, must be zero) as well as the time dependent Maxwell equations (here, the algebraic constraint is that the divergence of the electric displacement field equals the charge density, <picture><source srcset="form_3182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{div}\ \mathbf D = \rho$" src="form_3182.png"/></picture> and that the divergence of the magnetic flux density is zero: <picture><source srcset="form_3183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{div}\ \mathbf
+B = 0$" src="form_3183.png"/></picture>); even the quasistatic model of <a class="el" href="step_18.html">step-18</a> falls into this category. We will see that the different character of the two equations will inform our discretization strategy for the two equations.</p>
 <p><a class="anchor" id="Timediscretization"></a></p><h3>Time discretization</h3>
 <p>In the reservoir simulation community, it is common to solve the equations derived above by going back to the first order, mixed formulation. To this end, we re-introduce the total velocity <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> and write the equations in the following form:  </p><p class="formulaDsp">
-<picture><source srcset="form_3108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3184_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \mathbf{u}+\mathbf{K}\lambda(S) \nabla p&amp;=&amp;0 \\
   \nabla \cdot\mathbf{u} &amp;=&amp; q \\
   S_{t} + \mathbf{u} \cdot \nabla F(S) &amp;=&amp; 0.
-\end{eqnarray*}" src="form_3108.png"/></picture>
+\end{eqnarray*}" src="form_3184.png"/></picture>
 </p>
 <p> This formulation has the additional benefit that we do not have to express the total velocity <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> appearing in the transport equation as a function of the pressure, but can rather take the primary variable for it. Given the saddle point structure of the first two equations and their similarity to the mixed Laplace formulation we have introduced in <a class="el" href="step_20.html">step-20</a>, it will come as no surprise that we will use a mixed discretization again.</p>
 <p>But let's postpone this for a moment. The first business we have with these equations is to think about the time discretization. In reservoir simulation, there is a rather standard algorithm that we will use here. It first solves the pressure using an implicit equation, then the saturation using an explicit time stepping scheme. The algorithm is called IMPES for IMplicit Pressure Explicit Saturation and was first proposed a long time ago: by Sheldon et al. in 1959 and Stone and Gardner in 1961 (J. W. Sheldon, B. Zondek and W. T. Cardwell: <em>One-dimensional, incompressible, non-capillary, two-phase fluid flow in a porous medium</em>, Trans. SPE AIME, 216 (1959), pp. 290-296; H. L. Stone and A. O. Gardner Jr: <em>Analysis of gas-cap or dissolved-gas reservoirs</em>, Trans. SPE AIME, 222 (1961), pp. 92-104). In a slightly modified form, this algorithm can be written as follows: for each time step, solve  </p><p class="formulaDsp">
-<picture><source srcset="form_3109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3185_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \mathbf{u}^{n+1}+\mathbf{K}\lambda(S^n) \nabla p^{n+1}&amp;=&amp;0 \\
   \nabla \cdot\mathbf{u}^{n+1} &amp;=&amp; q^{n+1} \\
   \frac {S^{n+1}-S^n}{\triangle t} + \mathbf{u}^{n+1} \cdot \nabla F(S^n) &amp;=&amp; 0,
-\end{eqnarray*}" src="form_3109.png"/></picture>
+\end{eqnarray*}" src="form_3185.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_3110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\triangle t$" src="form_3110.png"/></picture> is the length of a time step. Note how we solve the implicit pressure-velocity system that only depends on the previously computed saturation <picture><source srcset="form_3111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^n$" src="form_3111.png"/></picture>, and then do an explicit time step for <picture><source srcset="form_3112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^{n+1}$" src="form_3112.png"/></picture> that only depends on the previously known <picture><source srcset="form_3111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^n$" src="form_3111.png"/></picture> and the just computed <picture><source srcset="form_3113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}^{n+1}$" src="form_3113.png"/></picture>. This way, we never have to iterate for the nonlinearities of the system as we would have if we used a fully implicit method. (In a more modern perspective, this should be seen as an "operator
+<p> where <picture><source srcset="form_3186_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\triangle t$" src="form_3186.png"/></picture> is the length of a time step. Note how we solve the implicit pressure-velocity system that only depends on the previously computed saturation <picture><source srcset="form_3187_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^n$" src="form_3187.png"/></picture>, and then do an explicit time step for <picture><source srcset="form_3188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^{n+1}$" src="form_3188.png"/></picture> that only depends on the previously known <picture><source srcset="form_3187_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^n$" src="form_3187.png"/></picture> and the just computed <picture><source srcset="form_3189_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}^{n+1}$" src="form_3189.png"/></picture>. This way, we never have to iterate for the nonlinearities of the system as we would have if we used a fully implicit method. (In a more modern perspective, this should be seen as an "operator
 splitting" method. <a class="el" href="step_58.html">step-58</a> has a long description of the idea behind this.)</p>
-<p>We can then state the problem in weak form as follows, by multiplying each equation with test functions <picture><source srcset="form_321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v$" src="form_321.png"/></picture>, <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture>, and <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture> and integrating terms by parts:  </p><p class="formulaDsp">
-<picture><source srcset="form_3114_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>We can then state the problem in weak form as follows, by multiplying each equation with test functions <picture><source srcset="form_321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v$" src="form_321.png"/></picture>, <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture>, and <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture> and integrating terms by parts:  </p><p class="formulaDsp">
+<picture><source srcset="form_3190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \left((\mathbf{K}\lambda(S^n))^{-1} \mathbf{u}^{n+1},\mathbf v\right)_\Omega -
   (p^{n+1}, \nabla\cdot\mathbf v)_\Omega &amp;=&amp;
   - (p^{n+1}, \mathbf v)_{\partial\Omega}
   \\
   (\nabla \cdot\mathbf{u}^{n+1}, \phi)_\Omega &amp;=&amp; (q^{n+1},\phi)_\Omega
-\end{eqnarray*}" src="form_3114.png"/></picture>
+\end{eqnarray*}" src="form_3190.png"/></picture>
 </p>
-<p> Note that in the first term, we have to prescribe the pressure <picture><source srcset="form_3115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p^{n+1}$" src="form_3115.png"/></picture> on the boundary <picture><source srcset="form_3116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3116.png"/></picture> as boundary values for our problem. <picture><source srcset="form_2957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n$" src="form_2957.png"/></picture> denotes the unit outward normal vector to <picture><source srcset="form_3117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial K$" src="form_3117.png"/></picture>, as usual.</p>
+<p> Note that in the first term, we have to prescribe the pressure <picture><source srcset="form_3191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p^{n+1}$" src="form_3191.png"/></picture> on the boundary <picture><source srcset="form_3192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3192.png"/></picture> as boundary values for our problem. <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n$" src="form_3020.png"/></picture> denotes the unit outward normal vector to <picture><source srcset="form_3193_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial K$" src="form_3193.png"/></picture>, as usual.</p>
 <p>For the saturation equation, we obtain after integrating by parts  </p><p class="formulaDsp">
-<picture><source srcset="form_3118_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3194_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (S^{n+1}, \sigma)_\Omega
   -
   \triangle t
@@ -273,10 +273,10 @@
   \right\}
   &amp;=&amp;
   (S^n,\sigma)_\Omega.
-\end{eqnarray*}" src="form_3118.png"/></picture>
+\end{eqnarray*}" src="form_3194.png"/></picture>
 </p>
-<p> Using the fact that <picture><source srcset="form_3119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \cdot \mathbf{u}^{n+1}=q^{n+1}$" src="form_3119.png"/></picture>, we can rewrite the cell term to get an equation as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_3120_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> Using the fact that <picture><source srcset="form_3195_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \cdot \mathbf{u}^{n+1}=q^{n+1}$" src="form_3195.png"/></picture>, we can rewrite the cell term to get an equation as follows:  </p><p class="formulaDsp">
+<picture><source srcset="form_3196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (S^{n+1}, \sigma)_\Omega
   -
   \triangle t
@@ -289,26 +289,26 @@
   &amp;=&amp;
   (S^n,\sigma)_\Omega +
   \triangle t \sum_K  \left(F(S^n) q^{n+1}, \sigma\right)_K.
-\end{eqnarray*}" src="form_3120.png"/></picture>
+\end{eqnarray*}" src="form_3196.png"/></picture>
 </p>
 <p> We introduce an object of type <a class="el" href="classDiscreteTime.html">DiscreteTime</a> in order to keep track of the current value of time and time step in the code. This class encapsulates many complexities regarding adjusting time step size and stopping at a specified final time.</p>
 <p><a class="anchor" id="Spacediscretization"></a></p><h3>Space discretization</h3>
-<p>In each time step, we then apply the mixed finite method of <a class="el" href="step_20.html">step-20</a> to the velocity and pressure. To be well-posed, we choose Raviart-Thomas spaces <picture><source srcset="form_3121_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT_{k}$" src="form_3121.png"/></picture> for <picture><source srcset="form_2520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2520.png"/></picture> and discontinuous elements of class <picture><source srcset="form_3122_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_{k}$" src="form_3122.png"/></picture> for <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>. For the saturation, we will also choose <picture><source srcset="form_3122_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_{k}$" src="form_3122.png"/></picture> spaces.</p>
+<p>In each time step, we then apply the mixed finite method of <a class="el" href="step_20.html">step-20</a> to the velocity and pressure. To be well-posed, we choose Raviart-Thomas spaces <picture><source srcset="form_3197_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT_{k}$" src="form_3197.png"/></picture> for <picture><source srcset="form_2515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2515.png"/></picture> and discontinuous elements of class <picture><source srcset="form_3198_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_{k}$" src="form_3198.png"/></picture> for <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>. For the saturation, we will also choose <picture><source srcset="form_3198_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$DGQ_{k}$" src="form_3198.png"/></picture> spaces.</p>
 <p>Since we have discontinuous spaces, we have to think about how to evaluate terms on the interfaces between cells, since discontinuous functions are not really defined there. In particular, we have to give a meaning to the last term on the left hand side of the saturation equation. To this end, let us define that we want to evaluate it in the following sense:  </p><p class="formulaDsp">
-<picture><source srcset="form_3123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   &amp;&amp;\left(F(S^n) (\mathbf n \cdot \mathbf{u}^{n+1}), \sigma\right)_{\partial K}
   \\
   &amp;&amp;\qquad =
   \left(F(S^n_+) (\mathbf n \cdot \mathbf{u}^{n+1}_+), \sigma\right)_{\partial K_+}
   +
   \left(F(S^n_-) (\mathbf n \cdot \mathbf{u}^{n+1}_-), \sigma\right)_{\partial K_-},
-\end{eqnarray*}" src="form_3123.png"/></picture>
+\end{eqnarray*}" src="form_3199.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_3124_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial K_{-} \dealcoloneq \{x\in \partial K, \mathbf{u}(x) \cdot \mathbf{n}&lt;0\}$" src="form_3124.png"/></picture> denotes the inflow boundary and <picture><source srcset="form_3125_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial K_{+} \dealcoloneq \{\partial K \setminus
-\partial K_{-}\}$" src="form_3125.png"/></picture> is the outflow part of the boundary. The quantities <picture><source srcset="form_3126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_+,\mathbf{u}_+$" src="form_3126.png"/></picture> then correspond to the values of these variables on the present cell, whereas <picture><source srcset="form_3127_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_-,\mathbf{u}_-$" src="form_3127.png"/></picture> (needed on the inflow part of the boundary of <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>) are quantities taken from the neighboring cell. Some more context on discontinuous element techniques and evaluation of fluxes can also be found in <a class="el" href="step_12.html">step-12</a> and <a class="el" href="step_12b.html">step-12b</a>.</p>
+<p> where <picture><source srcset="form_3200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial K_{-} \dealcoloneq \{x\in \partial K, \mathbf{u}(x) \cdot \mathbf{n}&lt;0\}$" src="form_3200.png"/></picture> denotes the inflow boundary and <picture><source srcset="form_3201_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial K_{+} \dealcoloneq \{\partial K \setminus
+\partial K_{-}\}$" src="form_3201.png"/></picture> is the outflow part of the boundary. The quantities <picture><source srcset="form_3202_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_+,\mathbf{u}_+$" src="form_3202.png"/></picture> then correspond to the values of these variables on the present cell, whereas <picture><source srcset="form_3203_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_-,\mathbf{u}_-$" src="form_3203.png"/></picture> (needed on the inflow part of the boundary of <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>) are quantities taken from the neighboring cell. Some more context on discontinuous element techniques and evaluation of fluxes can also be found in <a class="el" href="step_12.html">step-12</a> and <a class="el" href="step_12b.html">step-12b</a>.</p>
 <p><a class="anchor" id="Linearsolvers"></a></p><h3>Linear solvers</h3>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_22.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_22.html	2024-03-17 21:57:44.519240944 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_22.html	2024-03-17 21:57:44.523240969 +0000
@@ -167,36 +167,36 @@
  This material is based upon work partly supported by the National Science Foundation under Award No. EAR-0426271 and The California Institute of Technology. Any opinions, findings, and conclusions or recommendations expressed in this publication are those of the author and do not necessarily reflect the views of the National Science Foundation or of The California Institute of Technology. </em></p>
 <p><a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p>This program deals with the Stokes system of equations which reads as follows in non-dimensionalized form:  </p><p class="formulaDsp">
-<picture><source srcset="form_3384_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   -2\; \textrm{div}\; \varepsilon(\textbf{u}) + \nabla p &amp;=&amp; \textbf{f},
   \\
   -\textrm{div}\; \textbf{u} &amp;=&amp; 0,
-\end{eqnarray*}" src="form_3384.png"/></picture>
+\end{eqnarray*}" src="form_3249.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf u$" src="form_303.png"/></picture> denotes the velocity of a fluid, <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> is its pressure, <picture><source srcset="form_3385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf f$" src="form_3385.png"/></picture> are external forces, and  <picture><source srcset="form_3386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\textbf{u})= \nabla^s{\textbf{u}}= \frac 12 \left[
-(\nabla \textbf{u}) + (\nabla \textbf{u})^T\right]$" src="form_3386.png"/></picture> is the rank-2 tensor of symmetrized gradients; a component-wise definition of it is <picture><source srcset="form_3387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\textbf{u})_{ij}=\frac
-12\left(\frac{\partial u_i}{\partial x_j} + \frac{\partial u_j}{\partial x_i}\right)$" src="form_3387.png"/></picture>.</p>
+<p> where <picture><source srcset="form_303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf u$" src="form_303.png"/></picture> denotes the velocity of a fluid, <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> is its pressure, <picture><source srcset="form_3250_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf f$" src="form_3250.png"/></picture> are external forces, and  <picture><source srcset="form_3251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\textbf{u})= \nabla^s{\textbf{u}}= \frac 12 \left[
+(\nabla \textbf{u}) + (\nabla \textbf{u})^T\right]$" src="form_3251.png"/></picture> is the rank-2 tensor of symmetrized gradients; a component-wise definition of it is <picture><source srcset="form_3252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\textbf{u})_{ij}=\frac
+12\left(\frac{\partial u_i}{\partial x_j} + \frac{\partial u_j}{\partial x_i}\right)$" src="form_3252.png"/></picture>.</p>
 <p>The Stokes equations describe the steady-state motion of a slow-moving, viscous fluid such as honey, rocks in the earth mantle, or other cases where inertia does not play a significant role. If a fluid is moving fast enough that inertia forces are significant compared to viscous friction, the Stokes equations are no longer valid; taking into account inertia effects then leads to the nonlinear Navier-Stokes equations. However, in this tutorial program, we will focus on the simpler Stokes system.</p>
 <p>Note that when deriving the more general compressible Navier-Stokes equations, the diffusion is modeled as the divergence of the stress tensor  </p><p class="formulaDsp">
-<picture><source srcset="form_3389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \tau = - \mu \left(2\varepsilon(\textbf{u}) - \frac{2}{3}\nabla \cdot \textbf{u} I\right),
-\end{eqnarray*}" src="form_3389.png"/></picture>
+\end{eqnarray*}" src="form_3253.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_3066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_3066.png"/></picture> is the viscosity of the fluid. With the assumption of <picture><source srcset="form_3390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu=1$" src="form_3390.png"/></picture> (assume constant viscosity and non-dimensionalize the equation by dividing out <picture><source srcset="form_3066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_3066.png"/></picture>) and assuming incompressibility ( <picture><source srcset="form_3391_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{div}\; \textbf{u}=0$" src="form_3391.png"/></picture>), we arrive at the formulation from above:  </p><p class="formulaDsp">
-<picture><source srcset="form_3392_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> where <picture><source srcset="form_2994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_2994.png"/></picture> is the viscosity of the fluid. With the assumption of <picture><source srcset="form_3254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu=1$" src="form_3254.png"/></picture> (assume constant viscosity and non-dimensionalize the equation by dividing out <picture><source srcset="form_2994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_2994.png"/></picture>) and assuming incompressibility ( <picture><source srcset="form_3255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{div}\; \textbf{u}=0$" src="form_3255.png"/></picture>), we arrive at the formulation from above:  </p><p class="formulaDsp">
+<picture><source srcset="form_3256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \textrm{div}\; \tau = -2\textrm{div}\;\varepsilon(\textbf{u}).
-\end{eqnarray*}" src="form_3392.png"/></picture>
+\end{eqnarray*}" src="form_3256.png"/></picture>
 </p>
-<p> A different formulation uses the Laplace operator ( <picture><source srcset="form_3393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\triangle \textbf{u}$" src="form_3393.png"/></picture>) instead of the symmetrized gradient. A big difference here is that the different components of the velocity do not couple. If you assume additional regularity of the solution <picture><source srcset="form_3394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}$" src="form_3394.png"/></picture> (second partial derivatives exist and are continuous), the formulations are equivalent:  </p><p class="formulaDsp">
-<picture><source srcset="form_3395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> A different formulation uses the Laplace operator ( <picture><source srcset="form_3257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\triangle \textbf{u}$" src="form_3257.png"/></picture>) instead of the symmetrized gradient. A big difference here is that the different components of the velocity do not couple. If you assume additional regularity of the solution <picture><source srcset="form_3258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}$" src="form_3258.png"/></picture> (second partial derivatives exist and are continuous), the formulations are equivalent:  </p><p class="formulaDsp">
+<picture><source srcset="form_3259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \textrm{div}\; \tau
   = -2\textrm{div}\;\varepsilon(\textbf{u})
   = -\triangle \textbf{u} - \nabla \cdot (\nabla\textbf{u})^T
   = -\triangle \textbf{u}.
-\end{eqnarray*}" src="form_3395.png"/></picture>
+\end{eqnarray*}" src="form_3259.png"/></picture>
 </p>
-<p> This is because the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th entry of <picture><source srcset="form_3396_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \cdot (\nabla\textbf{u})^T$" src="form_3396.png"/></picture> is given by:  </p><p class="formulaDsp">
-<picture><source srcset="form_3397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> This is because the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th entry of <picture><source srcset="form_3260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \cdot (\nabla\textbf{u})^T$" src="form_3260.png"/></picture> is given by:  </p><p class="formulaDsp">
+<picture><source srcset="form_3261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 [\nabla \cdot (\nabla\textbf{u})^T]_i
 = \sum_j \frac{\partial}{\partial x_j} [(\nabla\textbf{u})^T]_{i,j}
 = \sum_j \frac{\partial}{\partial x_j} [(\nabla\textbf{u})]_{j,i}
@@ -205,14 +205,14 @@
 = \frac{\partial}{\partial x_i}
   \underbrace{\textrm{div}\; \textbf{u}}_{=0}
 = 0.
-\end{eqnarray*}" src="form_3397.png"/></picture>
+\end{eqnarray*}" src="form_3261.png"/></picture>
 </p>
 <p> If you can not assume the above mentioned regularity, or if your viscosity is not a constant, the equivalence no longer holds. Therefore, we decided to stick with the more physically accurate symmetric tensor formulation in this tutorial.</p>
 <p>To be well-posed, we will have to add boundary conditions to the equations. What boundary conditions are readily possible here will become clear once we discuss the weak form of the equations.</p>
 <p>The equations covered here fall into the class of vector-valued problems. A toplevel overview of this topic can be found in the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> module.</p>
 <p><a class="anchor" id="Weakform"></a></p><h3>Weak form</h3>
 <p>The weak form of the equations is obtained by writing it in vector form as  </p><p class="formulaDsp">
-<picture><source srcset="form_3398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \begin{pmatrix}
     {-2\; \textrm{div}\; \varepsilon(\textbf{u}) + \nabla p}
     \\
@@ -224,23 +224,23 @@
   \\
   0
   \end{pmatrix},
-\end{eqnarray*}" src="form_3398.png"/></picture>
+\end{eqnarray*}" src="form_3262.png"/></picture>
 </p>
-<p> forming the dot product from the left with a vector-valued test function <picture><source srcset="form_3399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi = \begin{pmatrix}\textbf{v} \\ q\end{pmatrix}$" src="form_3399.png"/></picture> and integrating over the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, yielding the following set of equations:  </p><p class="formulaDsp">
-<picture><source srcset="form_3400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> forming the dot product from the left with a vector-valued test function <picture><source srcset="form_3263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi = \begin{pmatrix}\textbf{v} \\ q\end{pmatrix}$" src="form_3263.png"/></picture> and integrating over the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, yielding the following set of equations:  </p><p class="formulaDsp">
+<picture><source srcset="form_3264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (\mathrm v,
    -2\; \textrm{div}\; \varepsilon(\textbf{u}) + \nabla p)_{\Omega}
   -
   (q,\textrm{div}\; \textbf{u})_{\Omega}
   =
   (\textbf{v}, \textbf{f})_\Omega,
-\end{eqnarray*}" src="form_3400.png"/></picture>
+\end{eqnarray*}" src="form_3264.png"/></picture>
 </p>
-<p> which has to hold for all test functions <picture><source srcset="form_3401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi = \begin{pmatrix}\textbf{v}
-\\ q\end{pmatrix}$" src="form_3401.png"/></picture>.</p>
+<p> which has to hold for all test functions <picture><source srcset="form_3265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi = \begin{pmatrix}\textbf{v}
+\\ q\end{pmatrix}$" src="form_3265.png"/></picture>.</p>
 <p>A generally good rule of thumb is that if one <em>can</em> reduce how many derivatives are taken on any variable in the formulation, then one <em>should</em> in fact do that using integration by parts. (This is motivated by the theory of <a href="https://en.wikipedia.org/wiki/Partial_differential_equation">partial differential equations</a>, and in particular the difference between strong and <a href="https://en.wikipedia.org/wiki/Weak_solution">weak solutions</a>.) We have already done that for the Laplace equation, where we have integrated the second derivative by parts to obtain the weak formulation that has only one derivative on both test and trial function.</p>
 <p>In the current context, we integrate by parts the second term:  </p><p class="formulaDsp">
-<picture><source srcset="form_3402_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (\textbf{v}, -2\; \textrm{div}\; \varepsilon(\textbf{u}))_{\Omega}
   - (\textrm{div}\; \textbf{v}, p)_{\Omega}
   + (\textbf{n}\cdot\textbf{v}, p)_{\partial\Omega}
@@ -248,10 +248,10 @@
   (q,\textrm{div}\; \textbf{u})_{\Omega}
   =
   (\textbf{v}, \textbf{f})_\Omega.
-\end{eqnarray*}" src="form_3402.png"/></picture>
+\end{eqnarray*}" src="form_3266.png"/></picture>
 </p>
 <p> Likewise, we integrate by parts the first term to obtain  </p><p class="formulaDsp">
-<picture><source srcset="form_3403_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (\nabla \textbf{v}, 2\; \varepsilon(\textbf{u}))_{\Omega}
   -
   (\textbf{n} \otimes \textbf{v}, 2\; \varepsilon(\textbf{u}))_{\partial\Omega}
@@ -261,19 +261,19 @@
   (q,\textrm{div}\; \textbf{u})_{\Omega}
   =
   (\textbf{v}, \textbf{f})_\Omega,
-\end{eqnarray*}" src="form_3403.png"/></picture>
+\end{eqnarray*}" src="form_3267.png"/></picture>
 </p>
 <p> where the scalar product between two tensor-valued quantities is here defined as  </p><p class="formulaDsp">
-<picture><source srcset="form_3404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (\nabla \textbf{v}, 2\; \varepsilon(\textbf{u}))_{\Omega}
   =
   2 \int_\Omega \sum_{i,j=1}^d \frac{\partial v_j}{\partial x_i}
   \varepsilon(\textbf{u})_{ij} \ dx.
-\end{eqnarray*}" src="form_3404.png"/></picture>
+\end{eqnarray*}" src="form_3268.png"/></picture>
 </p>
-<p> Using this, we have now reduced the requirements on our variables to first derivatives for <picture><source srcset="form_3405_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u,\mathbf v$" src="form_3405.png"/></picture> and no derivatives at all for <picture><source srcset="form_1814_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p,q$" src="form_1814.png"/></picture>.</p>
-<p>Because the scalar product between a general tensor like <picture><source srcset="form_3406_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\textbf{v}$" src="form_3406.png"/></picture> and a symmetric tensor like <picture><source srcset="form_3407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\textbf{u})$" src="form_3407.png"/></picture> equals the scalar product between the symmetrized forms of the two, we can also write the bilinear form above as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_3408_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> Using this, we have now reduced the requirements on our variables to first derivatives for <picture><source srcset="form_3269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u,\mathbf v$" src="form_3269.png"/></picture> and no derivatives at all for <picture><source srcset="form_1784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p,q$" src="form_1784.png"/></picture>.</p>
+<p>Because the scalar product between a general tensor like <picture><source srcset="form_3270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\textbf{v}$" src="form_3270.png"/></picture> and a symmetric tensor like <picture><source srcset="form_3271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\textbf{u})$" src="form_3271.png"/></picture> equals the scalar product between the symmetrized forms of the two, we can also write the bilinear form above as follows:  </p><p class="formulaDsp">
+<picture><source srcset="form_3272_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (\varepsilon(\textbf{v}), 2\; \varepsilon(\textbf{u}))_{\Omega}
   -
   (\textbf{n} \otimes \textbf{v}, 2\; \varepsilon(\textbf{u}))_{\partial\Omega}
@@ -283,43 +283,43 @@
   (q,\textrm{div}\; \textbf{u})_{\Omega}
   =
   (\textbf{v}, \textbf{f})_\Omega,
-\end{eqnarray*}" src="form_3408.png"/></picture>
+\end{eqnarray*}" src="form_3272.png"/></picture>
 </p>
 <p> We will deal with the boundary terms in the next section, but it is already clear from the domain terms  </p><p class="formulaDsp">
-<picture><source srcset="form_3409_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3273_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (\varepsilon(\textbf{v}), 2\; \varepsilon(\textbf{u}))_{\Omega}
   - (\textrm{div}\; \textbf{v}, p)_{\Omega}
   -
   (q,\textrm{div}\; \textbf{u})_{\Omega}
-\end{eqnarray*}" src="form_3409.png"/></picture>
+\end{eqnarray*}" src="form_3273.png"/></picture>
 </p>
 <p> of the bilinear form that the Stokes equations yield a symmetric bilinear form, and consequently a symmetric (if indefinite) system matrix.</p>
 <p><a class="anchor" id="Boundaryconditions"></a></p><h3>Boundary conditions</h3>
 <dl class="section note"><dt>Note</dt><dd>The material presented here is also discussed in <a href="http://www.math.colostate.edu/~bangerth/videos.676.21.5.html">video lecture 21.5</a>. (All video lectures are also available <a href="http://www.math.colostate.edu/~bangerth/videos.html">here</a>.) (See also <a href="http://www.math.colostate.edu/~bangerth/videos.676.21.55.html">video lecture 21.55</a>, <a href="http://www.math.colostate.edu/~bangerth/videos.676.21.6.html">video lecture 21.6</a>, <a href="http://www.math.colostate.edu/~bangerth/videos.676.21.65.html">video lecture 21.65</a>.)</dd></dl>
 <p>The weak form just derived immediately presents us with different possibilities for imposing boundary conditions: </p><ol>
 <li>
-<p class="startli">Dirichlet velocity boundary conditions: On a part <picture><source srcset="form_3410_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_D\subset\partial\Omega$" src="form_3410.png"/></picture> we may impose Dirichlet conditions on the velocity <picture><source srcset="form_303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf u$" src="form_303.png"/></picture>:</p>
+<p class="startli">Dirichlet velocity boundary conditions: On a part <picture><source srcset="form_3274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_D\subset\partial\Omega$" src="form_3274.png"/></picture> we may impose Dirichlet conditions on the velocity <picture><source srcset="form_303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf u$" src="form_303.png"/></picture>:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_3411_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3275_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
         \textbf u = \textbf g_D \qquad\qquad \textrm{on}\ \Gamma_D.
-    \end{eqnarray*}" src="form_3411.png"/></picture>
+    \end{eqnarray*}" src="form_3275.png"/></picture>
 </p>
-<p> Because test functions <picture><source srcset="form_3412_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{v}$" src="form_3412.png"/></picture> come from the tangent space of the solution variable, we have that <picture><source srcset="form_3413_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{v}=0$" src="form_3413.png"/></picture> on <picture><source srcset="form_3414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_D$" src="form_3414.png"/></picture> and consequently that  </p><p class="formulaDsp">
-<picture><source srcset="form_3415_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> Because test functions <picture><source srcset="form_3276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{v}$" src="form_3276.png"/></picture> come from the tangent space of the solution variable, we have that <picture><source srcset="form_3277_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{v}=0$" src="form_3277.png"/></picture> on <picture><source srcset="form_3278_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_D$" src="form_3278.png"/></picture> and consequently that  </p><p class="formulaDsp">
+<picture><source srcset="form_3279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
       -(\textbf{n} \otimes \mathrm
         v, 2\; \varepsilon(\textbf{u}))_{\Gamma_D}
       +
       (\textbf{n}\cdot\textbf{v}, p)_{\Gamma_D}
       = 0.
-    \end{eqnarray*}" src="form_3415.png"/></picture>
+    \end{eqnarray*}" src="form_3279.png"/></picture>
 </p>
 <p> In other words, as usual, strongly imposed boundary values do not appear in the weak form.</p>
 <p class="interli">It is noteworthy that if we impose Dirichlet boundary values on the entire boundary, then the pressure is only determined up to a constant. An algorithmic realization of that would use similar tools as have been seen in <a class="el" href="step_11.html">step-11</a>.</p>
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">Neumann-type or natural boundary conditions: On the rest of the boundary <picture><source srcset="form_3416_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_N=\partial\Omega\backslash\Gamma_D$" src="form_3416.png"/></picture>, let us re-write the boundary terms as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_3417_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p class="startli">Neumann-type or natural boundary conditions: On the rest of the boundary <picture><source srcset="form_3280_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_N=\partial\Omega\backslash\Gamma_D$" src="form_3280.png"/></picture>, let us re-write the boundary terms as follows:  </p><p class="formulaDsp">
+<picture><source srcset="form_3281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
       -(\textbf{n} \otimes \mathrm
         v, 2\; \varepsilon(\textbf{u}))_{\Gamma_N}
       +
@@ -349,17 +349,17 @@
       &amp;=&amp;
       (\textbf{v},
        \textbf{n}\cdot [p \textbf{I} - 2\; \varepsilon(\textbf{u})])_{\Gamma_N}.
/usr/share/doc/packages/dealii/doxygen/deal.II/step_23.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_23.html	2024-03-17 21:57:44.583241340 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_23.html	2024-03-17 21:57:44.587241365 +0000
@@ -132,8 +132,8 @@
  <a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <dl class="section note"><dt>Note</dt><dd>The material presented here is also discussed in <a href="http://www.math.colostate.edu/~bangerth/videos.676.28.html">video lecture 28</a>. (All video lectures are also available <a href="http://www.math.colostate.edu/~bangerth/videos.html">here</a>.)</dd></dl>
 <p>This is the first of a number of tutorial programs that will finally cover "real" time-dependent problems, not the slightly odd form of time dependence found in <a class="el" href="step_18.html">step-18</a> or the DAE model of <a class="el" href="step_21.html">step-21</a>. In particular, this program introduces the wave equation in a bounded domain. Later, <a class="el" href="step_24.html">step-24</a> will consider an example of absorbing boundary conditions, and <a class="el" href="step_25.html">step-25</a> a kind of nonlinear wave equation producing solutions called solitons.</p>
-<p>The wave equation in its prototypical form reads as follows: find <picture><source srcset="form_3179_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(x,t), x\in\Omega, t\in[0,T]$" src="form_3179.png"/></picture> that satisfies  </p><p class="formulaDsp">
-<picture><source srcset="form_3180_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>The wave equation in its prototypical form reads as follows: find <picture><source srcset="form_3357_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(x,t), x\in\Omega, t\in[0,T]$" src="form_3357.png"/></picture> that satisfies  </p><p class="formulaDsp">
+<picture><source srcset="form_3358_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
         \frac{\partial^2 u}{\partial t^2}
         -
         \Delta u &amp;=&amp; f
@@ -151,10 +151,10 @@
         \frac{\partial u(x,0)}{\partial t} &amp;=&amp; u_1(x)
         \qquad
         \textrm{in}\ \Omega.
-\end{eqnarray*}" src="form_3180.png"/></picture>
+\end{eqnarray*}" src="form_3358.png"/></picture>
 </p>
 <p> Note that since this is an equation with second-order time derivatives, we need to pose two initial conditions, one for the value and one for the time derivative of the solution.</p>
-<p>Physically, the equation describes the motion of an elastic medium. In 2-d, one can think of how a membrane moves if subjected to a force. The Dirichlet boundary conditions above indicate that the membrane is clamped at the boundary at a height <picture><source srcset="form_3181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(x,t)$" src="form_3181.png"/></picture> (this height might be moving as well &mdash; think of people holding a blanket and shaking it up and down). The first initial condition equals the initial deflection of the membrane, whereas the second one gives its velocity. For example, one could think of pushing the membrane down with a finger and then letting it go at <picture><source srcset="form_430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=0$" src="form_430.png"/></picture> (nonzero deflection but zero initial velocity), or hitting it with a hammer at <picture><source srcset="form_430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=0$" src="form_430.png"/></picture> (zero deflection but nonzero velocity). Both cases would induce motion in the membrane.</p>
+<p>Physically, the equation describes the motion of an elastic medium. In 2-d, one can think of how a membrane moves if subjected to a force. The Dirichlet boundary conditions above indicate that the membrane is clamped at the boundary at a height <picture><source srcset="form_3359_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(x,t)$" src="form_3359.png"/></picture> (this height might be moving as well &mdash; think of people holding a blanket and shaking it up and down). The first initial condition equals the initial deflection of the membrane, whereas the second one gives its velocity. For example, one could think of pushing the membrane down with a finger and then letting it go at <picture><source srcset="form_430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=0$" src="form_430.png"/></picture> (nonzero deflection but zero initial velocity), or hitting it with a hammer at <picture><source srcset="form_430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=0$" src="form_430.png"/></picture> (zero deflection but nonzero velocity). Both cases would induce motion in the membrane.</p>
 <p><a class="anchor" id="Timediscretization"></a></p><h3>Time discretization</h3>
 <p><a class="anchor" id="MethodoflinesorRothesmethod"></a></p><h4>Method of lines or Rothe's method?</h4>
 <p>There is a long-standing debate in the numerical analysis community over whether a discretization of time dependent equations should involve first discretizing the time variable leading to a stationary PDE at each time step that is then solved using standard finite element techniques (this is called the Rothe method), or whether one should first discretize the spatial variables, leading to a large system of ordinary differential equations that can then be handled by one of the usual ODE solvers (this is called the method of lines).</p>
@@ -167,12 +167,12 @@
 <p><a class="anchor" id="Rothesmethod"></a></p><h4>Rothe's method!</h4>
 <p>Given these considerations, here is how we will proceed: let us first define a simple time stepping method for this second order problem, and then in a second step do the spatial discretization, i.e. we will follow Rothe's approach.</p>
 <p>For the first step, let us take a little detour first: in order to discretize a second time derivative, we can either discretize it directly, or we can introduce an additional variable and transform the system into a first order system. In many cases, this turns out to be equivalent, but dealing with first order systems is often simpler. To this end, let us introduce  </p><p class="formulaDsp">
-<picture><source srcset="form_3190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         v = \frac{\partial u}{\partial t},
-\]" src="form_3190.png"/></picture>
+\]" src="form_3360.png"/></picture>
 </p>
 <p> and call this variable the <em>velocity</em> for obvious reasons. We can then reformulate the original wave equation as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_3192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3361_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
         \frac{\partial u}{\partial t}
         -
         v
@@ -197,37 +197,37 @@
         v(x,0) &amp;=&amp; u_1(x)
         \qquad
         \textrm{in}\ \Omega.
-\end{eqnarray*}" src="form_3192.png"/></picture>
+\end{eqnarray*}" src="form_3361.png"/></picture>
 </p>
-<p> The advantage of this formulation is that it now only contains first time derivatives for both variables, for which it is simple to write down time stepping schemes. Note that we do not have boundary conditions for <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> at first. However, we could enforce <picture><source srcset="form_3196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v=\frac{\partial
-g}{\partial t}$" src="form_3196.png"/></picture> on the boundary. It turns out in numerical examples that this is actually necessary: without doing so the solution doesn't look particularly wrong, but the Crank-Nicolson scheme does not conserve energy if one doesn't enforce these boundary conditions.</p>
-<p>With this formulation, let us introduce the following time discretization where a superscript <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> indicates the number of a time step and <picture><source srcset="form_3198_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=t_n-t_{n-1}$" src="form_3198.png"/></picture> is the length of the present time step:  </p><p class="formulaDsp">
-<picture><source srcset="form_3201_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> The advantage of this formulation is that it now only contains first time derivatives for both variables, for which it is simple to write down time stepping schemes. Note that we do not have boundary conditions for <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> at first. However, we could enforce <picture><source srcset="form_3362_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v=\frac{\partial
+g}{\partial t}$" src="form_3362.png"/></picture> on the boundary. It turns out in numerical examples that this is actually necessary: without doing so the solution doesn't look particularly wrong, but the Crank-Nicolson scheme does not conserve energy if one doesn't enforce these boundary conditions.</p>
+<p>With this formulation, let us introduce the following time discretization where a superscript <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> indicates the number of a time step and <picture><source srcset="form_3363_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=t_n-t_{n-1}$" src="form_3363.png"/></picture> is the length of the present time step:  </p><p class="formulaDsp">
+<picture><source srcset="form_3364_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \frac{u^n - u^{n-1}}{k}
   - \left[\theta v^n + (1-\theta) v^{n-1}\right] &amp;=&amp; 0,
   \\
   \frac{v^n - v^{n-1}}{k}
   - \Delta\left[\theta u^n + (1-\theta) u^{n-1}\right]
   &amp;=&amp; \theta f^n + (1-\theta) f^{n-1}.
-\end{eqnarray*}" src="form_3201.png"/></picture>
+\end{eqnarray*}" src="form_3364.png"/></picture>
 </p>
-<p> Note how we introduced a parameter <picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2506.png"/></picture> here. If we chose <picture><source srcset="form_3202_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=0$" src="form_3202.png"/></picture>, for example, the first equation would reduce to <picture><source srcset="form_3203_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{u^n - u^{n-1}}{k}  - v^{n-1} = 0$" src="form_3203.png"/></picture>, which is well-known as the forward or explicit Euler method. On the other hand, if we set <picture><source srcset="form_3205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=1$" src="form_3205.png"/></picture>, then we would get <picture><source srcset="form_3206_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{u^n - u^{n-1}}{k}  - v^n = 0$" src="form_3206.png"/></picture>, which corresponds to the backward or implicit Euler method. Both these methods are first order accurate methods. They are simple to implement, but they are not really very accurate.</p>
-<p>The third case would be to choose <picture><source srcset="form_3208_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=\frac 12$" src="form_3208.png"/></picture>. The first of the equations above would then read <picture><source srcset="form_3209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{u^n - u^{n-1}}{k}
-- \frac 12 \left[v^n + v^{n-1}\right] = 0$" src="form_3209.png"/></picture>. This method is known as the Crank-Nicolson method and has the advantage that it is second order accurate. In addition, it has the nice property that it preserves the energy in the solution (physically, the energy is the sum of the kinetic energy of the particles in the membrane plus the potential energy present due to the fact that it is locally stretched; this quantity is a conserved one in the continuous equation, but most time stepping schemes do not conserve it after time discretization). Since <picture><source srcset="form_3211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^n$" src="form_3211.png"/></picture> also appears in the equation for <picture><source srcset="form_2863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n$" src="form_2863.png"/></picture>, the Crank-Nicolson scheme is also implicit.</p>
-<p>In the program, we will leave <picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2506.png"/></picture> as a parameter, so that it will be easy to play with it. The results section will show some numerical evidence comparing the different schemes.</p>
-<p>The equations above (called the <em>semidiscretized</em> equations because we have only discretized the time, but not space), can be simplified a bit by eliminating <picture><source srcset="form_3211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^n$" src="form_3211.png"/></picture> from the first equation and rearranging terms. We then get  </p><p class="formulaDsp">
-<picture><source srcset="form_3215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> Note how we introduced a parameter <picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2513.png"/></picture> here. If we chose <picture><source srcset="form_3365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=0$" src="form_3365.png"/></picture>, for example, the first equation would reduce to <picture><source srcset="form_3366_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{u^n - u^{n-1}}{k}  - v^{n-1} = 0$" src="form_3366.png"/></picture>, which is well-known as the forward or explicit Euler method. On the other hand, if we set <picture><source srcset="form_3367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=1$" src="form_3367.png"/></picture>, then we would get <picture><source srcset="form_3368_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{u^n - u^{n-1}}{k}  - v^n = 0$" src="form_3368.png"/></picture>, which corresponds to the backward or implicit Euler method. Both these methods are first order accurate methods. They are simple to implement, but they are not really very accurate.</p>
+<p>The third case would be to choose <picture><source srcset="form_3369_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=\frac 12$" src="form_3369.png"/></picture>. The first of the equations above would then read <picture><source srcset="form_3370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{u^n - u^{n-1}}{k}
+- \frac 12 \left[v^n + v^{n-1}\right] = 0$" src="form_3370.png"/></picture>. This method is known as the Crank-Nicolson method and has the advantage that it is second order accurate. In addition, it has the nice property that it preserves the energy in the solution (physically, the energy is the sum of the kinetic energy of the particles in the membrane plus the potential energy present due to the fact that it is locally stretched; this quantity is a conserved one in the continuous equation, but most time stepping schemes do not conserve it after time discretization). Since <picture><source srcset="form_3371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^n$" src="form_3371.png"/></picture> also appears in the equation for <picture><source srcset="form_2904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n$" src="form_2904.png"/></picture>, the Crank-Nicolson scheme is also implicit.</p>
+<p>In the program, we will leave <picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2513.png"/></picture> as a parameter, so that it will be easy to play with it. The results section will show some numerical evidence comparing the different schemes.</p>
+<p>The equations above (called the <em>semidiscretized</em> equations because we have only discretized the time, but not space), can be simplified a bit by eliminating <picture><source srcset="form_3371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^n$" src="form_3371.png"/></picture> from the first equation and rearranging terms. We then get  </p><p class="formulaDsp">
+<picture><source srcset="form_3372_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \left[ 1-k^2\theta^2\Delta \right] u^n &amp;=&amp;
          \left[ 1+k^2\theta(1-\theta)\Delta\right] u^{n-1} + k v^{n-1}
          + k^2\theta\left[\theta f^n + (1-\theta) f^{n-1}\right],\\
    v^n &amp;=&amp; v^{n-1} + k\Delta\left[ \theta u^n + (1-\theta) u^{n-1}\right]
    + k\left[\theta f^n + (1-\theta) f^{n-1}\right].
-\end{eqnarray*}" src="form_3215.png"/></picture>
+\end{eqnarray*}" src="form_3372.png"/></picture>
 </p>
-<p> In this form, we see that if we are given the solution <picture><source srcset="form_3216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{n-1},v^{n-1}$" src="form_3216.png"/></picture> of the previous timestep, that we can then solve for the variables <picture><source srcset="form_3217_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n,v^n$" src="form_3217.png"/></picture> separately, i.e. one at a time. This is convenient. In addition, we recognize that the operator in the first equation is positive definite, and the second equation looks particularly simple.</p>
+<p> In this form, we see that if we are given the solution <picture><source srcset="form_3373_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{n-1},v^{n-1}$" src="form_3373.png"/></picture> of the previous timestep, that we can then solve for the variables <picture><source srcset="form_3374_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n,v^n$" src="form_3374.png"/></picture> separately, i.e. one at a time. This is convenient. In addition, we recognize that the operator in the first equation is positive definite, and the second equation looks particularly simple.</p>
 <p><a class="anchor" id="Spacediscretization"></a></p><h3>Space discretization</h3>
-<p>We have now derived equations that relate the approximate (semi-discrete) solution <picture><source srcset="form_3219_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n(x)$" src="form_3219.png"/></picture> and its time derivative <picture><source srcset="form_3220_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^n(x)$" src="form_3220.png"/></picture> at time <picture><source srcset="form_440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_n$" src="form_440.png"/></picture> with the solutions <picture><source srcset="form_3221_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{n-1}(x),v^{n-1}(x)$" src="form_3221.png"/></picture> of the previous time step at <picture><source srcset="form_442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_{n-1}$" src="form_442.png"/></picture>. The next step is to also discretize the spatial variable using the usual finite element methodology. To this end, we multiply each equation with a test function, integrate over the entire domain, and integrate by parts where necessary. This leads to  </p><p class="formulaDsp">
-<picture><source srcset="form_3229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>We have now derived equations that relate the approximate (semi-discrete) solution <picture><source srcset="form_3375_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n(x)$" src="form_3375.png"/></picture> and its time derivative <picture><source srcset="form_3376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^n(x)$" src="form_3376.png"/></picture> at time <picture><source srcset="form_440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_n$" src="form_440.png"/></picture> with the solutions <picture><source srcset="form_3377_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{n-1}(x),v^{n-1}(x)$" src="form_3377.png"/></picture> of the previous time step at <picture><source srcset="form_442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_{n-1}$" src="form_442.png"/></picture>. The next step is to also discretize the spatial variable using the usual finite element methodology. To this end, we multiply each equation with a test function, integrate over the entire domain, and integrate by parts where necessary. This leads to  </p><p class="formulaDsp">
+<picture><source srcset="form_3378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (u^n,\varphi) + k^2\theta^2(\nabla u^n,\nabla \varphi) &amp;=&amp;
   (u^{n-1},\varphi) - k^2\theta(1-\theta)(\nabla u^{n-1},\nabla \varphi)
   +
@@ -247,15 +247,15 @@
   \left[
   \theta (f^n,\varphi) + (1-\theta) (f^{n-1},\varphi)
   \right].
-\end{eqnarray*}" src="form_3229.png"/></picture>
+\end{eqnarray*}" src="form_3378.png"/></picture>
 </p>
-<p>It is then customary to approximate <picture><source srcset="form_3230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n(x) \approx u^n_h(x) = \sum_i
-U_i^n\phi_i^n(x)$" src="form_3230.png"/></picture>, where <picture><source srcset="form_3231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i^n(x)$" src="form_3231.png"/></picture> are the shape functions used for the discretization of the <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>-th time step and <picture><source srcset="form_3232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i^n$" src="form_3232.png"/></picture> are the unknown nodal values of the solution. Similarly, <picture><source srcset="form_3233_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^n(x) \approx
-v^n_h(x) = \sum_i V_i^n\phi_i^n(x)$" src="form_3233.png"/></picture>. Finally, we have the solutions of the previous time step, <picture><source srcset="form_3235_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{n-1}(x) \approx u^{n-1}_h(x) = \sum_i
-U_i^{n-1}\phi_i^{n-1}(x)$" src="form_3235.png"/></picture> and <picture><source srcset="form_3236_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^{n-1}(x) \approx v^{n-1}_h(x) = \sum_i
-V_i^{n-1}\phi_i^{n-1}(x)$" src="form_3236.png"/></picture>. Note that since the solution of the previous time step has already been computed by the time we get to time step <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>, <picture><source srcset="form_3237_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^{n-1},V^{n-1}$" src="form_3237.png"/></picture> are known. Furthermore, note that the solutions of the previous step may have been computed on a different mesh, so we have to use shape functions <picture><source srcset="form_3239_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi^{n-1}_i(x)$" src="form_3239.png"/></picture>.</p>
+<p>It is then customary to approximate <picture><source srcset="form_3379_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n(x) \approx u^n_h(x) = \sum_i
+U_i^n\phi_i^n(x)$" src="form_3379.png"/></picture>, where <picture><source srcset="form_3380_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i^n(x)$" src="form_3380.png"/></picture> are the shape functions used for the discretization of the <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>-th time step and <picture><source srcset="form_3381_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i^n$" src="form_3381.png"/></picture> are the unknown nodal values of the solution. Similarly, <picture><source srcset="form_3382_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^n(x) \approx
+v^n_h(x) = \sum_i V_i^n\phi_i^n(x)$" src="form_3382.png"/></picture>. Finally, we have the solutions of the previous time step, <picture><source srcset="form_3383_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{n-1}(x) \approx u^{n-1}_h(x) = \sum_i
+U_i^{n-1}\phi_i^{n-1}(x)$" src="form_3383.png"/></picture> and <picture><source srcset="form_3384_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^{n-1}(x) \approx v^{n-1}_h(x) = \sum_i
+V_i^{n-1}\phi_i^{n-1}(x)$" src="form_3384.png"/></picture>. Note that since the solution of the previous time step has already been computed by the time we get to time step <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>, <picture><source srcset="form_3385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^{n-1},V^{n-1}$" src="form_3385.png"/></picture> are known. Furthermore, note that the solutions of the previous step may have been computed on a different mesh, so we have to use shape functions <picture><source srcset="form_3386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi^{n-1}_i(x)$" src="form_3386.png"/></picture>.</p>
 <p>If we plug these expansions into above equations and test with the test functions from the present mesh, we get the following linear system:  </p><p class="formulaDsp">
-<picture><source srcset="form_3240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (M^n + k^2\theta^2 A^n)U^n &amp;=&amp;
   M^{n,n-1}U^{n-1} - k^2\theta(1-\theta) A^{n,n-1}U^{n-1}
   +
@@ -275,10 +275,10 @@
   \left[
   \theta F^n + (1-\theta) F^{n-1}
   \right],
-\end{eqnarray*}" src="form_3240.png"/></picture>
+\end{eqnarray*}" src="form_3387.png"/></picture>
 </p>
 <p> where  </p><p class="formulaDsp">
-<picture><source srcset="form_3241_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3388_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
         M^n_{ij} &amp;=&amp; (\phi_i^n, \phi_j^n),
         \\
         A^n_{ij} &amp;=&amp; (\nabla\phi_i^n, \nabla\phi_j^n),
@@ -290,14 +290,14 @@
         F^n_{i} &amp;=&amp; (f^n,\phi_i^n),
         \\
         F^{n-1}_{i} &amp;=&amp; (f^{n-1},\phi_i^n).
-\end{eqnarray*}" src="form_3241.png"/></picture>
+\end{eqnarray*}" src="form_3388.png"/></picture>
 </p>
 <p>If we solve these two equations, we can move the solution one step forward and go on to the next time step.</p>
-<p>It is worth noting that if we choose the same mesh on each time step (as we will in fact do in the program below), then we have the same shape functions on time step <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> and <picture><source srcset="form_3242_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n-1$" src="form_3242.png"/></picture>, i.e. <picture><source srcset="form_3243_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi^n_i=\phi_i^{n-1}=\phi_i$" src="form_3243.png"/></picture>. Consequently, we get <picture><source srcset="form_3244_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^n=M^{n,n-1}=M$" src="form_3244.png"/></picture> and <picture><source srcset="form_3245_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^n=A^{n,n-1}=A$" src="form_3245.png"/></picture>. On the other hand, if we had used different shape functions, then we would have to compute integrals that contain shape functions defined on two meshes. This is a somewhat messy process that we omit here, but that is treated in some detail in <a class="el" href="step_28.html">step-28</a>.</p>
+<p>It is worth noting that if we choose the same mesh on each time step (as we will in fact do in the program below), then we have the same shape functions on time step <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> and <picture><source srcset="form_3389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n-1$" src="form_3389.png"/></picture>, i.e. <picture><source srcset="form_3390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi^n_i=\phi_i^{n-1}=\phi_i$" src="form_3390.png"/></picture>. Consequently, we get <picture><source srcset="form_3391_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^n=M^{n,n-1}=M$" src="form_3391.png"/></picture> and <picture><source srcset="form_3392_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^n=A^{n,n-1}=A$" src="form_3392.png"/></picture>. On the other hand, if we had used different shape functions, then we would have to compute integrals that contain shape functions defined on two meshes. This is a somewhat messy process that we omit here, but that is treated in some detail in <a class="el" href="step_28.html">step-28</a>.</p>
 <p>Under these conditions (i.e. a mesh that doesn't change), one can optimize the solution procedure a bit by basically eliminating the solution of the second linear system. We will discuss this in the introduction of the <a class="el" href="step_25.html">step-25</a> program.</p>
 <p><a class="anchor" id="Energyconservation"></a></p><h3>Energy conservation</h3>
-<p>One way to compare the quality of a time stepping scheme is to see whether the numerical approximation preserves conservation properties of the continuous equation. For the wave equation, the natural quantity to look at is the energy. By multiplying the wave equation by <picture><source srcset="form_3248_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_t$" src="form_3248.png"/></picture>, integrating over <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, and integrating by parts where necessary, we find that  </p><p class="formulaDsp">
-<picture><source srcset="form_3250_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>One way to compare the quality of a time stepping scheme is to see whether the numerical approximation preserves conservation properties of the continuous equation. For the wave equation, the natural quantity to look at is the energy. By multiplying the wave equation by <picture><source srcset="form_3393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_t$" src="form_3393.png"/></picture>, integrating over <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, and integrating by parts where necessary, we find that  </p><p class="formulaDsp">
+<picture><source srcset="form_3394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \frac{d}{d t}
         \left[\frac 12 \int_\Omega \left(\frac{\partial u}{\partial
         t}\right)^2 + (\nabla u)^2 \; dx\right]
@@ -306,34 +306,34 @@
         +
         \int_{\partial\Omega} n\cdot\nabla u
         \frac{\partial g}{\partial t} \; dx.
-\]" src="form_3250.png"/></picture>
+\]" src="form_3394.png"/></picture>
 </p>
 <p> By consequence, in absence of body forces and constant boundary values, we get that  </p><p class="formulaDsp">
-<picture><source srcset="form_3251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         E(t) = \frac 12 \int_\Omega \left(\frac{\partial u}{\partial
         t}\right)^2 + (\nabla u)^2 \; dx
-\]" src="form_3251.png"/></picture>
+\]" src="form_3395.png"/></picture>
 </p>
-<p> is a conserved quantity, i.e. one that doesn't change with time. We will compute this quantity after each time step. It is straightforward to see that if we replace <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> by its finite element approximation, and <picture><source srcset="form_3252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial u}{\partial t}$" src="form_3252.png"/></picture> by the finite element approximation of the velocity <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture>, then  </p><p class="formulaDsp">
-<picture><source srcset="form_3253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> is a conserved quantity, i.e. one that doesn't change with time. We will compute this quantity after each time step. It is straightforward to see that if we replace <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> by its finite element approximation, and <picture><source srcset="form_3396_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial u}{\partial t}$" src="form_3396.png"/></picture> by the finite element approximation of the velocity <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture>, then  </p><p class="formulaDsp">
+<picture><source srcset="form_3397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         E(t_n) = \frac 12 \left&lt;V^n, M^n V^n\right&gt;
         +
         \frac 12 \left&lt;U^n, A^n U^n\right&gt;.
-\]" src="form_3253.png"/></picture>
+\]" src="form_3397.png"/></picture>
 </p>
 <p> As we will see in the results section, the Crank-Nicolson scheme does indeed conserve the energy, whereas neither the forward nor the backward Euler scheme do.</p>
 <p><a class="anchor" id="WhoareCourantFriedrichsandLewy"></a></p><h3>Who are Courant, Friedrichs, and Lewy?</h3>
-<p>One of the reasons why the wave equation is not easy to solve numerically is that explicit time discretizations are only stable if the time step is small enough. In particular, it is coupled to the spatial mesh width <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>. For the lowest order discretization we use here, the relationship reads  </p><p class="formulaDsp">
-<picture><source srcset="form_3255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>One of the reasons why the wave equation is not easy to solve numerically is that explicit time discretizations are only stable if the time step is small enough. In particular, it is coupled to the spatial mesh width <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>. For the lowest order discretization we use here, the relationship reads  </p><p class="formulaDsp">
+<picture><source srcset="form_3398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         k\le \frac hc
-\]" src="form_3255.png"/></picture>
+\]" src="form_3398.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture> is the wave speed, which in our formulation of the wave equation has been normalized to one. Consequently, unless we use the implicit schemes with <picture><source srcset="form_3256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta&gt;0$" src="form_3256.png"/></picture>, our solutions will not be numerically stable if we violate this restriction. Implicit schemes do not have this restriction for stability, but they become inaccurate if the time step is too large.</p>
+<p> where <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture> is the wave speed, which in our formulation of the wave equation has been normalized to one. Consequently, unless we use the implicit schemes with <picture><source srcset="form_3399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta&gt;0$" src="form_3399.png"/></picture>, our solutions will not be numerically stable if we violate this restriction. Implicit schemes do not have this restriction for stability, but they become inaccurate if the time step is too large.</p>
 <p>This condition was first recognized by Courant, Friedrichs, and Lewy &mdash; in 1928, long before computers became available for numerical computations! (This result appeared in the German language article R. Courant, K. Friedrichs and H. Lewy: <em>&Uuml;ber die partiellen Differenzengleichungen der mathematischen Physik</em>, Mathematische Annalen, vol. 100, no. 1, pages 32-74, 1928.) This condition on the time step is most frequently just referred to as the <em>CFL</em> condition. Intuitively, the CFL condition says that the time step must not be larger than the time it takes a wave to cross a single cell.</p>
-<p>In the program, we will refine the square <picture><source srcset="form_3258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^2$" src="form_3258.png"/></picture> seven times uniformly, giving a mesh size of <picture><source srcset="form_3259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h=\frac 1{64}$" src="form_3259.png"/></picture>, which is what we set the time step to. The fact that we set the time step and mesh size individually in two different places is error prone: it is too easy to refine the mesh once more but forget to also adjust the time step. <a class="el" href="step_24.html">step-24</a> shows a better way how to keep these things in sync.</p>
+<p>In the program, we will refine the square <picture><source srcset="form_3400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^2$" src="form_3400.png"/></picture> seven times uniformly, giving a mesh size of <picture><source srcset="form_3401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h=\frac 1{64}$" src="form_3401.png"/></picture>, which is what we set the time step to. The fact that we set the time step and mesh size individually in two different places is error prone: it is too easy to refine the mesh once more but forget to also adjust the time step. <a class="el" href="step_24.html">step-24</a> shows a better way how to keep these things in sync.</p>
 <p><a class="anchor" id="Thetestcase"></a></p><h3>The test case</h3>
-<p>Although the program has all the hooks to deal with nonzero initial and boundary conditions and body forces, we take a simple case where the domain is a square <picture><source srcset="form_3258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^2$" src="form_3258.png"/></picture> and  </p><p class="formulaDsp">
-<picture><source srcset="form_3260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>Although the program has all the hooks to deal with nonzero initial and boundary conditions and body forces, we take a simple case where the domain is a square <picture><source srcset="form_3400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^2$" src="form_3400.png"/></picture> and  </p><p class="formulaDsp">
+<picture><source srcset="form_3402_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
         f &amp;=&amp; 0,
         \\
         u_0 &amp;=&amp; 0,
@@ -347,7 +347,7 @@
/usr/share/doc/packages/dealii/doxygen/deal.II/step_24.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_24.html	2024-03-17 21:57:44.647241734 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_24.html	2024-03-17 21:57:44.655241784 +0000
@@ -131,101 +131,101 @@
 <p><a class="anchor" id="Theproblem"></a></p><h3>The problem</h3>
 <p>The temperature at a given location, neglecting thermal diffusion, can be stated as</p>
 <p class="formulaDsp">
-<picture><source srcset="form_3321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \rho C_p \frac{\partial}{\partial t}T(t,\mathbf r) = H(t,\mathbf r)
-\]" src="form_3321.png"/></picture>
+\]" src="form_3429.png"/></picture>
 </p>
-<p>Here <picture><source srcset="form_3322_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho (\mathbf r) $" src="form_3322.png"/></picture> is the density; <picture><source srcset="form_3323_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C_p (\mathbf r) $" src="form_3323.png"/></picture> is the specific heat; <picture><source srcset="form_3324_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial T}{\partial t}(t,\mathbf r)$" src="form_3324.png"/></picture> is the temperature rise due to the delivered microwave energy; and <picture><source srcset="form_3325_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H(t,\mathbf r)$" src="form_3325.png"/></picture> is the heating function defined as the thermal energy per time and volume transformed from deposited microwave energy.</p>
-<p>Let us assume that tissues have heterogeneous dielectric properties but homogeneous acoustic properties. The basic acoustic generation equation in an acoustically homogeneous medium can be described as follows: if <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> is the vector-valued displacement, then tissue certainly reacts to changes in pressure by acceleration:  </p><p class="formulaDsp">
-<picture><source srcset="form_3326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Here <picture><source srcset="form_3430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho (\mathbf r) $" src="form_3430.png"/></picture> is the density; <picture><source srcset="form_3431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C_p (\mathbf r) $" src="form_3431.png"/></picture> is the specific heat; <picture><source srcset="form_3432_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial T}{\partial t}(t,\mathbf r)$" src="form_3432.png"/></picture> is the temperature rise due to the delivered microwave energy; and <picture><source srcset="form_3433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H(t,\mathbf r)$" src="form_3433.png"/></picture> is the heating function defined as the thermal energy per time and volume transformed from deposited microwave energy.</p>
+<p>Let us assume that tissues have heterogeneous dielectric properties but homogeneous acoustic properties. The basic acoustic generation equation in an acoustically homogeneous medium can be described as follows: if <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> is the vector-valued displacement, then tissue certainly reacts to changes in pressure by acceleration:  </p><p class="formulaDsp">
+<picture><source srcset="form_3434_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \rho \frac{\partial^2}{\partial t^2}u(t,\mathbf r) =
 -\nabla p(t,\mathbf r).
-\]" src="form_3326.png"/></picture>
+\]" src="form_3434.png"/></picture>
 </p>
 <p> Furthermore, it contracts due to excess pressure and expands based on changes in temperature:  </p><p class="formulaDsp">
-<picture><source srcset="form_3327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3435_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \nabla \cdot u(t,\mathbf r) = -\frac{p(t,\mathbf r)}{\rho c_0^2}+\beta T(t,\mathbf r) .
-\]" src="form_3327.png"/></picture>
+\]" src="form_3435.png"/></picture>
 </p>
 <p> Here, <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> is a thermoexpansion coefficient.</p>
-<p>Let us now make the assumption that heating only happens on a time scale much shorter than wave propagation through tissue (i.e. the temporal length of the microwave pulse that heats the tissue is much shorter than the time it takes a wave to cross the domain). In that case, the heating rate <picture><source srcset="form_3325_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H(t,\mathbf r)$" src="form_3325.png"/></picture> can be written as <picture><source srcset="form_3328_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H(t,\mathbf r) = a(\mathbf
-r)\delta(t)$" src="form_3328.png"/></picture> (where <picture><source srcset="form_3329_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf r)$" src="form_3329.png"/></picture> is a map of absorption strengths for microwave energy and <picture><source srcset="form_3330_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta(t)$" src="form_3330.png"/></picture> is the Dirac delta function), which together with the first equation above will yield an instantaneous jump in the temperature <picture><source srcset="form_3331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T(\mathbf r)$" src="form_3331.png"/></picture> at time <picture><source srcset="form_430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=0$" src="form_430.png"/></picture>. Using this assumption, and taking all equations together, we can rewrite and combine the above as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_3332_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Let us now make the assumption that heating only happens on a time scale much shorter than wave propagation through tissue (i.e. the temporal length of the microwave pulse that heats the tissue is much shorter than the time it takes a wave to cross the domain). In that case, the heating rate <picture><source srcset="form_3433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H(t,\mathbf r)$" src="form_3433.png"/></picture> can be written as <picture><source srcset="form_3436_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H(t,\mathbf r) = a(\mathbf
+r)\delta(t)$" src="form_3436.png"/></picture> (where <picture><source srcset="form_3437_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf r)$" src="form_3437.png"/></picture> is a map of absorption strengths for microwave energy and <picture><source srcset="form_3438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta(t)$" src="form_3438.png"/></picture> is the Dirac delta function), which together with the first equation above will yield an instantaneous jump in the temperature <picture><source srcset="form_3439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T(\mathbf r)$" src="form_3439.png"/></picture> at time <picture><source srcset="form_430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=0$" src="form_430.png"/></picture>. Using this assumption, and taking all equations together, we can rewrite and combine the above as follows:  </p><p class="formulaDsp">
+<picture><source srcset="form_3440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \Delta p-\frac{1}{c_0^2} \frac{\partial^2 p}{\partial t^2} = \lambda
 a(\mathbf r)\frac{d\delta(t)}{dt}
-\]" src="form_3332.png"/></picture>
+\]" src="form_3440.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_3333_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda = - \frac{\beta}{C_p}$" src="form_3333.png"/></picture>.</p>
+<p> where <picture><source srcset="form_3441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda = - \frac{\beta}{C_p}$" src="form_3441.png"/></picture>.</p>
 <p>This somewhat strange equation with the derivative of a Dirac delta function on the right hand side can be rewritten as an initial value problem as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_3334_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \Delta \bar{p}- \frac{1}{c_0^2} \frac{\partial^2 \bar{p}}{\partial t^2} &amp; = &amp;
 0 \\
 \bar{p}(0,\mathbf r) &amp;=&amp; c_0^2 \lambda a(\mathbf r) = b(\mathbf r)  \\
 \frac{\partial\bar{p}(0,\mathbf r)}{\partial t} &amp;=&amp; 0.
-\end{eqnarray*}" src="form_3334.png"/></picture>
+\end{eqnarray*}" src="form_3442.png"/></picture>
 </p>
 <p> (A derivation of this transformation into an initial value problem is given at the end of this introduction as an appendix.)</p>
-<p>In the inverse problem, it is the initial condition <picture><source srcset="form_3335_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b(\mathbf r) = c_0^2 \lambda a(\mathbf r)$" src="form_3335.png"/></picture> that one would like to recover, since it is a map of absorption strengths for microwave energy, and therefore presumably an indicator to discern healthy from diseased tissue.</p>
+<p>In the inverse problem, it is the initial condition <picture><source srcset="form_3443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b(\mathbf r) = c_0^2 \lambda a(\mathbf r)$" src="form_3443.png"/></picture> that one would like to recover, since it is a map of absorption strengths for microwave energy, and therefore presumably an indicator to discern healthy from diseased tissue.</p>
 <p>In real application, the thermoacoustic source is very small as compared to the medium. The propagation path of the thermoacoustic waves can then be approximated as from the source to the infinity. Furthermore, detectors are only a limited distance from the source. One only needs to evaluate the values when the thermoacoustic waves pass through the detectors, although they do continue beyond. This is therefore a problem where we are only interested in a small part of an infinite medium, and we do not want waves generated somewhere to be reflected at the boundary of the domain which we consider interesting. Rather, we would like to simulate only that part of the wave field that is contained inside the domain of interest, and waves that hit the boundary of that domain to simply pass undisturbed through the boundary. In other words, we would like the boundary to absorb any waves that hit it.</p>
 <p>In general, this is a hard problem: Good absorbing boundary conditions are nonlinear and/or numerically very expensive. We therefore opt for a simple first order approximation to absorbing boundary conditions that reads  </p><p class="formulaDsp">
-<picture><source srcset="form_3336_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{\partial\bar{p}}{\partial\mathbf n} =
 -\frac{1}{c_0} \frac{\partial\bar{p}}{\partial t}
-\]" src="form_3336.png"/></picture>
+\]" src="form_3444.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_3337_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial\bar{p}}{\partial\mathbf n}$" src="form_3337.png"/></picture> is the normal derivative at the boundary. It should be noted that this is not a particularly good boundary condition, but it is one of the very few that are reasonably simple to implement.</p>
+<p> Here, <picture><source srcset="form_3445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial\bar{p}}{\partial\mathbf n}$" src="form_3445.png"/></picture> is the normal derivative at the boundary. It should be noted that this is not a particularly good boundary condition, but it is one of the very few that are reasonably simple to implement.</p>
 <p><a class="anchor" id="Weakformanddiscretization"></a></p><h3>Weak form and discretization</h3>
 <p>As in <a class="el" href="step_23.html">step-23</a>, one first introduces a second variable, which is defined as the derivative of the pressure potential:  </p><p class="formulaDsp">
-<picture><source srcset="form_3338_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 v = \frac{\partial\bar{p}}{\partial t}
-\]" src="form_3338.png"/></picture>
+\]" src="form_3446.png"/></picture>
 </p>
 <p>With the second variable, one then transforms the forward problem into two separate equations:  </p><p class="formulaDsp">
-<picture><source srcset="form_3339_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \bar{p}_{t} - v &amp; = &amp; 0 \\
 \Delta\bar{p} - \frac{1}{c_0^2}\,v_{t} &amp; = &amp; f
-\end{eqnarray*}" src="form_3339.png"/></picture>
+\end{eqnarray*}" src="form_3447.png"/></picture>
 </p>
 <p> with initial conditions:  </p><p class="formulaDsp">
-<picture><source srcset="form_3340_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \bar{p}(0,\mathbf r) &amp; = &amp; b(r) \\
 v(0,\mathbf r)=\bar{p}_t(0,\mathbf r) &amp; = &amp; 0.
-\end{eqnarray*}" src="form_3340.png"/></picture>
+\end{eqnarray*}" src="form_3448.png"/></picture>
 </p>
-<p> Note that we have introduced a right hand side <picture><source srcset="form_3341_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(t,\mathbf r)$" src="form_3341.png"/></picture> here to show how to derive these formulas in the general case, although in the application to the thermoacoustic problem <picture><source srcset="form_3214_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=0$" src="form_3214.png"/></picture>.</p>
-<p>The semi-discretized, weak version of this model, using the general <picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2506.png"/></picture> scheme introduced in <a class="el" href="step_23.html">step-23</a> is then:  </p><p class="formulaDsp">
-<picture><source srcset="form_3342_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> Note that we have introduced a right hand side <picture><source srcset="form_3449_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(t,\mathbf r)$" src="form_3449.png"/></picture> here to show how to derive these formulas in the general case, although in the application to the thermoacoustic problem <picture><source srcset="form_3106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=0$" src="form_3106.png"/></picture>.</p>
+<p>The semi-discretized, weak version of this model, using the general <picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2513.png"/></picture> scheme introduced in <a class="el" href="step_23.html">step-23</a> is then:  </p><p class="formulaDsp">
+<picture><source srcset="form_3450_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \left(\frac{\bar{p}^n-\bar{p}^{n-1}}{k},\phi\right)_\Omega-
 \left(\theta v^{n}+(1-\theta)v^{n-1},\phi\right)_\Omega &amp; = &amp; 0   \\
 -\left(\nabla((\theta\bar{p}^n+(1-\theta)\bar{p}^{n-1})),\nabla\phi\right)_\Omega-
 \frac{1}{c_0}\left(\frac{\bar{p}^n-\bar{p}^{n-1}}{k},\phi\right)_{\partial\Omega} -
 \frac{1}{c_0^2}\left(\frac{v^n-v^{n-1}}{k},\phi\right)_\Omega &amp; =
 &amp; \left(\theta f^{n}+(1-\theta)f^{n-1}, \phi\right)_\Omega,
-\end{eqnarray*}" src="form_3342.png"/></picture>
+\end{eqnarray*}" src="form_3450.png"/></picture>
 </p>
 <p> where <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> is an arbitrary test function, and where we have used the absorbing boundary condition to integrate by parts: absorbing boundary conditions are incorporated into the weak form by using  </p><p class="formulaDsp">
-<picture><source srcset="form_3343_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3451_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_\Omega\varphi \, \Delta p\; dx =
 -\int_\Omega\nabla \varphi \cdot \nabla p dx +
 \int_{\partial\Omega}\varphi \frac{\partial p}{\partial {\mathbf n}}ds.
-\]" src="form_3343.png"/></picture>
+\]" src="form_3451.png"/></picture>
 </p>
 <p>From this we obtain the discrete model by introducing a finite number of shape functions, and get  </p><p class="formulaDsp">
-<picture><source srcset="form_3344_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3452_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 M\bar{p}^{n}-k \theta M v^n &amp; = &amp; M\bar{p}^{n-1}+k (1-\theta)Mv^{n-1},\\
 
 (-c_0^2k \theta A-c_0 B)\bar{p}^n-Mv^{n} &amp; = &amp;
 (c_0^2k(1-\theta)A-c_0B)\bar{p}^{n-1}-Mv^{n-1}+c_0^2k(\theta F^{n}+(1-\theta)F^{n-1}).
-\end{eqnarray*}" src="form_3344.png"/></picture>
+\end{eqnarray*}" src="form_3452.png"/></picture>
 </p>
-<p> The matrices <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> and <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> are here as in <a class="el" href="step_23.html">step-23</a>, and the boundary mass matrix  </p><p class="formulaDsp">
-<picture><source srcset="form_3345_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> The matrices <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> and <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> are here as in <a class="el" href="step_23.html">step-23</a>, and the boundary mass matrix  </p><p class="formulaDsp">
+<picture><source srcset="form_3453_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         B_{ij} = \left(\varphi_i,\varphi_j\right)_{\partial\Omega}
-\]" src="form_3345.png"/></picture>
+\]" src="form_3453.png"/></picture>
 </p>
 <p> results from the use of absorbing boundary conditions.</p>
 <p>Above two equations can be rewritten in a matrix form with the pressure and its derivative as an unknown vector:  </p><p class="formulaDsp">
-<picture><source srcset="form_3346_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3454_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \left(\begin{array}{cc}
  M         &amp;       -k\theta M \\
 c_0^2\,k\,\theta\,A+c_0\,B  &amp;  M   \\
@@ -238,10 +238,10 @@
  G_1  \\
  G_2 -(\theta F^{n}+(1-\theta)F ^{n-1})c_{0}^{2}k \\
                 \end{array}\right)
-\]" src="form_3346.png"/></picture>
+\]" src="form_3454.png"/></picture>
 </p>
 <p>where  </p><p class="formulaDsp">
-<picture><source srcset="form_3347_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3455_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \left(\begin{array}{c}
 G_1 \\
 G_2 \\
@@ -250,115 +250,115 @@
  M\bar{p}^{n-1}+k(1-\theta)Mv^{n-1}\\
  (-c_{0}^{2}k (1-\theta)A+c_0 B)\bar{p}^{n-1} +Mv^{n-1}
                 \end{array}\right)
-\]" src="form_3347.png"/></picture>
+\]" src="form_3455.png"/></picture>
 </p>
 <p>By simple transformations, one then obtains two equations for the pressure potential and its derivative, just as in the previous tutorial program:  </p><p class="formulaDsp">
-<picture><source srcset="form_3348_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3456_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 (M+(k\,\theta\,c_{0})^{2}A+c_0k\theta B)\bar{p}^{n} &amp; = &amp;
 G_{1}+(k\, \theta)G_{2}-(c_0k)^2\theta (\theta F^{n}+(1-\theta)F^{n-1}) \\
 Mv^n &amp; = &amp; -(c_0^2\,k\, \theta\, A+c_0B)\bar{p}^{n}+ G_2 -
 c_0^2k(\theta F^{n}+(1-\theta)F^{n-1})
-\end{eqnarray*}" src="form_3348.png"/></picture>
+\end{eqnarray*}" src="form_3456.png"/></picture>
 </p>
 <p><a class="anchor" id="Whattheprogramdoes"></a></p><h3>What the program does</h3>
 <p>Compared to <a class="el" href="step_23.html">step-23</a>, this programs adds the treatment of a simple absorbing boundary conditions. In addition, it deals with data obtained from actual experimental measurements. To this end, we need to evaluate the solution at points at which the experiment also evaluates a real pressure field. We will see how to do that using the <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::point_value</a> function further down below.</p>
 <p><a class="anchor" id="AppendixPDEswithDiracdeltafunctionsasrighthandsideandtheirtransformationtoaninitialvalueproblem"></a></p><h3>Appendix: PDEs with Dirac delta functions as right hand side and their transformation to an initial value problem</h3>
 <p>In the derivation of the initial value problem for the wave equation, we initially found that the equation had the derivative of a Dirac delta function as a right hand side:  </p><p class="formulaDsp">
-<picture><source srcset="form_3349_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3457_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \Delta p-\frac{1}{c_0^2} \frac{\partial^2 p}{\partial t^2} = \lambda
 a(\mathbf r)\frac{d\delta(t)}{dt}.
-\]" src="form_3349.png"/></picture>
+\]" src="form_3457.png"/></picture>
 </p>
-<p> In order to see how to transform this single equation into the usual statement of a PDE with initial conditions, let us make the assumption that the physically quite reasonable medium is at rest initially, i.e. <picture><source srcset="form_3350_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p(t,\mathbf
-r)=\frac{\partial p(t,\mathbf r)}{\partial t}=0$" src="form_3350.png"/></picture> for <picture><source srcset="form_3351_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t&lt;0$" src="form_3351.png"/></picture>. Next, let us form the indefinite integral with respect to time of both sides:  </p><p class="formulaDsp">
-<picture><source srcset="form_3352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> In order to see how to transform this single equation into the usual statement of a PDE with initial conditions, let us make the assumption that the physically quite reasonable medium is at rest initially, i.e. <picture><source srcset="form_3458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p(t,\mathbf
+r)=\frac{\partial p(t,\mathbf r)}{\partial t}=0$" src="form_3458.png"/></picture> for <picture><source srcset="form_3459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t&lt;0$" src="form_3459.png"/></picture>. Next, let us form the indefinite integral with respect to time of both sides:  </p><p class="formulaDsp">
+<picture><source srcset="form_3460_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int^t \Delta p\; dt -\int^t \frac{1}{c_0^2} \frac{\partial^2 p}{\partial t^2}
 \; dt
 =
 \int^t \lambda a(\mathbf r)\frac{d\delta(t)}{dt} \;dt.
-\]" src="form_3352.png"/></picture>
+\]" src="form_3460.png"/></picture>
 </p>
 <p> This immediately leads to the statement  </p><p class="formulaDsp">
-<picture><source srcset="form_3353_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3461_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 P(t,\mathbf r) - \frac{1}{c_0^2} \frac{\partial p}{\partial t}
 =
/usr/share/doc/packages/dealii/doxygen/deal.II/step_25.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_25.html	2024-03-17 21:57:44.711242130 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_25.html	2024-03-17 21:57:44.715242155 +0000
@@ -138,57 +138,57 @@
 <dl class="section note"><dt>Note</dt><dd>We will cover a separate nonlinear equation from quantum mechanics, the Nonlinear Schr&ouml;dinger Equation, in <a class="el" href="step_58.html">step-58</a>.</dd></dl>
 <p><a class="anchor" id="Statementoftheproblem"></a></p><h3>Statement of the problem</h3>
 <p>The sine-Gordon initial-boundary-value problem (IBVP) we wish to solve consists of the following equations:  </p><p class="formulaDsp">
-<picture><source srcset="form_3484_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3493_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   u_{tt}-\Delta u &amp;=&amp; -\sin(u) \quad\mbox{for}\quad (x,t) \in \Omega \times (t_0,t_f],\\
   {\mathbf n} \cdot \nabla u &amp;=&amp; 0 \quad\mbox{for}\quad (x,t) \in \partial\Omega
            \times (t_0,t_f],\\
   u(x,t_0) &amp;=&amp; u_0(x).
-\end{eqnarray*}" src="form_3484.png"/></picture>
+\end{eqnarray*}" src="form_3493.png"/></picture>
 </p>
-<p> It is a nonlinear equation similar to the wave equation we discussed in <a class="el" href="step_23.html">step-23</a> and <a class="el" href="step_24.html">step-24</a>. We have chosen to enforce zero Neumann boundary conditions in order for waves to reflect off the boundaries of our domain. It should be noted, however, that Dirichlet boundary conditions are not appropriate for this problem. Even though the solutions to the sine-Gordon equation are localized, it only makes sense to specify (Dirichlet) boundary conditions at <picture><source srcset="form_3485_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=\pm\infty$" src="form_3485.png"/></picture>, otherwise either a solution does not exist or only the trivial solution <picture><source srcset="form_3486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=0$" src="form_3486.png"/></picture> exists.</p>
-<p>However, the form of the equation above is not ideal for numerical discretization. If we were to discretize the second-order time derivative directly and accurately, then we would need a large stencil (i.e., several time steps would need to be kept in the memory), which could become expensive. Therefore, in complete analogy to what we did in <a class="el" href="step_23.html">step-23</a> and <a class="el" href="step_24.html">step-24</a>, we split the second-order (in time) sine-Gordon equation into a system of two first-order (in time) equations, which we call the split, or velocity, formulation. To this end, by setting <picture><source srcset="form_3488_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v = u_t$" src="form_3488.png"/></picture>, it is easy to see that the sine-Gordon equation is equivalent to  </p><p class="formulaDsp">
-<picture><source srcset="form_3489_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> It is a nonlinear equation similar to the wave equation we discussed in <a class="el" href="step_23.html">step-23</a> and <a class="el" href="step_24.html">step-24</a>. We have chosen to enforce zero Neumann boundary conditions in order for waves to reflect off the boundaries of our domain. It should be noted, however, that Dirichlet boundary conditions are not appropriate for this problem. Even though the solutions to the sine-Gordon equation are localized, it only makes sense to specify (Dirichlet) boundary conditions at <picture><source srcset="form_3494_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=\pm\infty$" src="form_3494.png"/></picture>, otherwise either a solution does not exist or only the trivial solution <picture><source srcset="form_3495_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=0$" src="form_3495.png"/></picture> exists.</p>
+<p>However, the form of the equation above is not ideal for numerical discretization. If we were to discretize the second-order time derivative directly and accurately, then we would need a large stencil (i.e., several time steps would need to be kept in the memory), which could become expensive. Therefore, in complete analogy to what we did in <a class="el" href="step_23.html">step-23</a> and <a class="el" href="step_24.html">step-24</a>, we split the second-order (in time) sine-Gordon equation into a system of two first-order (in time) equations, which we call the split, or velocity, formulation. To this end, by setting <picture><source srcset="form_3496_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v = u_t$" src="form_3496.png"/></picture>, it is easy to see that the sine-Gordon equation is equivalent to  </p><p class="formulaDsp">
+<picture><source srcset="form_3497_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   u_t - v &amp;=&amp; 0,\\
   v_t - \Delta u &amp;=&amp; -\sin(u).
-\end{eqnarray*}" src="form_3489.png"/></picture>
+\end{eqnarray*}" src="form_3497.png"/></picture>
 </p>
 <p><a class="anchor" id="Discretizationoftheequationsintime"></a></p><h3>Discretization of the equations in time</h3>
-<p>Now, we can discretize the split formulation in time using the <picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2506.png"/></picture>-method, which has a stencil of only two time steps. By choosing a <picture><source srcset="form_3490_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta\in [0,1]$" src="form_3490.png"/></picture>, the latter discretization allows us to choose from a continuum of schemes. In particular, if we pick <picture><source srcset="form_3202_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=0$" src="form_3202.png"/></picture> or <picture><source srcset="form_3205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=1$" src="form_3205.png"/></picture>, we obtain the first-order accurate explicit or implicit Euler method, respectively. Another important choice is <picture><source srcset="form_3491_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=\frac{1}{2}$" src="form_3491.png"/></picture>, which gives the second-order accurate Crank-Nicolson scheme. Henceforth, a superscript <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> denotes the values of the variables at the <picture><source srcset="form_3492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n^{\mathrm{th}}$" src="form_3492.png"/></picture> time step, i.e. at <picture><source srcset="form_3493_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=t_n \dealcoloneq n k$" src="form_3493.png"/></picture>, where <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> is the (fixed) time step size. Thus, the split formulation of the time-discretized sine-Gordon equation becomes  </p><p class="formulaDsp">
-<picture><source srcset="form_3494_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>Now, we can discretize the split formulation in time using the <picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2513.png"/></picture>-method, which has a stencil of only two time steps. By choosing a <picture><source srcset="form_3498_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta\in [0,1]$" src="form_3498.png"/></picture>, the latter discretization allows us to choose from a continuum of schemes. In particular, if we pick <picture><source srcset="form_3365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=0$" src="form_3365.png"/></picture> or <picture><source srcset="form_3367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=1$" src="form_3367.png"/></picture>, we obtain the first-order accurate explicit or implicit Euler method, respectively. Another important choice is <picture><source srcset="form_3499_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=\frac{1}{2}$" src="form_3499.png"/></picture>, which gives the second-order accurate Crank-Nicolson scheme. Henceforth, a superscript <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> denotes the values of the variables at the <picture><source srcset="form_3500_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n^{\mathrm{th}}$" src="form_3500.png"/></picture> time step, i.e. at <picture><source srcset="form_3501_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=t_n \dealcoloneq n k$" src="form_3501.png"/></picture>, where <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> is the (fixed) time step size. Thus, the split formulation of the time-discretized sine-Gordon equation becomes  </p><p class="formulaDsp">
+<picture><source srcset="form_3502_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \frac{u^n - u^{n-1}}{k} - \left[\theta v^n + (1-\theta) v^{n-1}\right] &amp;=&amp; 0,\\
   \frac{v^n - v^{n-1}}{k} - \Delta\left[\theta u^n + (1-\theta) u^{n-1}\right]
   &amp;=&amp; -\sin\left[\theta u^n + (1-\theta) u^{n-1}\right].
-\end{eqnarray*}" src="form_3494.png"/></picture>
+\end{eqnarray*}" src="form_3502.png"/></picture>
 </p>
-<p>We can simplify the latter via a bit of algebra. Eliminating <picture><source srcset="form_3211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^n$" src="form_3211.png"/></picture> from the first equation and rearranging, we obtain  </p><p class="formulaDsp">
-<picture><source srcset="form_3495_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>We can simplify the latter via a bit of algebra. Eliminating <picture><source srcset="form_3371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^n$" src="form_3371.png"/></picture> from the first equation and rearranging, we obtain  </p><p class="formulaDsp">
+<picture><source srcset="form_3503_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \left[ 1-k^2\theta^2\Delta \right] u^n &amp;=&amp;
          \left[ 1+k^2\theta(1-\theta)\Delta\right] u^{n-1} + k v^{n-1}
          - k^2\theta\sin\left[\theta u^n + (1-\theta) u^{n-1}\right],\\
    v^n &amp;=&amp; v^{n-1} + k\Delta\left[ \theta u^n + (1-\theta) u^{n-1}\right]
          - k\sin\left[ \theta u^n + (1-\theta) u^{n-1} \right].
-\end{eqnarray*}" src="form_3495.png"/></picture>
+\end{eqnarray*}" src="form_3503.png"/></picture>
 </p>
-<p>It may seem as though we can just proceed to discretize the equations in space at this point. While this is true for the second equation (which is linear in <picture><source srcset="form_3211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^n$" src="form_3211.png"/></picture>), this would not work for all <picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2506.png"/></picture> since the first equation above is nonlinear. Therefore, a nonlinear solver must be implemented, then the equations can be discretized in space and solved.</p>
-<p>To this end, we can use Newton's method. Given the nonlinear equation <picture><source srcset="form_3496_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u^n) = 0$" src="form_3496.png"/></picture>, we produce successive approximations to <picture><source srcset="form_2863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n$" src="form_2863.png"/></picture> as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_3497_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>It may seem as though we can just proceed to discretize the equations in space at this point. While this is true for the second equation (which is linear in <picture><source srcset="form_3371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^n$" src="form_3371.png"/></picture>), this would not work for all <picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2513.png"/></picture> since the first equation above is nonlinear. Therefore, a nonlinear solver must be implemented, then the equations can be discretized in space and solved.</p>
+<p>To this end, we can use Newton's method. Given the nonlinear equation <picture><source srcset="form_3504_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u^n) = 0$" src="form_3504.png"/></picture>, we produce successive approximations to <picture><source srcset="form_2904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n$" src="form_2904.png"/></picture> as follows:  </p><p class="formulaDsp">
+<picture><source srcset="form_3505_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \mbox{ Find } \delta u^n_l \mbox{ s.t. } F'(u^n_l)\delta u^n_l = -F(u^n_l)
   \mbox{, set }  u^n_{l+1} = u^n_l + \delta u^n_l.
-\end{eqnarray*}" src="form_3497.png"/></picture>
+\end{eqnarray*}" src="form_3505.png"/></picture>
 </p>
-<p> The iteration can be initialized with the old time step, i.e. <picture><source srcset="form_3498_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n_0 = u^{n-1}$" src="form_3498.png"/></picture>, and eventually it will produce a solution to the first equation of the split formulation (see above). For the time discretization of the sine-Gordon equation under consideration here, we have that  </p><p class="formulaDsp">
-<picture><source srcset="form_3499_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> The iteration can be initialized with the old time step, i.e. <picture><source srcset="form_3506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n_0 = u^{n-1}$" src="form_3506.png"/></picture>, and eventually it will produce a solution to the first equation of the split formulation (see above). For the time discretization of the sine-Gordon equation under consideration here, we have that  </p><p class="formulaDsp">
+<picture><source srcset="form_3507_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   F(u^n_l) &amp;=&amp;  \left[ 1-k^2\theta^2\Delta \right] u^n_l -
                  \left[ 1+k^2\theta(1-\theta)\Delta\right] u^{n-1} - k v^{n-1}
                  + k^2\theta\sin\left[\theta u^n_l + (1-\theta) u^{n-1}\right],\\
   F'(u^n_l) &amp;=&amp; 1-k^2\theta^2\Delta + k^2\theta^2\cos\left[\theta u^n_l
                         + (1-\theta) u^{n-1}\right].
-\end{eqnarray*}" src="form_3499.png"/></picture>
+\end{eqnarray*}" src="form_3507.png"/></picture>
 </p>
-<p> Notice that while <picture><source srcset="form_3500_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u^n_l)$" src="form_3500.png"/></picture> is a function, <picture><source srcset="form_3501_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(u^n_l)$" src="form_3501.png"/></picture> is an operator.</p>
+<p> Notice that while <picture><source srcset="form_3508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u^n_l)$" src="form_3508.png"/></picture> is a function, <picture><source srcset="form_3509_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(u^n_l)$" src="form_3509.png"/></picture> is an operator.</p>
 <p><a class="anchor" id="Weakformulationofthetimediscretizedequations"></a></p><h3>Weak formulation of the time-discretized equations</h3>
-<p>With hindsight, we choose both the solution and the test space to be <picture><source srcset="form_3502_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Omega)$" src="form_3502.png"/></picture>. Hence, multiplying by a test function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> and integrating, we obtain the following variational (or weak) formulation of the split formulation (including the nonlinear solver for the first equation) at each time step:  </p><p class="formulaDsp">
-<picture><source srcset="form_3503_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>With hindsight, we choose both the solution and the test space to be <picture><source srcset="form_3510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Omega)$" src="form_3510.png"/></picture>. Hence, multiplying by a test function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> and integrating, we obtain the following variational (or weak) formulation of the split formulation (including the nonlinear solver for the first equation) at each time step:  </p><p class="formulaDsp">
+<picture><source srcset="form_3511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   &amp;\mbox{ Find}&amp; \delta u^n_l \in H^1(\Omega) \mbox{ s.t. }
   \left( F'(u^n_l)\delta u^n_l, \varphi \right)_{\Omega}
   = -\left(F(u^n_l), \varphi \right)_{\Omega} \;\forall\varphi\in H^1(\Omega),
@@ -199,91 +199,91 @@
          - k (1-\theta)\left( \nabla u^{n-1}, \nabla\varphi \right)_{\Omega}
          - k\left(\sin\left[ \theta u^n + (1-\theta) u^{n-1} \right],
          \varphi \right)_{\Omega} \;\forall\varphi\in H^1(\Omega).
-\end{eqnarray*}" src="form_3503.png"/></picture>
+\end{eqnarray*}" src="form_3511.png"/></picture>
 </p>
-<p> Note that the we have used integration by parts and the zero Neumann boundary conditions on all terms involving the Laplacian operator. Moreover, <picture><source srcset="form_3504_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(\cdot)$" src="form_3504.png"/></picture> and <picture><source srcset="form_3505_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(\cdot)$" src="form_3505.png"/></picture> are as defined above, and <picture><source srcset="form_3508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\cdot,\cdot)_{\Omega}$" src="form_3508.png"/></picture> denotes the usual <picture><source srcset="form_1209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2$" src="form_1209.png"/></picture> inner product over the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, i.e. <picture><source srcset="form_3510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(f,g)_{\Omega} = \int_\Omega fg
-\,\mathrm{d}x$" src="form_3510.png"/></picture>. Finally, notice that the first equation is, in fact, the definition of an iterative procedure, so it is solved multiple times during each time step until a stopping criterion is met.</p>
+<p> Note that the we have used integration by parts and the zero Neumann boundary conditions on all terms involving the Laplacian operator. Moreover, <picture><source srcset="form_3512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(\cdot)$" src="form_3512.png"/></picture> and <picture><source srcset="form_3513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(\cdot)$" src="form_3513.png"/></picture> are as defined above, and <picture><source srcset="form_3514_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\cdot,\cdot)_{\Omega}$" src="form_3514.png"/></picture> denotes the usual <picture><source srcset="form_1209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2$" src="form_1209.png"/></picture> inner product over the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, i.e. <picture><source srcset="form_3515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(f,g)_{\Omega} = \int_\Omega fg
+\,\mathrm{d}x$" src="form_3515.png"/></picture>. Finally, notice that the first equation is, in fact, the definition of an iterative procedure, so it is solved multiple times during each time step until a stopping criterion is met.</p>
 <p><a class="anchor" id="Discretizationoftheweakformulationinspace"></a></p><h3>Discretization of the weak formulation in space</h3>
-<p>Using the Finite Element Method, we discretize the variational formulation in space. To this end, let <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture> be a finite-dimensional <picture><source srcset="form_3502_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Omega)$" src="form_3502.png"/></picture>-conforming finite element space ( <picture><source srcset="form_3511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{dim}\, V_h = N
-&lt; \infty$" src="form_3511.png"/></picture>) with nodal basis <picture><source srcset="form_3512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi_1,\ldots,\varphi_N\}$" src="form_3512.png"/></picture>. Now, we can expand all functions in the weak formulation (see above) in terms of the nodal basis. Henceforth, we shall denote by a capital letter the vector of coefficients (in the nodal basis) of a function denoted by the same letter in lower case; e.g., <picture><source srcset="form_3513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n = \sum_{i=1}^N
-U^n_i \varphi_i$" src="form_3513.png"/></picture> where <picture><source srcset="form_3514_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^n \in {R}^N$" src="form_3514.png"/></picture> and <picture><source srcset="form_3515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n \in
-H^1(\Omega)$" src="form_3515.png"/></picture>. Thus, the finite-dimensional version of the variational formulation requires that we solve the following matrix equations at each time step:  </p><p class="formulaDsp">
-<picture><source srcset="form_3516_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>Using the Finite Element Method, we discretize the variational formulation in space. To this end, let <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture> be a finite-dimensional <picture><source srcset="form_3510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Omega)$" src="form_3510.png"/></picture>-conforming finite element space ( <picture><source srcset="form_3516_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{dim}\, V_h = N
+&lt; \infty$" src="form_3516.png"/></picture>) with nodal basis <picture><source srcset="form_3517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi_1,\ldots,\varphi_N\}$" src="form_3517.png"/></picture>. Now, we can expand all functions in the weak formulation (see above) in terms of the nodal basis. Henceforth, we shall denote by a capital letter the vector of coefficients (in the nodal basis) of a function denoted by the same letter in lower case; e.g., <picture><source srcset="form_3518_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n = \sum_{i=1}^N
+U^n_i \varphi_i$" src="form_3518.png"/></picture> where <picture><source srcset="form_3519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^n \in {R}^N$" src="form_3519.png"/></picture> and <picture><source srcset="form_3520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^n \in
+H^1(\Omega)$" src="form_3520.png"/></picture>. Thus, the finite-dimensional version of the variational formulation requires that we solve the following matrix equations at each time step:  </p><p class="formulaDsp">
+<picture><source srcset="form_3521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   F_h'(U^{n,l})\delta U^{n,l} &amp;=&amp; -F_h(U^{n,l}), \qquad
         U^{n,l+1} = U^{n,l} + \delta U^{n,l}, \qquad U^{n,0} = U^{n-1}; \\
   MV^n &amp;=&amp; MV^{n-1} - k \theta AU^n -k (1-\theta) AU^{n-1} - k S(u^n,u^{n-1}).
-\end{eqnarray*}" src="form_3516.png"/></picture>
+\end{eqnarray*}" src="form_3521.png"/></picture>
 </p>
-<p> Above, the matrix <picture><source srcset="form_3517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_h'(\cdot)$" src="form_3517.png"/></picture> and the vector <picture><source srcset="form_3518_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_h(\cdot)$" src="form_3518.png"/></picture> denote the discrete versions of the gadgets discussed above, i.e.,  </p><p class="formulaDsp">
-<picture><source srcset="form_3519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> Above, the matrix <picture><source srcset="form_3522_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_h'(\cdot)$" src="form_3522.png"/></picture> and the vector <picture><source srcset="form_3523_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_h(\cdot)$" src="form_3523.png"/></picture> denote the discrete versions of the gadgets discussed above, i.e.,  </p><p class="formulaDsp">
+<picture><source srcset="form_3524_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   F_h(U^{n,l}) &amp;=&amp;  \left[ M+k^2\theta^2A \right] U^{n,l} -
                 \left[ M-k^2\theta(1-\theta)A \right] U^{n-1} - k MV^{n-1}
                 + k^2\theta S(u^n_l, u^{n-1}),\\
   F_h'(U^{n,l}) &amp;=&amp; M+k^2\theta^2A
                                 + k^2\theta^2N(u^n_l,u^{n-1})
-\end{eqnarray*}" src="form_3519.png"/></picture>
+\end{eqnarray*}" src="form_3524.png"/></picture>
 </p>
-<p> Again, note that the first matrix equation above is, in fact, the definition of an iterative procedure, so it is solved multiple times until a stopping criterion is met. Moreover, <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> is the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>, i.e. <picture><source srcset="form_3520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_{ij} = \left( \varphi_i,\varphi_j \right)_{\Omega}$" src="form_3520.png"/></picture>, <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is the Laplace matrix, i.e. <picture><source srcset="form_3521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij} = \left( \nabla \varphi_i, \nabla
-\varphi_j \right)_{\Omega}$" src="form_3521.png"/></picture>, <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> is the nonlinear term in the equation that defines our auxiliary velocity variable, i.e. <picture><source srcset="form_3522_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_j(f,g) = \left(
-  \sin\left[ \theta f + (1-\theta) g\right], \varphi_j \right)_{\Omega}$" src="form_3522.png"/></picture>, and <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> is the nonlinear term in the Jacobian matrix of <picture><source srcset="form_3504_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(\cdot)$" src="form_3504.png"/></picture>, i.e. <picture><source srcset="form_3523_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N_{ij}(f,g) = \left( \cos\left[ \theta f + (1-\theta) g\right]\varphi_i,
-  \varphi_j \right)_{\Omega}$" src="form_3523.png"/></picture>.</p>
+<p> Again, note that the first matrix equation above is, in fact, the definition of an iterative procedure, so it is solved multiple times until a stopping criterion is met. Moreover, <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> is the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>, i.e. <picture><source srcset="form_3525_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_{ij} = \left( \varphi_i,\varphi_j \right)_{\Omega}$" src="form_3525.png"/></picture>, <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is the Laplace matrix, i.e. <picture><source srcset="form_3526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij} = \left( \nabla \varphi_i, \nabla
+\varphi_j \right)_{\Omega}$" src="form_3526.png"/></picture>, <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> is the nonlinear term in the equation that defines our auxiliary velocity variable, i.e. <picture><source srcset="form_3527_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_j(f,g) = \left(
+  \sin\left[ \theta f + (1-\theta) g\right], \varphi_j \right)_{\Omega}$" src="form_3527.png"/></picture>, and <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> is the nonlinear term in the Jacobian matrix of <picture><source srcset="form_3512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(\cdot)$" src="form_3512.png"/></picture>, i.e. <picture><source srcset="form_3528_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N_{ij}(f,g) = \left( \cos\left[ \theta f + (1-\theta) g\right]\varphi_i,
+  \varphi_j \right)_{\Omega}$" src="form_3528.png"/></picture>.</p>
 <p>What solvers can we use for the first equation? Let's look at the matrix we have to invert:  </p><p class="formulaDsp">
-<picture><source srcset="form_3524_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3529_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (M+k^2\theta^2(A + N))_{ij} =
   \int_\Omega (1+k^2\theta^2 \cos \alpha)
   \varphi_i\varphi_j \; dx
   + k^2 \theta^2 \int_\Omega \nabla\varphi_i\nabla\varphi_j \; dx,
-\]" src="form_3524.png"/></picture>
+\]" src="form_3529.png"/></picture>
 </p>
-<p> for some <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> that depends on the present and previous solution. First, note that the matrix is symmetric. In addition, if the time step <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> is small enough, i.e. if <picture><source srcset="form_3525_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k\theta&lt;1$" src="form_3525.png"/></picture>, then the matrix is also going to be positive definite. In the program below, this will always be the case, so we will use the Conjugate Gradient method together with the SSOR method as preconditioner. We should keep in mind, however, that this will fail if we happen to use a bigger time step. Fortunately, in that case the solver will just throw an exception indicating a failure to converge, rather than silently producing a wrong result. If that happens, then we can simply replace the CG method by something that can handle indefinite symmetric systems. The GMRES solver is typically the standard method for all "bad" linear systems, but it is also a slow one. Possibly better would be a solver that utilizes the symmetry, such as, for example, SymmLQ, which is also implemented in deal.II.</p>
-<p>This program uses a clever optimization over <a class="el" href="step_23.html">step-23</a> and <a class="el" href="step_24.html">step-24</a>: If you read the above formulas closely, it becomes clear that the velocity <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> only ever appears in products with the mass matrix. In <a class="el" href="step_23.html">step-23</a> and <a class="el" href="step_24.html">step-24</a>, we were, therefore, a bit wasteful: in each time step, we would solve a linear system with the mass matrix, only to multiply the solution of that system by <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> again in the next time step. This can, of course, be avoided, and we do so in this program.</p>
+<p> for some <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> that depends on the present and previous solution. First, note that the matrix is symmetric. In addition, if the time step <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> is small enough, i.e. if <picture><source srcset="form_3530_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k\theta&lt;1$" src="form_3530.png"/></picture>, then the matrix is also going to be positive definite. In the program below, this will always be the case, so we will use the Conjugate Gradient method together with the SSOR method as preconditioner. We should keep in mind, however, that this will fail if we happen to use a bigger time step. Fortunately, in that case the solver will just throw an exception indicating a failure to converge, rather than silently producing a wrong result. If that happens, then we can simply replace the CG method by something that can handle indefinite symmetric systems. The GMRES solver is typically the standard method for all "bad" linear systems, but it is also a slow one. Possibly better would be a solver that utilizes the symmetry, such as, for example, SymmLQ, which is also implemented in deal.II.</p>
+<p>This program uses a clever optimization over <a class="el" href="step_23.html">step-23</a> and <a class="el" href="step_24.html">step-24</a>: If you read the above formulas closely, it becomes clear that the velocity <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> only ever appears in products with the mass matrix. In <a class="el" href="step_23.html">step-23</a> and <a class="el" href="step_24.html">step-24</a>, we were, therefore, a bit wasteful: in each time step, we would solve a linear system with the mass matrix, only to multiply the solution of that system by <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> again in the next time step. This can, of course, be avoided, and we do so in this program.</p>
 <p><a class="anchor" id="Thetestcase"></a></p><h3>The test case</h3>
 <p>There are a few analytical solutions for the sine-Gordon equation, both in 1D and 2D. In particular, the program as is computes the solution to a problem with a single kink-like solitary wave initial condition. This solution is given by Leibbrandt in <em>Phys</em>. <em>Rev</em>. <em>Lett</em>. <b>41</b>(7), and is implemented in the <code>ExactSolution</code> class.</p>
 <p>It should be noted that this closed-form solution, strictly speaking, only holds for the infinite-space initial-value problem (not the Neumann initial-boundary-value problem under consideration here). However, given that we impose <em>zero</em> Neumann boundary conditions, we expect that the solution to our initial-boundary-value problem would be close to the solution of the infinite-space initial-value problem, if reflections of waves off the boundaries of our domain do <em>not</em> occur. In practice, this is of course not the case, but we can at least assume that this were so.</p>
-<p>The constants <picture><source srcset="form_3530_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vartheta$" src="form_3530.png"/></picture> and <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> in the 2D solution and <picture><source srcset="form_3530_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vartheta$" src="form_3530.png"/></picture>, <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> and <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture> in the 3D solution are called the B&auml;cklund transformation parameters. They control such things as the orientation and steepness of the kink. For the purposes of testing the code against the exact solution, one should choose the parameters so that the kink is aligned with the grid.</p>
+<p>The constants <picture><source srcset="form_3531_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vartheta$" src="form_3531.png"/></picture> and <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> in the 2D solution and <picture><source srcset="form_3531_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vartheta$" src="form_3531.png"/></picture>, <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> and <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture> in the 3D solution are called the B&auml;cklund transformation parameters. They control such things as the orientation and steepness of the kink. For the purposes of testing the code against the exact solution, one should choose the parameters so that the kink is aligned with the grid.</p>
 <p>The solutions that we implement in the <code>ExactSolution</code> class are these: </p><ul>
 <li>
 <p class="startli">In 1D:  </p><p class="formulaDsp">
-<picture><source srcset="form_3531_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   u(x,t) =
   -4 \arctan\left[
      \frac{m}{\sqrt{1-m^2}}
      \frac{\sin\left(\sqrt{1-m^2}t+c_2\right)}
      {\cosh\left(mx+c_1\right)}
      \right],
-  \]" src="form_3531.png"/></picture>
+  \]" src="form_3532.png"/></picture>
 </p>
-<p> where we choose <picture><source srcset="form_3532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=\frac 12, c_1=c_2=0$" src="form_3532.png"/></picture>.</p>
+<p> where we choose <picture><source srcset="form_3533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m=\frac 12, c_1=c_2=0$" src="form_3533.png"/></picture>.</p>
 <p class="interli">In 1D, more interesting analytical solutions are known. Many of them are listed on <a href="http://mathworld.wolfram.com/Sine-GordonEquation.html">http://mathworld.wolfram.com/Sine-GordonEquation.html</a> .</p>
 <p class="endli"></p>
 </li>
 <li>
 <p class="startli">In 2D:  </p><p class="formulaDsp">
-<picture><source srcset="form_3533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3534_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     u(x,y,t) = 4 \arctan \left[a_0 e^{s\xi}\right],
-  \]" src="form_3533.png"/></picture>
+  \]" src="form_3534.png"/></picture>
 </p>
 <p> where <picture><source srcset="form_551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi$" src="form_551.png"/></picture> is defined as  </p><p class="formulaDsp">
-<picture><source srcset="form_3534_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3535_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     \xi = x \cos\vartheta + \sin(\vartheta) (y\cosh\lambda + t\sinh \lambda),
-  \]" src="form_3534.png"/></picture>
+  \]" src="form_3535.png"/></picture>
 </p>
-<p> and where we choose <picture><source srcset="form_3535_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vartheta=\frac \pi 4, \lambda=a_0=s=1$" src="form_3535.png"/></picture>.</p>
+<p> and where we choose <picture><source srcset="form_3536_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\vartheta=\frac \pi 4, \lambda=a_0=s=1$" src="form_3536.png"/></picture>.</p>
 <p class="endli"></p>
 </li>
 <li>
 In 3D:  <p class="formulaDsp">
-<picture><source srcset="form_3536_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     u(x,y,z,t) = 4 \arctan \left[c_0 e^{s\xi}\right],
-  \]" src="form_3536.png"/></picture>
+  \]" src="form_3537.png"/></picture>
 </p>
  where <picture><source srcset="form_551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi$" src="form_551.png"/></picture> is defined as  <p class="formulaDsp">
-<picture><source srcset="form_3537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     \xi = x \cos\vartheta + y \sin \vartheta \cos\phi +
           \sin \vartheta \sin\phi (z\cosh\tau + t\sinh \tau),
/usr/share/doc/packages/dealii/doxygen/deal.II/step_26.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_26.html	2024-03-17 21:57:44.767242476 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_26.html	2024-03-17 21:57:44.775242525 +0000
@@ -166,8 +166,8 @@
   \right].
 \end{align*}" src="form_3608.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_3609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n=t_n-t_{n-1}$" src="form_3609.png"/></picture> is the time step size. The theta-scheme generalizes the explicit Euler ( <picture><source srcset="form_3202_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=0$" src="form_3202.png"/></picture>), implicit Euler ( <picture><source srcset="form_3205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=1$" src="form_3205.png"/></picture>) and Crank-Nicolson ( <picture><source srcset="form_3208_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=\frac 12$" src="form_3208.png"/></picture>) time discretizations. Since the latter has the highest convergence order, we will choose <picture><source srcset="form_3208_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=\frac 12$" src="form_3208.png"/></picture> in the program below, but make it so that playing with this parameter remains simple. (If you are interested in playing with higher order methods, take a look at <a class="el" href="step_52.html">step-52</a>.)</p>
-<p>Given this time discretization, space discretization happens as it always does, by multiplying with test functions, integrating by parts, and then restricting everything to a finite dimensional subspace. This yields the following set of fully discrete equations after multiplying through with <picture><source srcset="form_156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n$" src="form_156.png"/></picture>:  </p><p class="formulaDsp">
+<p> Here, <picture><source srcset="form_3609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n=t_n-t_{n-1}$" src="form_3609.png"/></picture> is the time step size. The theta-scheme generalizes the explicit Euler ( <picture><source srcset="form_3365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=0$" src="form_3365.png"/></picture>), implicit Euler ( <picture><source srcset="form_3367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=1$" src="form_3367.png"/></picture>) and Crank-Nicolson ( <picture><source srcset="form_3369_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=\frac 12$" src="form_3369.png"/></picture>) time discretizations. Since the latter has the highest convergence order, we will choose <picture><source srcset="form_3369_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=\frac 12$" src="form_3369.png"/></picture> in the program below, but make it so that playing with this parameter remains simple. (If you are interested in playing with higher order methods, take a look at <a class="el" href="step_52.html">step-52</a>.)</p>
+<p>Given this time discretization, space discretization happens as it always does, by multiplying with test functions, integrating by parts, and then restricting everything to a finite dimensional subspace. This yields the following set of fully discrete equations after multiplying through with <picture><source srcset="form_130_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n$" src="form_130.png"/></picture>:  </p><p class="formulaDsp">
 <picture><source srcset="form_3610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   M U^n-MU^{n-1}
   +
@@ -185,7 +185,7 @@
   \right],
 \end{align*}" src="form_3610.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> is the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> and <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is the <a class="el" href="DEALGlossary.html#href_anchor">stiffness matrix</a> that results from discretizing the Laplacian. Bringing all known quantities to the right hand side yields the linear system we have to solve in every step:  </p><p class="formulaDsp">
+<p> where <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> is the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> and <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is the <a class="el" href="DEALGlossary.html#href_anchor">stiffness matrix</a> that results from discretizing the Laplacian. Bringing all known quantities to the right hand side yields the linear system we have to solve in every step:  </p><p class="formulaDsp">
 <picture><source srcset="form_3611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   (M
   +
@@ -211,7 +211,7 @@
 <ul>
 <li>
 <p class="startli"><em>Time step size and minimal mesh size</em>: For stationary problems, the general approach is "make the mesh as fine as it is necessary". For problems with singularities, this often leads to situations where we get many levels of refinement into corners or along interfaces. The very first tutorial to use adaptive meshes, <a class="el" href="step_6.html">step-6</a>, is a point in case already.</p>
-<p class="interli">However, for time dependent problems, we typically need to choose the time step related to the mesh size. For explicit time discretizations, this is obvious, since we need to respect a CFL condition that ties the time step size to the smallest mesh size. For implicit time discretizations, no such hard restriction exists, but in practice we still want to make the time step smaller if we make the mesh size smaller since we typically have error estimates of the form <picture><source srcset="form_3613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|e\| \le {\cal O}(k^p + h^q)$" src="form_3613.png"/></picture> where <picture><source srcset="form_1814_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p,q$" src="form_1814.png"/></picture> are the convergence orders of the time and space discretization, respectively. We can only make the error small if we decrease both terms. Ideally, an estimate like this would suggest to choose <picture><source srcset="form_3614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k \propto h^{q/p}$" src="form_3614.png"/></picture>. Because, at least for problems with non-smooth solutions, the error is typically localized in the cells with the smallest mesh size, we have to indeed choose <picture><source srcset="form_3615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k \propto h_{\text{min}}^{q/p}$" src="form_3615.png"/></picture>, using the <em>smallest</em> mesh size.</p>
+<p class="interli">However, for time dependent problems, we typically need to choose the time step related to the mesh size. For explicit time discretizations, this is obvious, since we need to respect a CFL condition that ties the time step size to the smallest mesh size. For implicit time discretizations, no such hard restriction exists, but in practice we still want to make the time step smaller if we make the mesh size smaller since we typically have error estimates of the form <picture><source srcset="form_3613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|e\| \le {\cal O}(k^p + h^q)$" src="form_3613.png"/></picture> where <picture><source srcset="form_1784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p,q$" src="form_1784.png"/></picture> are the convergence orders of the time and space discretization, respectively. We can only make the error small if we decrease both terms. Ideally, an estimate like this would suggest to choose <picture><source srcset="form_3614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k \propto h^{q/p}$" src="form_3614.png"/></picture>. Because, at least for problems with non-smooth solutions, the error is typically localized in the cells with the smallest mesh size, we have to indeed choose <picture><source srcset="form_3615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k \propto h_{\text{min}}^{q/p}$" src="form_3615.png"/></picture>, using the <em>smallest</em> mesh size.</p>
 <p class="interli">The consequence is that refining the mesh further in one place implies not only the moderate additional effort of increasing the number of degrees of freedom slightly, but also the much larger effort of having the solve the <em>global</em> linear system more often because of the smaller time step.</p>
 <p class="interli">In practice, one typically deals with this by acknowledging that we can not make the time step arbitrarily small, and consequently can not make the local mesh size arbitrarily small. Rather, we set a maximal level of refinement and when we flag cells for refinement, we simply do not refine those cells whose children would exceed this maximal level of refinement.</p>
 <p class="interli">There is a similar problem in that we will choose a right hand side that will switch on in different parts of the domain at different times. To avoid being caught flat footed with too coarse a mesh in areas where we suddenly need a finer mesh, we will also enforce in our program a <em>minimal</em> mesh refinement level.</p>
@@ -242,7 +242,7 @@
     \sum_j U^n \varphi_j(\mathbf x),
   \end{align*}" src="form_3618.png"/></picture>
 </p>
-<p> multiply with test functions <picture><source srcset="form_166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i(\mathbf x)$" src="form_166.png"/></picture> and integrate by parts where necessary. In a process as outlined above, this would yield  </p><p class="formulaDsp">
+<p> multiply with test functions <picture><source srcset="form_140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i(\mathbf x)$" src="form_140.png"/></picture> and integrate by parts where necessary. In a process as outlined above, this would yield  </p><p class="formulaDsp">
 <picture><source srcset="form_3619_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     \sum_j
     (M
@@ -262,7 +262,7 @@
     \right].
   \end{align*}" src="form_3619.png"/></picture>
 </p>
-<p> Now imagine that we have changed the mesh between time steps <picture><source srcset="form_3242_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n-1$" src="form_3242.png"/></picture> and <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>. Then the problem is that the basis functions we use for <picture><source srcset="form_3620_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h^n$" src="form_3620.png"/></picture> and <picture><source srcset="form_3617_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{n-1}$" src="form_3617.png"/></picture> are different! This pertains to the terms on the right hand side, the first of which we could more clearly write as (the second follows the same pattern)  </p><p class="formulaDsp">
+<p> Now imagine that we have changed the mesh between time steps <picture><source srcset="form_3389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n-1$" src="form_3389.png"/></picture> and <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>. Then the problem is that the basis functions we use for <picture><source srcset="form_3620_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h^n$" src="form_3620.png"/></picture> and <picture><source srcset="form_3617_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{n-1}$" src="form_3617.png"/></picture> are different! This pertains to the terms on the right hand side, the first of which we could more clearly write as (the second follows the same pattern)  </p><p class="formulaDsp">
 <picture><source srcset="form_3621_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     (\varphi_i, u_h^{n-1})
     =
@@ -274,7 +274,7 @@
     i=1\ldots N_n.
   \end{align*}" src="form_3621.png"/></picture>
 </p>
-<p> If the meshes used in these two time steps are the same, then <picture><source srcset="form_3622_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\varphi_i^n, \varphi_j^{n-1})$" src="form_3622.png"/></picture> forms a square mass matrix <picture><source srcset="form_159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_{ij}$" src="form_159.png"/></picture>. However, if the meshes are not the same, then in general the matrix is rectangular. Worse, it is difficult to even compute these integrals because if we loop over the cells of the mesh at time step <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>, then we need to evaluate <picture><source srcset="form_3623_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j^{n-1}$" src="form_3623.png"/></picture> at the quadrature points of these cells, but they do not necessarily correspond to the cells of the mesh at time step <picture><source srcset="form_3242_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n-1$" src="form_3242.png"/></picture> and <picture><source srcset="form_3623_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j^{n-1}$" src="form_3623.png"/></picture> is not defined via these cells; the same of course applies if we wanted to compute the integrals via integration on the cells of mesh <picture><source srcset="form_3242_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n-1$" src="form_3242.png"/></picture>.</p>
+<p> If the meshes used in these two time steps are the same, then <picture><source srcset="form_3622_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\varphi_i^n, \varphi_j^{n-1})$" src="form_3622.png"/></picture> forms a square mass matrix <picture><source srcset="form_133_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_{ij}$" src="form_133.png"/></picture>. However, if the meshes are not the same, then in general the matrix is rectangular. Worse, it is difficult to even compute these integrals because if we loop over the cells of the mesh at time step <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>, then we need to evaluate <picture><source srcset="form_3623_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j^{n-1}$" src="form_3623.png"/></picture> at the quadrature points of these cells, but they do not necessarily correspond to the cells of the mesh at time step <picture><source srcset="form_3389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n-1$" src="form_3389.png"/></picture> and <picture><source srcset="form_3623_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j^{n-1}$" src="form_3623.png"/></picture> is not defined via these cells; the same of course applies if we wanted to compute the integrals via integration on the cells of mesh <picture><source srcset="form_3389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n-1$" src="form_3389.png"/></picture>.</p>
 <p class="interli">In any case, what we have to face is a situation where we need to integrate shape functions defined on two different meshes. This can be done, and is in fact demonstrated in <a class="el" href="step_28.html">step-28</a>, but the process is at best described by the word "awkward".</p>
 <p class="endli">In practice, one does not typically want to do this. Rather, we avoid the whole situation by interpolating the solution from the old to the new mesh every time we adapt the mesh. In other words, rather than solving the equations above, we instead solve the problem  </p><p class="formulaDsp">
 <picture><source srcset="form_3624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
@@ -296,14 +296,14 @@
     \right],
   \end{align*}" src="form_3624.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_3625_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_h^n$" src="form_3625.png"/></picture> is the interpolation operator onto the finite element space used in time step <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>. This is not the optimal approach since it introduces an additional error besides time and space discretization, but it is a pragmatic one that makes it feasible to do time adapting meshes. </p>
+<p> where <picture><source srcset="form_3625_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_h^n$" src="form_3625.png"/></picture> is the interpolation operator onto the finite element space used in time step <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>. This is not the optimal approach since it introduces an additional error besides time and space discretization, but it is a pragmatic one that makes it feasible to do time adapting meshes. </p>
 </li>
 </ul>
 <p><a class="anchor" id="WhatcouldpossiblygowrongVerifyingwhetherthecodeiscorrect"></a></p><h3>What could possibly go wrong? Verifying whether the code is correct </h3>
 <p>There are a number of things one can typically get wrong when implementing a finite element code. In particular, for time dependent problems, the following are common sources of bugs:</p><ul>
-<li>The time integration, for example by getting the coefficients in front of the terms involving the current and previous time steps wrong (e.g., mixing up a factor <picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2506.png"/></picture> for <picture><source srcset="form_3626_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1-\theta$" src="form_3626.png"/></picture>).</li>
-<li>Handling the right hand side, for example forgetting a factor of <picture><source srcset="form_156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n$" src="form_156.png"/></picture> or <picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2506.png"/></picture>.</li>
-<li>Mishandling the boundary values, again for example forgetting a factor of <picture><source srcset="form_156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n$" src="form_156.png"/></picture> or <picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2506.png"/></picture>, or forgetting to apply nonzero boundary values not only to the right hand side but also to the system matrix.</li>
+<li>The time integration, for example by getting the coefficients in front of the terms involving the current and previous time steps wrong (e.g., mixing up a factor <picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2513.png"/></picture> for <picture><source srcset="form_3626_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1-\theta$" src="form_3626.png"/></picture>).</li>
+<li>Handling the right hand side, for example forgetting a factor of <picture><source srcset="form_130_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n$" src="form_130.png"/></picture> or <picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2513.png"/></picture>.</li>
+<li>Mishandling the boundary values, again for example forgetting a factor of <picture><source srcset="form_130_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n$" src="form_130.png"/></picture> or <picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2513.png"/></picture>, or forgetting to apply nonzero boundary values not only to the right hand side but also to the system matrix.</li>
 </ul>
 <p>A less common problem is getting the initial conditions wrong because one can typically see that it is wrong by just outputting the first time step. In any case, in order to verify the correctness of the code, it is helpful to have a testing protocol that allows us to verify each of these components separately. This means:</p><ul>
 <li>Testing the code with nonzero initial conditions but zero right hand side and boundary values and verifying that the time evolution is correct.</li>
@@ -339,7 +339,7 @@
 \end{align*}" src="form_3637.png"/></picture>
 </p>
 <p> In other words, if the initial condition is a product of sines, then the solution has exactly the same shape of a product of sines that decays to zero with a known time dependence. This is something that is easy to test if you have a sufficiently fine mesh and sufficiently small time step.</p>
-<p>What is typically going to happen if you get the time integration scheme wrong (e.g., by having the wrong factors of <picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2506.png"/></picture> or <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> in front of the various terms) is that you don't get the right temporal behavior of the solution. Double check the various factors until you get the right behavior. You may also want to verify that the temporal decay rate (as determined, for example, by plotting the value of the solution at a fixed point) does not double or halve each time you double or halve the time step or mesh size. You know that it's not the handling of the boundary conditions or right hand side because these were both zero.</p>
+<p>What is typically going to happen if you get the time integration scheme wrong (e.g., by having the wrong factors of <picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2513.png"/></picture> or <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> in front of the various terms) is that you don't get the right temporal behavior of the solution. Double check the various factors until you get the right behavior. You may also want to verify that the temporal decay rate (as determined, for example, by plotting the value of the solution at a fixed point) does not double or halve each time you double or halve the time step or mesh size. You know that it's not the handling of the boundary conditions or right hand side because these were both zero.</p>
 <p>If you have so verified that the time integrator is correct, take the situation where the right hand side is nonzero but the initial conditions are zero: <picture><source srcset="form_3601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0(x,y)=0$" src="form_3601.png"/></picture> and <picture><source srcset="form_3638_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x,y,t)=\sin(n_x \pi x) \sin(n_x \pi y)$" src="form_3638.png"/></picture>. Again,  </p><p class="formulaDsp">
 <picture><source srcset="form_3639_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \left(\frac{\partial}{\partial t} -\Delta\right)
@@ -362,7 +362,7 @@
   a(t) = \frac{1}{(n_x^2+n_y^2)\pi^2} \left[ 1 - e^{-(n_x^2+n_y^2)\pi^2 t} \right].
 \end{align*}" src="form_3643.png"/></picture>
 </p>
-<p>Again, if you have the wrong factors of <picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2506.png"/></picture> or <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> in front of the right hand side terms you will either not get the right temporal behavior of the solution, or it will converge to a maximum value other than <picture><source srcset="form_3644_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{1}{(n_x^2+n_y^2)\pi^2}$" src="form_3644.png"/></picture>.</p>
+<p>Again, if you have the wrong factors of <picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2513.png"/></picture> or <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> in front of the right hand side terms you will either not get the right temporal behavior of the solution, or it will converge to a maximum value other than <picture><source srcset="form_3644_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{1}{(n_x^2+n_y^2)\pi^2}$" src="form_3644.png"/></picture>.</p>
 <p>Once we have verified that the time integration and right hand side handling are correct using this scheme, we can go on to verifying that we have the boundary values correct, using a very similar approach.</p>
 <p><a class="anchor" id="Thetestcase"></a></p><h3>The testcase </h3>
 <p>Solving the heat equation on a simple domain with a simple right hand side almost always leads to solutions that are exceedingly boring, since they become very smooth very quickly and then do not move very much any more. Rather, we here solve the equation on the L-shaped domain with zero Dirichlet boundary values and zero initial conditions, but as right hand side we choose  </p><p class="formulaDsp">
@@ -410,7 +410,7 @@
   \right.
 \end{align*}" src="form_3646.png"/></picture>
 </p>
-<p> In other words, in every period of length <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture>, the right hand side first flashes on in domain 1, then off completely, then on in domain 2, then off completely again. This pattern is probably best observed via the little animation of the solution shown in the <a href="#href_anchor">results section</a>.</p>
+<p> In other words, in every period of length <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture>, the right hand side first flashes on in domain 1, then off completely, then on in domain 2, then off completely again. This pattern is probably best observed via the little animation of the solution shown in the <a href="#href_anchor">results section</a>.</p>
 <p>If you interpret the heat equation as finding the spatially and temporally variable temperature distribution of a conducting solid, then the test case above corresponds to an L-shaped body where we keep the boundary at zero temperature, and heat alternatingly in two parts of the domain. While heating is in effect, the temperature rises in these places, after which it diffuses and diminishes again. The point of these initial conditions is that they provide us with a solution that has singularities both in time (when sources switch on and off) as well as time (at the reentrant corner as well as at the edges and corners of the regions where the source acts).</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
 <p>The program starts with the usual include files, all of which you should have seen before by now:</p>
@@ -797,7 +797,7 @@
 <div class="line">          system_rhs.add(-(1 - theta) * time_step, tmp);</div>
 <div class="line">  </div>
 </div><!-- fragment --><p>The second piece is to compute the contributions of the source terms. This corresponds to the term <picture><source srcset="form_3649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n
-   \left[ (1-\theta)F^{n-1} + \theta F^n \right]$" src="form_3649.png"/></picture>. The following code calls <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::create_right_hand_side</a> to compute the vectors <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture>, where we set the time of the right hand side (source) function before we evaluate it. The result of this all ends up in the forcing_terms variable:</p>
+   \left[ (1-\theta)F^{n-1} + \theta F^n \right]$" src="form_3649.png"/></picture>. The following code calls <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::create_right_hand_side</a> to compute the vectors <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture>, where we set the time of the right hand side (source) function before we evaluate it. The result of this all ends up in the forcing_terms variable:</p>
 <div class="fragment"><div class="line">          RightHandSide&lt;dim&gt; rhs_function;</div>
 <div class="line">          rhs_function.set_time(time);</div>
 <div class="line">          <a class="code hl_function" href="namespaceVectorTools.html#href_anchor">VectorTools::create_right_hand_side</a>(dof_handler,</div>
@@ -1006,27 +1006,27 @@
 <p>There are two factors at play. First, there are some islands where cells have been refined but that are surrounded by non-refined cells (and there are probably also a few occasional coarsened islands). These are not terrible, as they most of the time do not affect the approximation quality of the mesh, but they also don't help because so many of their additional degrees of freedom are in fact constrained by hanging node constraints. That said, this is easy to fix: the <a class="el" href="classTriangulation.html">Triangulation</a> class takes an argument to its constructor indicating a level of "mesh smoothing". Passing one of many possible flags, this instructs the triangulation to refine some additional cells, or not to refine some cells, so that the resulting mesh does not have these artifacts.</p>
 <p>The second problem is more severe: the mesh appears to lag the solution. The underlying reason is that we only adapt the mesh once every fifth time step, and only allow for a single refinement in these cases. Whenever a source switches on, the solution had been very smooth in this area before and the mesh was consequently rather coarse. This implies that the next time step when we refine the mesh, we will get one refinement level more in this area, and five time steps later another level, etc. But this is not enough: first, we should refine immediately when a source switches on (after all, in the current context we at least know what the right hand side is), and we should allow for more than one refinement level. Of course, all of this can be done using deal.II, it just requires a bit of algorithmic thinking in how to make this work!</p>
 <p><a class="anchor" id="Positivitypreservation"></a></p><h4>Positivity preservation</h4>
-<p>To increase the accuracy and resolution of your simulation in time, one typically decreases the time step size <picture><source srcset="form_156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n$" src="form_156.png"/></picture>. If you start playing around with the time step in this particular example, you will notice that the solution becomes partly negative, if <picture><source srcset="form_156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n$" src="form_156.png"/></picture> is below a certain threshold. This is not what we would expect to happen (in nature).</p>
+<p>To increase the accuracy and resolution of your simulation in time, one typically decreases the time step size <picture><source srcset="form_130_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n$" src="form_130.png"/></picture>. If you start playing around with the time step in this particular example, you will notice that the solution becomes partly negative, if <picture><source srcset="form_130_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n$" src="form_130.png"/></picture> is below a certain threshold. This is not what we would expect to happen (in nature).</p>
 <p>To get an idea of this behavior mathematically, let us consider a general, fully discrete problem:  </p><p class="formulaDsp">
 <picture><source srcset="form_3651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   A u^{n} = B u^{n-1}.
 \end{align*}" src="form_3651.png"/></picture>
 </p>
-<p> The general form of the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th equation then reads:  </p><p class="formulaDsp">
+<p> The general form of the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th equation then reads:  </p><p class="formulaDsp">
 <picture><source srcset="form_3652_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   a_{ii} u^{n}_i &amp;= b_{ii} u^{n-1}_i +
   \sum\limits_{j \in S_i} \left( b_{ij} u^{n-1}_j - a_{ij} u^{n}_j \right),
 \end{align*}" src="form_3652.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_3653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_i$" src="form_3653.png"/></picture> is the set of degrees of freedom that DoF <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> couples with (i.e., for which either the matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> or matrix <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> has a nonzero entry at position <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture>). If all coefficients fulfill the following conditions:  </p><p class="formulaDsp">
+<p> where <picture><source srcset="form_3653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_i$" src="form_3653.png"/></picture> is the set of degrees of freedom that DoF <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> couples with (i.e., for which either the matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> or matrix <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> has a nonzero entry at position <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture>). If all coefficients fulfill the following conditions:  </p><p class="formulaDsp">
 <picture><source srcset="form_3654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   a_{ii} &amp;&gt; 0, &amp; b_{ii} &amp;\geq 0, &amp; a_{ij} &amp;\leq 0, &amp; b_{ij} &amp;\geq 0,
   &amp;
   \forall j &amp;\in S_i,
 \end{align*}" src="form_3654.png"/></picture>
 </p>
-<p> all solutions <picture><source srcset="form_2828_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{n}$" src="form_2828.png"/></picture> keep their sign from the previous ones <picture><source srcset="form_3617_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{n-1}$" src="form_3617.png"/></picture>, and consequently from the initial values <picture><source srcset="form_2861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^0$" src="form_2861.png"/></picture>. See e.g. <a href="http://bookstore.siam.org/cs14/">Kuzmin, H&auml;m&auml;l&auml;inen</a> for more information on positivity preservation.</p>
-<p>Depending on the PDE to solve and the time integration scheme used, one is able to deduce conditions for the time step <picture><source srcset="form_156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n$" src="form_156.png"/></picture>. For the heat equation with the Crank-Nicolson scheme, <a href="https://doi.org/10.2478/cmam-2010-0025">Schatz et. al.</a> have translated it to the following ones:  </p><p class="formulaDsp">
+<p> all solutions <picture><source srcset="form_2869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{n}$" src="form_2869.png"/></picture> keep their sign from the previous ones <picture><source srcset="form_3617_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{n-1}$" src="form_3617.png"/></picture>, and consequently from the initial values <picture><source srcset="form_2902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^0$" src="form_2902.png"/></picture>. See e.g. <a href="http://bookstore.siam.org/cs14/">Kuzmin, H&auml;m&auml;l&auml;inen</a> for more information on positivity preservation.</p>
+<p>Depending on the PDE to solve and the time integration scheme used, one is able to deduce conditions for the time step <picture><source srcset="form_130_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n$" src="form_130.png"/></picture>. For the heat equation with the Crank-Nicolson scheme, <a href="https://doi.org/10.2478/cmam-2010-0025">Schatz et. al.</a> have translated it to the following ones:  </p><p class="formulaDsp">
 <picture><source srcset="form_3655_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   (1 - \theta) k a_{ii} &amp;\leq m_{ii},\qquad \forall i,
   &amp;
/usr/share/doc/packages/dealii/doxygen/deal.II/step_27.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_27.html	2024-03-17 21:57:44.839242921 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_27.html	2024-03-17 21:57:44.843242945 +0000
@@ -146,7 +146,7 @@
 </ol> </td> </tr> </table>
  <a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p>This tutorial program attempts to show how to use <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture>-finite element methods with deal.II. It solves the Laplace equation and so builds only on the first few tutorial programs, in particular on <a class="el" href="step_4.html">step-4</a> for dimension independent programming and <a class="el" href="step_6.html">step-6</a> for adaptive mesh refinement.</p>
-<p>The <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture>-finite element method was proposed in the early 1980s by Babu&scaron;ka and Guo as an alternative to either (i) mesh refinement (i.e., decreasing the mesh parameter <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> in a finite element computation) or (ii) increasing the polynomial degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> used for shape functions. It is based on the observation that increasing the polynomial degree of the shape functions reduces the approximation error if the solution is sufficiently smooth. On the other hand, it is well known that even for the generally well-behaved class of elliptic problems, higher degrees of regularity can not be guaranteed in the vicinity of boundaries, corners, or where coefficients are discontinuous; consequently, the approximation can not be improved in these areas by increasing the polynomial degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> but only by refining the mesh, i.e., by reducing the mesh size <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>. These differing means to reduce the error have led to the notion of <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture>-finite elements, where the approximating finite element spaces are adapted to have a high polynomial degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> wherever the solution is sufficiently smooth, while the mesh width <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> is reduced at places wherever the solution lacks regularity. It was already realized in the first papers on this method that <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture>-finite elements can be a powerful tool that can guarantee that the error is reduced not only with some negative power of the number of degrees of freedom, but in fact exponentially.</p>
+<p>The <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture>-finite element method was proposed in the early 1980s by Babu&scaron;ka and Guo as an alternative to either (i) mesh refinement (i.e., decreasing the mesh parameter <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> in a finite element computation) or (ii) increasing the polynomial degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> used for shape functions. It is based on the observation that increasing the polynomial degree of the shape functions reduces the approximation error if the solution is sufficiently smooth. On the other hand, it is well known that even for the generally well-behaved class of elliptic problems, higher degrees of regularity can not be guaranteed in the vicinity of boundaries, corners, or where coefficients are discontinuous; consequently, the approximation can not be improved in these areas by increasing the polynomial degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> but only by refining the mesh, i.e., by reducing the mesh size <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>. These differing means to reduce the error have led to the notion of <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture>-finite elements, where the approximating finite element spaces are adapted to have a high polynomial degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> wherever the solution is sufficiently smooth, while the mesh width <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> is reduced at places wherever the solution lacks regularity. It was already realized in the first papers on this method that <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture>-finite elements can be a powerful tool that can guarantee that the error is reduced not only with some negative power of the number of degrees of freedom, but in fact exponentially.</p>
 <p>In order to implement this method, we need several things above and beyond what a usual finite element program needs, and in particular above what we have introduced in the tutorial programs leading up to <a class="el" href="step_6.html">step-6</a>. In particular, we will have to discuss the following aspects: </p><ul>
 <li>
 <p class="startli">Instead of using the same finite element on all cells, we now will want a collection of finite element objects, and associate each cell with one of these objects in this collection.</p>
@@ -223,10 +223,10 @@
 <p>One of the central pieces of the adaptive finite element method is that we inspect the computed solution (a posteriori) with an indicator that tells us which are the cells where the error is largest, and then refine them. In many of the other tutorial programs, we use the <a class="el" href="classKellyErrorEstimator.html">KellyErrorEstimator</a> class to get an indication of the size of the error on a cell, although we also discuss more complicated strategies in some programs, most importantly in <a class="el" href="step_14.html">step-14</a>.</p>
 <p>In any case, as long as the decision is only "refine this cell" or "do not
 refine this cell", the actual refinement step is not particularly challenging. However, here we have a code that is capable of hp-refinement, i.e., we suddenly have two choices whenever we detect that the error on a certain cell is too large for our liking: we can refine the cell by splitting it into several smaller ones, or we can increase the polynomial degree of the shape functions used on it. How do we know which is the more promising strategy? Answering this question is the central problem in <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture>-finite element research at the time of this writing.</p>
-<p>In short, the question does not appear to be settled in the literature at this time. There are a number of more or less complicated schemes that address it, but there is nothing like the <a class="el" href="classKellyErrorEstimator.html">KellyErrorEstimator</a> that is universally accepted as a good, even if not optimal, indicator of the error. Most proposals use the fact that it is beneficial to increase the polynomial degree whenever the solution is locally smooth whereas it is better to refine the mesh wherever it is rough. However, the questions of how to determine the local smoothness of the solution as well as the decision when a solution is smooth enough to allow for an increase in <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> are certainly big and important ones.</p>
+<p>In short, the question does not appear to be settled in the literature at this time. There are a number of more or less complicated schemes that address it, but there is nothing like the <a class="el" href="classKellyErrorEstimator.html">KellyErrorEstimator</a> that is universally accepted as a good, even if not optimal, indicator of the error. Most proposals use the fact that it is beneficial to increase the polynomial degree whenever the solution is locally smooth whereas it is better to refine the mesh wherever it is rough. However, the questions of how to determine the local smoothness of the solution as well as the decision when a solution is smooth enough to allow for an increase in <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> are certainly big and important ones.</p>
 <p>In the following, we propose a simple estimator of the local smoothness of a solution. As we will see in the results section, this estimator has flaws, in particular as far as cells with local hanging nodes are concerned. We therefore do not intend to present the following ideas as a complete solution to the problem. Rather, it is intended as an idea to approach it that merits further research and investigation. In other words, we do not intend to enter a sophisticated proposal into the fray about answers to the general question. However, to demonstrate our approach to <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture>-finite elements, we need a simple indicator that does generate some useful information that is able to drive the simple calculations this tutorial program will perform.</p>
 <p><a class="anchor" id="Theidea"></a></p><h4>The idea</h4>
-<p>Our approach here is simple: for a function <picture><source srcset="form_3661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u({\bf x})$" src="form_3661.png"/></picture> to be in the Sobolev space <picture><source srcset="form_2368_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^s(K)$" src="form_2368.png"/></picture> on a cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, it has to satisfy the condition  </p><p class="formulaDsp">
+<p>Our approach here is simple: for a function <picture><source srcset="form_3661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u({\bf x})$" src="form_3661.png"/></picture> to be in the Sobolev space <picture><source srcset="form_2231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^s(K)$" src="form_2231.png"/></picture> on a cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, it has to satisfy the condition  </p><p class="formulaDsp">
 <picture><source srcset="form_3662_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \int_K |\nabla^s u({\bf x})|^2 \; d{\bf x} &lt; \infty.
 \]" src="form_3662.png"/></picture>
@@ -273,7 +273,7 @@
 \]" src="form_3676.png"/></picture>
 </p>
 <p> Put differently: the higher regularity <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> we want, the faster the Fourier coefficients have to go to zero. If you wonder where the additional exponent <picture><source srcset="form_3677_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{d-1}2$" src="form_3677.png"/></picture> comes from: we would like to make use of the fact that <picture><source srcset="form_3678_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sum_l a_l &lt; \infty$" src="form_3678.png"/></picture> if the sequence <picture><source srcset="form_3679_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_l =
-{\cal O}(l^{-1-\epsilon})$" src="form_3679.png"/></picture> for any <picture><source srcset="form_3680_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon&gt;0$" src="form_3680.png"/></picture>. The problem is that we here have a summation not only over a single variable, but over all the integer multiples of <picture><source srcset="form_1441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\pi$" src="form_1441.png"/></picture> that are located inside the <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-dimensional sphere, because we have vector components <picture><source srcset="form_3681_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_x, k_y,
+{\cal O}(l^{-1-\epsilon})$" src="form_3679.png"/></picture> for any <picture><source srcset="form_3680_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon&gt;0$" src="form_3680.png"/></picture>. The problem is that we here have a summation not only over a single variable, but over all the integer multiples of <picture><source srcset="form_1466_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\pi$" src="form_1466.png"/></picture> that are located inside the <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-dimensional sphere, because we have vector components <picture><source srcset="form_3681_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_x, k_y,
 \ldots$" src="form_3681.png"/></picture>. In the same way as we prove that the sequence <picture><source srcset="form_3682_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_l$" src="form_3682.png"/></picture> above converges by replacing the sum by an integral over the entire line, we can replace our <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-dimensional sum by an integral over <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-dimensional space. Now we have to note that between distance <picture><source srcset="form_3683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|{\bf k}|$" src="form_3683.png"/></picture> and <picture><source srcset="form_3684_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|{\bf k}|+d|{\bf k}|$" src="form_3684.png"/></picture>, there are, up to a constant, <picture><source srcset="form_3685_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|{\bf k}|^{d-1}$" src="form_3685.png"/></picture> modes, in much the same way as we can transform the volume element <picture><source srcset="form_3686_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dx\;dy$" src="form_3686.png"/></picture> into <picture><source srcset="form_3687_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\pi r\; dr$" src="form_3687.png"/></picture>. Consequently, it is no longer <picture><source srcset="form_3688_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|{\bf k}|^{2s}|\hat
 U_{\bf k}|^2$" src="form_3688.png"/></picture> that has to decay as <picture><source srcset="form_3689_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(|{\bf k}|^{-1-\epsilon})$" src="form_3689.png"/></picture>, but it is in fact <picture><source srcset="form_3690_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|{\bf k}|^{2s}|\hat U_{\bf k}|^2 |{\bf k}|^{d-1}$" src="form_3690.png"/></picture>. A comparison of exponents yields the result.</p>
 <p>We can turn this around: Assume we are given a function <picture><source srcset="form_3665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat u$" src="form_3665.png"/></picture> of unknown smoothness. Let us compute its Fourier coefficients <picture><source srcset="form_3670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U_{\bf k}$" src="form_3670.png"/></picture> and see how fast they decay. If they decay as  </p><p class="formulaDsp">
@@ -283,7 +283,7 @@
 </p>
 <p> then consequently the function we had here was in <picture><source srcset="form_3692_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{\mu-d/2}$" src="form_3692.png"/></picture>.</p>
 <p><a class="anchor" id="Whatwehavetodo"></a></p><h4>What we have to do</h4>
-<p>So what do we have to do to estimate the local smoothness of <picture><source srcset="form_3661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u({\bf x})$" src="form_3661.png"/></picture> on a cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>? Clearly, the first step is to compute the Fourier coefficients of our solution. Fourier series being infinite series, we simplify our task by only computing the first few terms of the series, such that <picture><source srcset="form_3693_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|{\bf k}|\le 2\pi N$" src="form_3693.png"/></picture> with a cut-off <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture>. Let us parenthetically remark that we want to choose <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> large enough so that we capture at least the variation of those shape functions that vary the most. On the other hand, we should not choose <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> too large: clearly, a finite element function, being a polynomial, is in <picture><source srcset="form_3694_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^\infty$" src="form_3694.png"/></picture> on any given cell, so the coefficients will have to decay exponentially at one point; since we want to estimate the smoothness of the function this polynomial approximates, not of the polynomial itself, we need to choose a reasonable cutoff for <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture>. Either way, computing this series is not particularly hard: from the definition  </p><p class="formulaDsp">
+<p>So what do we have to do to estimate the local smoothness of <picture><source srcset="form_3661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u({\bf x})$" src="form_3661.png"/></picture> on a cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>? Clearly, the first step is to compute the Fourier coefficients of our solution. Fourier series being infinite series, we simplify our task by only computing the first few terms of the series, such that <picture><source srcset="form_3693_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|{\bf k}|\le 2\pi N$" src="form_3693.png"/></picture> with a cut-off <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture>. Let us parenthetically remark that we want to choose <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> large enough so that we capture at least the variation of those shape functions that vary the most. On the other hand, we should not choose <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> too large: clearly, a finite element function, being a polynomial, is in <picture><source srcset="form_3694_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^\infty$" src="form_3694.png"/></picture> on any given cell, so the coefficients will have to decay exponentially at one point; since we want to estimate the smoothness of the function this polynomial approximates, not of the polynomial itself, we need to choose a reasonable cutoff for <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture>. Either way, computing this series is not particularly hard: from the definition  </p><p class="formulaDsp">
 <picture><source srcset="form_3695_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \hat U_{\bf k}
    = \int_{\hat K} e^{i {\bf k}\cdot \hat{\bf x}} \hat u(\hat{\bf x}) d\hat{\bf x}
@@ -298,7 +298,7 @@
    d\hat{\bf x} \right] u_i,
 \]" src="form_3696.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_i$" src="form_2005.png"/></picture> is the value of the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th degree of freedom on this cell. In other words, we can write it as a matrix-vector product  </p><p class="formulaDsp">
+<p> where <picture><source srcset="form_2005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_i$" src="form_2005.png"/></picture> is the value of the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th degree of freedom on this cell. In other words, we can write it as a matrix-vector product  </p><p class="formulaDsp">
 <picture><source srcset="form_3697_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \hat U_{\bf k}
    = {\cal F}_{{\bf k},j} u_j,
@@ -311,7 +311,7 @@
    \int_{\hat K} e^{i {\bf k}\cdot \hat{\bf x}} \hat \varphi_j(\hat{\bf x}) d\hat{\bf x}.
 \]" src="form_3698.png"/></picture>
 </p>
-<p> This matrix is easily computed for a given number of shape functions <picture><source srcset="form_1017_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j$" src="form_1017.png"/></picture> and Fourier modes <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture>. Consequently, finding the coefficients <picture><source srcset="form_3670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U_{\bf k}$" src="form_3670.png"/></picture> is a rather trivial job. To simplify our life even further, we will use <a class="el" href="classFESeries_1_1Fourier.html">FESeries::Fourier</a> class which does exactly this.</p>
+<p> This matrix is easily computed for a given number of shape functions <picture><source srcset="form_971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j$" src="form_971.png"/></picture> and Fourier modes <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture>. Consequently, finding the coefficients <picture><source srcset="form_3670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U_{\bf k}$" src="form_3670.png"/></picture> is a rather trivial job. To simplify our life even further, we will use <a class="el" href="classFESeries_1_1Fourier.html">FESeries::Fourier</a> class which does exactly this.</p>
 <p>The next task is that we have to estimate how fast these coefficients decay with <picture><source srcset="form_3683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|{\bf k}|$" src="form_3683.png"/></picture>. The problem is that, of course, we have only finitely many of these coefficients in the first place. In other words, the best we can do is to fit a function <picture><source srcset="form_3699_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha |{\bf k}|^{-\mu}$" src="form_3699.png"/></picture> to our data points <picture><source srcset="form_3670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U_{\bf k}$" src="form_3670.png"/></picture>, for example by determining <picture><source srcset="form_3700_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha,\mu$" src="form_3700.png"/></picture> via a least-squares procedure:  </p><p class="formulaDsp">
 <picture><source srcset="form_3701_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \min_{\alpha,\mu}
@@ -335,7 +335,7 @@
    \left( \ln |\hat U_{\bf k}| - \beta + \mu \ln |{\bf k}|\right)^2,
 \]" src="form_3703.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2379_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta=\ln \alpha$" src="form_2379.png"/></picture>. This is now a problem for which the optimality conditions <picture><source srcset="form_3704_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial Q}{\partial\beta}=0,
+<p> where <picture><source srcset="form_2242_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta=\ln \alpha$" src="form_2242.png"/></picture>. This is now a problem for which the optimality conditions <picture><source srcset="form_3704_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial Q}{\partial\beta}=0,
 \frac{\partial Q}{\partial\mu}=0$" src="form_3704.png"/></picture>, are linear in <picture><source srcset="form_3705_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta,\mu$" src="form_3705.png"/></picture>. We can write these conditions as follows:  </p><p class="formulaDsp">
 <picture><source srcset="form_3706_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \left(\begin{array}{cc}
@@ -394,11 +394,11 @@
    }.
 \]" src="form_3708.png"/></picture>
 </p>
-<p>This is nothing else but linear regression fit and to do that we will use <a class="el" href="namespaceFESeries.html#href_anchor">FESeries::linear_regression()</a>. While we are not particularly interested in the actual value of <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture>, the formula above gives us a mean to calculate the value of the exponent <picture><source srcset="form_3066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_3066.png"/></picture> that we can then use to determine that <picture><source srcset="form_3664_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat u(\hat{\bf x})$" src="form_3664.png"/></picture> is in <picture><source srcset="form_3675_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^s(\hat K)$" src="form_3675.png"/></picture> with <picture><source srcset="form_3709_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s=\mu-\frac d2$" src="form_3709.png"/></picture>.</p>
+<p>This is nothing else but linear regression fit and to do that we will use <a class="el" href="namespaceFESeries.html#href_anchor">FESeries::linear_regression()</a>. While we are not particularly interested in the actual value of <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture>, the formula above gives us a mean to calculate the value of the exponent <picture><source srcset="form_2994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_2994.png"/></picture> that we can then use to determine that <picture><source srcset="form_3664_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat u(\hat{\bf x})$" src="form_3664.png"/></picture> is in <picture><source srcset="form_3675_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^s(\hat K)$" src="form_3675.png"/></picture> with <picture><source srcset="form_3709_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s=\mu-\frac d2$" src="form_3709.png"/></picture>.</p>
 <p>These steps outlined above are applicable to many different scenarios, which motivated the introduction of a generic function <a class="el" href="namespaceSmoothnessEstimator_1_1Fourier.html#href_anchor">SmoothnessEstimator::Fourier::coefficient_decay()</a> in deal.II, that combines all the tasks described in this section in one simple function call. We will use it in the implementation of this program.</p>
 <p><a class="anchor" id="Compensatingforanisotropy"></a></p><h4>Compensating for anisotropy</h4>
 <p>In the formulas above, we have derived the Fourier coefficients <picture><source srcset="form_3710_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U_{\bf
-k}$" src="form_3710.png"/></picture>. Because <picture><source srcset="form_2372_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf k}$" src="form_2372.png"/></picture> is a vector, we will get a number of Fourier coefficients <picture><source srcset="form_3711_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U_{{\bf k}}$" src="form_3711.png"/></picture> for the same absolute value <picture><source srcset="form_3683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|{\bf k}|$" src="form_3683.png"/></picture>, corresponding to the Fourier transform in different directions. If we now consider a function like <picture><source srcset="form_3712_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|x|y^2$" src="form_3712.png"/></picture> then we will find lots of large Fourier coefficients in <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>-direction because the function is non-smooth in this direction, but fast-decaying Fourier coefficients in <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>-direction because the function is smooth there. The question that arises is this: if we simply fit our polynomial decay <picture><source srcset="form_3713_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha |{\bf k}|^\mu$" src="form_3713.png"/></picture> to <em>all</em> Fourier coefficients, we will fit it to a smoothness <em>averaged in all spatial directions</em>. Is this what we want? Or would it be better to only consider the largest coefficient <picture><source srcset="form_3711_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U_{{\bf k}}$" src="form_3711.png"/></picture> for all <picture><source srcset="form_2372_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf k}$" src="form_2372.png"/></picture> with the same magnitude, essentially trying to determine the smoothness of the solution in that spatial direction in which the solution appears to be roughest?</p>
+k}$" src="form_3710.png"/></picture>. Because <picture><source srcset="form_2235_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf k}$" src="form_2235.png"/></picture> is a vector, we will get a number of Fourier coefficients <picture><source srcset="form_3711_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U_{{\bf k}}$" src="form_3711.png"/></picture> for the same absolute value <picture><source srcset="form_3683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|{\bf k}|$" src="form_3683.png"/></picture>, corresponding to the Fourier transform in different directions. If we now consider a function like <picture><source srcset="form_3712_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|x|y^2$" src="form_3712.png"/></picture> then we will find lots of large Fourier coefficients in <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>-direction because the function is non-smooth in this direction, but fast-decaying Fourier coefficients in <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>-direction because the function is smooth there. The question that arises is this: if we simply fit our polynomial decay <picture><source srcset="form_3713_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha |{\bf k}|^\mu$" src="form_3713.png"/></picture> to <em>all</em> Fourier coefficients, we will fit it to a smoothness <em>averaged in all spatial directions</em>. Is this what we want? Or would it be better to only consider the largest coefficient <picture><source srcset="form_3711_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U_{{\bf k}}$" src="form_3711.png"/></picture> for all <picture><source srcset="form_2235_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf k}$" src="form_2235.png"/></picture> with the same magnitude, essentially trying to determine the smoothness of the solution in that spatial direction in which the solution appears to be roughest?</p>
 <p>One can probably argue for either case. The issue would be of more interest if deal.II had the ability to use anisotropic finite elements, i.e., ones that use different polynomial degrees in different spatial directions, as they would be able to exploit the directionally variable smoothness much better. Alas, this capability does not exist at the time of writing this tutorial program.</p>
 <p>Either way, because we only have isotopic finite element classes, we adopt the viewpoint that we should tailor the polynomial degree to the lowest amount of regularity, in order to keep numerical efforts low. Consequently, instead of using the formula  </p><p class="formulaDsp">
 <picture><source srcset="form_3708_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
@@ -419,7 +419,7 @@
    }.
 \]" src="form_3708.png"/></picture>
 </p>
-<p> To calculate <picture><source srcset="form_3066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_3066.png"/></picture> as shown above, we have to slightly modify all sums: instead of summing over all Fourier modes, we only sum over those for which the Fourier coefficient is the largest one among all <picture><source srcset="form_3711_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U_{{\bf k}}$" src="form_3711.png"/></picture> with the same magnitude <picture><source srcset="form_3683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|{\bf k}|$" src="form_3683.png"/></picture>, i.e., all sums above have to replaced by the following sums:  </p><p class="formulaDsp">
+<p> To calculate <picture><source srcset="form_2994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_2994.png"/></picture> as shown above, we have to slightly modify all sums: instead of summing over all Fourier modes, we only sum over those for which the Fourier coefficient is the largest one among all <picture><source srcset="form_3711_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U_{{\bf k}}$" src="form_3711.png"/></picture> with the same magnitude <picture><source srcset="form_3683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|{\bf k}|$" src="form_3683.png"/></picture>, i.e., all sums above have to replaced by the following sums:  </p><p class="formulaDsp">
 <picture><source srcset="form_3714_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \sum_{{\bf k}, |{\bf k}|\le N}
   \longrightarrow
@@ -429,14 +429,14 @@
 </p>
 <p> This is the form we will implement in the program.</p>
 <p><a class="anchor" id="Questionsaboutcellsizes"></a></p><h4>Questions about cell sizes</h4>
-<p>One may ask whether it is a problem that we only compute the Fourier transform on the <em>reference cell</em> (rather than the real cell) of the solution. After all, we stretch the solution by a factor <picture><source srcset="form_3715_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 1h$" src="form_3715.png"/></picture> during the transformation, thereby shifting the Fourier frequencies by a factor of <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>. This is of particular concern since we may have neighboring cells with mesh sizes <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> that differ by a factor of 2 if one of them is more refined than the other. The concern is also motivated by the fact that, as we will see in the results section below, the estimated smoothness of the solution should be a more or less continuous function, but exhibits jumps at locations where the mesh size jumps. It therefore seems natural to ask whether we have to compensate for the transformation.</p>
+<p>One may ask whether it is a problem that we only compute the Fourier transform on the <em>reference cell</em> (rather than the real cell) of the solution. After all, we stretch the solution by a factor <picture><source srcset="form_3715_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 1h$" src="form_3715.png"/></picture> during the transformation, thereby shifting the Fourier frequencies by a factor of <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>. This is of particular concern since we may have neighboring cells with mesh sizes <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> that differ by a factor of 2 if one of them is more refined than the other. The concern is also motivated by the fact that, as we will see in the results section below, the estimated smoothness of the solution should be a more or less continuous function, but exhibits jumps at locations where the mesh size jumps. It therefore seems natural to ask whether we have to compensate for the transformation.</p>
 <p>The short answer is "no". In the process outlined above, we attempt to find coefficients <picture><source srcset="form_3705_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta,\mu$" src="form_3705.png"/></picture> that minimize the sum of squares of the terms  </p><p class="formulaDsp">
 <picture><source srcset="form_3716_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \ln |\hat U_{{\bf k}}| - \beta + \mu \ln |{\bf k}|.
 \]" src="form_3716.png"/></picture>
 </p>
-<p> To compensate for the transformation means not attempting to fit a decay <picture><source srcset="form_3717_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|{\bf k}|^\mu$" src="form_3717.png"/></picture> with respect to the Fourier frequencies <picture><source srcset="form_2372_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf k}$" src="form_2372.png"/></picture> <em>on the unit cell</em>, but to fit the coefficients <picture><source srcset="form_3711_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U_{{\bf k}}$" src="form_3711.png"/></picture> computed on the reference cell <em>to the Fourier frequencies on the real cell <picture><source srcset="form_3718_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\bf
-k|h$" src="form_3718.png"/></picture></em>, where <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> is the norm of the transformation operator (i.e., something like the diameter of the cell). In other words, we would have to minimize the sum of squares of the terms  </p><p class="formulaDsp">
+<p> To compensate for the transformation means not attempting to fit a decay <picture><source srcset="form_3717_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|{\bf k}|^\mu$" src="form_3717.png"/></picture> with respect to the Fourier frequencies <picture><source srcset="form_2235_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\bf k}$" src="form_2235.png"/></picture> <em>on the unit cell</em>, but to fit the coefficients <picture><source srcset="form_3711_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U_{{\bf k}}$" src="form_3711.png"/></picture> computed on the reference cell <em>to the Fourier frequencies on the real cell <picture><source srcset="form_3718_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\bf
+k|h$" src="form_3718.png"/></picture></em>, where <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> is the norm of the transformation operator (i.e., something like the diameter of the cell). In other words, we would have to minimize the sum of squares of the terms  </p><p class="formulaDsp">
 <picture><source srcset="form_3719_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \ln |\hat U_{{\bf k}}| - \beta + \mu \ln (|{\bf k}|h).
 \]" src="form_3719.png"/></picture>
@@ -446,7 +446,7 @@
    \ln |\hat U_{{\bf k}}| - (\beta - \mu \ln h) + \mu \ln (|{\bf k}|).
 \]" src="form_3720.png"/></picture>
 </p>
-<p> In other words, this and the original least squares problem will produce the same best-fit exponent <picture><source srcset="form_3066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_3066.png"/></picture>, though the offset will in one case be <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> and in the other <picture><source srcset="form_3721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta-\mu \ln h$" src="form_3721.png"/></picture>. However, since we are not interested in the offset at all but only in the exponent, it doesn't matter whether we scale Fourier frequencies in order to account for mesh size effects or not, the estimated smoothness exponent will be the same in either case.</p>
+<p> In other words, this and the original least squares problem will produce the same best-fit exponent <picture><source srcset="form_2994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_2994.png"/></picture>, though the offset will in one case be <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> and in the other <picture><source srcset="form_3721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta-\mu \ln h$" src="form_3721.png"/></picture>. However, since we are not interested in the offset at all but only in the exponent, it doesn't matter whether we scale Fourier frequencies in order to account for mesh size effects or not, the estimated smoothness exponent will be the same in either case.</p>
 <p><a class="anchor" id="Complicationswithlinearsystemsforhpdiscretizations"></a></p><h3>Complications with linear systems for hp-discretizations</h3>
 <p><a class="anchor" id="Creatingthesparsitypattern"></a></p><h4>Creating the sparsity pattern</h4>
 <p>One of the problems with <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture>-methods is that the high polynomial degree of shape functions together with the large number of constrained degrees of freedom leads to matrices with large numbers of nonzero entries in some rows. At the same time, because there are areas where we use low polynomial degree and consequently matrix rows with relatively few nonzero entries. Consequently, allocating the sparsity pattern for these matrices is a challenge: we cannot simply assemble a <a class="el" href="classSparsityPattern.html">SparsityPattern</a> by starting with an estimate of the bandwidth without using a lot of extra memory.</p>
@@ -460,7 +460,7 @@
 <p>The early tutorial programs use first or second degree finite elements, so removing entries in the sparsity pattern corresponding to constrained degrees of freedom does not have a large impact on the overall number of zeros explicitly stored by the matrix. However, since as many as a third of the degrees of freedom may be constrained in an hp-discretization (and, with higher degree elements, these constraints can couple one DoF to as many as ten or twenty other DoFs), it is worthwhile to take these constraints into consideration since the resulting matrix will be much sparser (and, therefore, matrix-vector products or factorizations will be substantially faster too).</p>
 <p><a class="anchor" id="Eliminatingconstraineddegreesoffreedom"></a></p><h4>Eliminating constrained degrees of freedom</h4>
 <p>A second problem particular to <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture>-methods arises because we have so many constrained degrees of freedom: typically up to about one third of all degrees of freedom (in 3d) are constrained because they either belong to cells with hanging nodes or because they are on cells adjacent to cells with a higher or lower polynomial degree. This is, in fact, not much more than the fraction of constrained degrees of freedom in non- <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture>-mode, but the difference is that each constrained hanging node is constrained not only against the two adjacent degrees of freedom, but is constrained against many more degrees of freedom.</p>
-<p>It turns out that the strategy presented first in <a class="el" href="step_6.html">step-6</a> to eliminate the constraints while computing the element matrices and vectors with <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::distribute_local_to_global</a> is the most efficient approach also for this case. The alternative strategy to first build the matrix without constraints and then "condensing" away constrained degrees of freedom is considerably more expensive. It turns out that building the sparsity pattern by this inefficient algorithm requires at least <picture><source srcset="form_3466_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N \log N)$" src="form_3466.png"/></picture> in the number of unknowns, whereas an ideal finite element program would of course only have algorithms that are linear in the number of unknowns. Timing the sparsity pattern creation as well as the matrix assembly shows that the algorithm presented in <a class="el" href="step_6.html">step-6</a> (and used in the code below) is indeed faster.</p>
+<p>It turns out that the strategy presented first in <a class="el" href="step_6.html">step-6</a> to eliminate the constraints while computing the element matrices and vectors with <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::distribute_local_to_global</a> is the most efficient approach also for this case. The alternative strategy to first build the matrix without constraints and then "condensing" away constrained degrees of freedom is considerably more expensive. It turns out that building the sparsity pattern by this inefficient algorithm requires at least <picture><source srcset="form_3330_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N \log N)$" src="form_3330.png"/></picture> in the number of unknowns, whereas an ideal finite element program would of course only have algorithms that are linear in the number of unknowns. Timing the sparsity pattern creation as well as the matrix assembly shows that the algorithm presented in <a class="el" href="step_6.html">step-6</a> (and used in the code below) is indeed faster.</p>
 <p>In our program, we will also treat the boundary conditions as (possibly inhomogeneous) constraints and eliminate the matrix rows and columns to those as well. All we have to do for this is to call the function that interpolates the Dirichlet boundary conditions already in the setup phase in order to tell the <a class="el" href="classAffineConstraints.html">AffineConstraints</a> object about them, and then do the transfer from local to global data on matrix and vector simultaneously. This is exactly what we've shown in <a class="el" href="step_6.html">step-6</a>.</p>
 <p><a class="anchor" id="Thetestcase"></a></p><h3>The test case</h3>
 <p>The test case we will solve with this program is a re-take of the one we already look at in <a class="el" href="step_14.html">step-14</a>: we solve the Laplace equation  </p><p class="formulaDsp">
@@ -468,7 +468,7 @@
    -\Delta u = f
 \]" src="form_3722.png"/></picture>
 </p>
-<p> in 2d, with <picture><source srcset="form_3723_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=(x+1)(y+1)$" src="form_3723.png"/></picture>, and with zero Dirichlet boundary values for <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture>. We do so on the domain <picture><source srcset="form_3724_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^2\backslash[-\frac 12,\frac 12]^2$" src="form_3724.png"/></picture>, i.e., a square with a square hole in the middle.</p>
+<p> in 2d, with <picture><source srcset="form_3723_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=(x+1)(y+1)$" src="form_3723.png"/></picture>, and with zero Dirichlet boundary values for <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture>. We do so on the domain <picture><source srcset="form_3724_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^2\backslash[-\frac 12,\frac 12]^2$" src="form_3724.png"/></picture>, i.e., a square with a square hole in the middle.</p>
 <p>The difference to <a class="el" href="step_14.html">step-14</a> is of course that we use <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture>-finite elements for the solution. The test case is of interest because it has re-entrant corners in the corners of the hole, at which the solution has singularities. We therefore expect that the solution will be smooth in the interior of the domain, and rough in the vicinity of the singularities. The hope is that our refinement and smoothness indicators will be able to see this behavior and refine the mesh close to the singularities, while the polynomial degree is increased away from it. As we will see in the results section, this is indeed the case.</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
 <p><a class="anchor" id="Includefiles"></a> </p><h3>Include files</h3>
@@ -710,7 +710,7 @@
 <div class="ttc" id="aclassFullMatrix_html"><div class="ttname"><a href="classFullMatrix.html">FullMatrix</a></div><div class="ttdef"><b>Definition</b> <a href="full__matrix_8h_source.html#href_anchor">full_matrix.h:79</a></div></div>
 <div class="ttc" id="aclassint_html"><div class="ttname"><a href="classint.html">int</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="LaplaceProblemsolve"></a> </p><h4>LaplaceProblem::solve</h4>
-<p>The function solving the linear system is entirely unchanged from previous examples. We simply try to reduce the initial residual (which equals the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture> norm of the right hand side) by a certain factor:</p>
+<p>The function solving the linear system is entirely unchanged from previous examples. We simply try to reduce the initial residual (which equals the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture> norm of the right hand side) by a certain factor:</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> LaplaceProblem&lt;dim&gt;::solve()</div>
 <div class="line">    {</div>
@@ -734,7 +734,7 @@
 <div class="ttc" id="aclassSolverCG_html"><div class="ttname"><a href="classSolverCG.html">SolverCG</a></div><div class="ttdef"><b>Definition</b> <a href="solver__cg_8h_source.html#href_anchor">solver_cg.h:178</a></div></div>
 <div class="ttc" id="aclassSolverControl_html"><div class="ttname"><a href="classSolverControl.html">SolverControl</a></div><div class="ttdef"><b>Definition</b> <a href="solver__control_8h_source.html#href_anchor">solver_control.h:68</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="LaplaceProblempostprocess"></a> </p><h4>LaplaceProblem::postprocess</h4>
-<p>After solving the linear system, we will want to postprocess the solution. Here, all we do is to estimate the error, estimate the local smoothness of the solution as described in the introduction, then write graphical output, and finally refine the mesh in both <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> and <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> according to the indicators computed before. We do all this in the same function because we want the estimated error and smoothness indicators not only for refinement, but also include them in the graphical output.</p>
+<p>After solving the linear system, we will want to postprocess the solution. Here, all we do is to estimate the error, estimate the local smoothness of the solution as described in the introduction, then write graphical output, and finally refine the mesh in both <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> and <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> according to the indicators computed before. We do all this in the same function because we want the estimated error and smoothness indicators not only for refinement, but also include them in the graphical output.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> LaplaceProblem&lt;dim&gt;::postprocess(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cycle)</div>
 <div class="line">    {</div>
@@ -789,7 +789,7 @@
 <div class="line">      }</div>
 <div class="line">  </div>
 <div class="ttc" id="anamespaceUtilities_html_a6195c5f009ea8c7c536c6ffdf108c32f"><div class="ttname"><a href="namespaceUtilities.html#href_anchor">Utilities::int_to_string</a></div><div class="ttdeci">std::string int_to_string(const unsigned int value, const unsigned int digits=numbers::invalid_unsigned_int)</div><div class="ttdef"><b>Definition</b> <a href="base_2utilities_8cc_source.html#href_anchor">utilities.cc:471</a></div></div>
-</div><!-- fragment --><p>After this, we would like to actually refine the mesh, in both <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> and <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>. The way we are going to do this is as follows: first, we use the estimated error to flag those cells for refinement that have the largest error. This is what we have always done:</p>
+</div><!-- fragment --><p>After this, we would like to actually refine the mesh, in both <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> and <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>. The way we are going to do this is as follows: first, we use the estimated error to flag those cells for refinement that have the largest error. This is what we have always done:</p>
 <div class="fragment"><div class="line">      {</div>
 <div class="line">        <a class="code hl_function" href="namespaceGridRefinement.html#href_anchor">GridRefinement::refine_and_coarsen_fixed_number</a>(<a class="code hl_variable" href="p4est__wrappers_8cc.html#href_anchor">triangulation</a>,</div>
 <div class="line">                                                        estimated_error_per_cell,</div>
@@ -797,12 +797,12 @@
 <div class="line">                                                        0.03);</div>
 <div class="line">  </div>
 <div class="ttc" id="anamespaceGridRefinement_html_a48e5395381ed87155942a61a1edd134d"><div class="ttname"><a href="namespaceGridRefinement.html#href_anchor">GridRefinement::refine_and_coarsen_fixed_number</a></div><div class="ttdeci">void refine_and_coarsen_fixed_number(Triangulation&lt; dim, spacedim &gt; &amp;triangulation, const Vector&lt; Number &gt; &amp;criteria, const double top_fraction_of_cells, const double bottom_fraction_of_cells, const unsigned int max_n_cells=std::numeric_limits&lt; unsigned int &gt;::max())</div><div class="ttdef"><b>Definition</b> <a href="grid_2grid__refinement_8cc_source.html#href_anchor">grid_refinement.cc:319</a></div></div>
-</div><!-- fragment --><p>Next we would like to figure out which of the cells that have been flagged for refinement should actually have <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> increased instead of <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> decreased. The strategy we choose here is that we look at the smoothness indicators of those cells that are flagged for refinement, and increase <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> for those with a smoothness larger than a certain relative threshold. In other words, for every cell for which (i) the refinement flag is set, (ii) the smoothness indicator is larger than the threshold, and (iii) we still have a finite element with a polynomial degree higher than the current one in the finite element collection, we will assign a future FE index that corresponds to a polynomial with degree one higher than it currently is. The following function is capable of doing exactly this. Absent any better strategies, we will set the threshold via interpolation between the minimal and maximal smoothness indicators on cells flagged for refinement. Since the corner singularities are strongly localized, we will favor <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>- over <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>-refinement quantitatively. We achieve this with a low threshold by setting a small interpolation factor of 0.2. In the same way, we deal with cells that are going to be coarsened and decrease their polynomial degree when their smoothness indicator is below the corresponding threshold determined on cells to be coarsened.</p>
+</div><!-- fragment --><p>Next we would like to figure out which of the cells that have been flagged for refinement should actually have <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> increased instead of <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> decreased. The strategy we choose here is that we look at the smoothness indicators of those cells that are flagged for refinement, and increase <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> for those with a smoothness larger than a certain relative threshold. In other words, for every cell for which (i) the refinement flag is set, (ii) the smoothness indicator is larger than the threshold, and (iii) we still have a finite element with a polynomial degree higher than the current one in the finite element collection, we will assign a future FE index that corresponds to a polynomial with degree one higher than it currently is. The following function is capable of doing exactly this. Absent any better strategies, we will set the threshold via interpolation between the minimal and maximal smoothness indicators on cells flagged for refinement. Since the corner singularities are strongly localized, we will favor <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>- over <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>-refinement quantitatively. We achieve this with a low threshold by setting a small interpolation factor of 0.2. In the same way, we deal with cells that are going to be coarsened and decrease their polynomial degree when their smoothness indicator is below the corresponding threshold determined on cells to be coarsened.</p>
 <div class="fragment"><div class="line">        <a class="code hl_function" href="namespacehp_1_1Refinement.html#href_anchor">hp::Refinement::p_adaptivity_from_relative_threshold</a>(</div>
 <div class="line">          dof_handler, smoothness_indicators, 0.2, 0.2);</div>
 <div class="line">  </div>
 <div class="ttc" id="anamespacehp_1_1Refinement_html_adbb65ed7b6a97961a69967eaa0bb170b"><div class="ttname"><a href="namespacehp_1_1Refinement.html#href_anchor">hp::Refinement::p_adaptivity_from_relative_threshold</a></div><div class="ttdeci">void p_adaptivity_from_relative_threshold(const DoFHandler&lt; dim, spacedim &gt; &amp;dof_handler, const Vector&lt; Number &gt; &amp;criteria, const double p_refine_fraction=0.5, const double p_coarsen_fraction=0.5, const ComparisonFunction&lt; std_cxx20::type_identity_t&lt; Number &gt; &gt; &amp;compare_refine=std::greater_equal&lt; Number &gt;(), const ComparisonFunction&lt; std_cxx20::type_identity_t&lt; Number &gt; &gt; &amp;compare_coarsen=std::less_equal&lt; Number &gt;())</div><div class="ttdef"><b>Definition</b> <a href="refinement_8cc_source.html#href_anchor">refinement.cc:149</a></div></div>
-</div><!-- fragment --><p>The above function only determines whether the polynomial degree will change via future FE indices, but does not manipulate the <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>-refinement flags. So for cells that are flagged for both refinement categories, we prefer <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>- over <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>-refinement. The following function call ensures that only one of <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>- or <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>-refinement is imposed, and not both at once.</p>
+</div><!-- fragment --><p>The above function only determines whether the polynomial degree will change via future FE indices, but does not manipulate the <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>-refinement flags. So for cells that are flagged for both refinement categories, we prefer <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>- over <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>-refinement. The following function call ensures that only one of <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>- or <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>-refinement is imposed, and not both at once.</p>
 <div class="fragment"><div class="line">        <a class="code hl_function" href="namespacehp_1_1Refinement.html#href_anchor">hp::Refinement::choose_p_over_h</a>(dof_handler);</div>
 <div class="line">  </div>
 <div class="ttc" id="anamespacehp_1_1Refinement_html_a98a9d9d1450456815b8ed4892041065c"><div class="ttname"><a href="namespacehp_1_1Refinement.html#href_anchor">hp::Refinement::choose_p_over_h</a></div><div class="ttdeci">void choose_p_over_h(const DoFHandler&lt; dim, spacedim &gt; &amp;dof_handler)</div><div class="ttdef"><b>Definition</b> <a href="refinement_8cc_source.html#href_anchor">refinement.cc:689</a></div></div>
@@ -961,7 +961,7 @@
 <p>The bigger question is, of course, how to avoid this problem. Possibilities include estimating the smoothness not on single cells, but cell assemblies or patches surrounding each cell. It may also be possible to find simple correction factors for each cell depending on the number of constrained degrees of freedom it has. In either case, there are ample opportunities for further research on finding good <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture>-refinement criteria. On the other hand, the main point of the current program was to demonstrate using the <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture>-technology in deal.II, which is unaffected by our use of a possible sub-optimal refinement criterion.</p>
 <p><a class="anchor" id="extensions"></a> <a class="anchor" id="Possibilitiesforextensions"></a></p><h3>Possibilities for extensions</h3>
 <p><a class="anchor" id="Differenthpdecisionstrategies"></a></p><h4>Different hp-decision strategies</h4>
-<p>This tutorial demonstrates only one particular strategy to decide between <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>- and <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>-adaptation. In fact, there are many more ways to automatically decide on the adaptation type, of which a few are already implemented in deal.II: </p><ul>
+<p>This tutorial demonstrates only one particular strategy to decide between <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>- and <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>-adaptation. In fact, there are many more ways to automatically decide on the adaptation type, of which a few are already implemented in deal.II: </p><ul>
 <li>
 <p class="startli"><em>Fourier coefficient decay:</em> This is the strategy currently implemented in this tutorial. For more information on this strategy, see the general documentation of the <a class="el" href="namespaceSmoothnessEstimator_1_1Fourier.html">SmoothnessEstimator::Fourier</a> namespace.</p>
 <p class="endli"></p>
@@ -972,12 +972,12 @@
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli"><em>Refinement history:</em> The last strategy is quite different from the other two. In theory, we know how the error will converge after changing the discretization of the function space. With <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>-refinement the solution converges algebraically as already pointed out in <a class="el" href="step_7.html">step-7</a>. If the solution is sufficiently smooth, though, we expect that the solution will converge exponentially with increasing polynomial degree of the finite element. We can compare a proper prediction of the error with the actual error in the following step to see if our choice of adaptation type was justified.</p>
-<p class="interli">The transition to this strategy is a bit more complicated. For this, we need an initialization step with pure <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>- or <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>-refinement and we need to transfer the predicted errors over adapted meshes. The extensive documentation of the <a class="el" href="namespacehp_1_1Refinement.html#href_anchor">hp::Refinement::predict_error()</a> function describes not only the theoretical details of this approach, but also presents a blueprint on how to implement this strategy in your code. For more information, see <b>[melenk2001hp]</b> .</p>
+<p class="startli"><em>Refinement history:</em> The last strategy is quite different from the other two. In theory, we know how the error will converge after changing the discretization of the function space. With <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>-refinement the solution converges algebraically as already pointed out in <a class="el" href="step_7.html">step-7</a>. If the solution is sufficiently smooth, though, we expect that the solution will converge exponentially with increasing polynomial degree of the finite element. We can compare a proper prediction of the error with the actual error in the following step to see if our choice of adaptation type was justified.</p>
+<p class="interli">The transition to this strategy is a bit more complicated. For this, we need an initialization step with pure <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>- or <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>-refinement and we need to transfer the predicted errors over adapted meshes. The extensive documentation of the <a class="el" href="namespacehp_1_1Refinement.html#href_anchor">hp::Refinement::predict_error()</a> function describes not only the theoretical details of this approach, but also presents a blueprint on how to implement this strategy in your code. For more information, see <b>[melenk2001hp]</b> .</p>
 <p class="endli">Note that with this particular function you cannot predict the error for the next time step in time-dependent problems. Therefore, this strategy cannot be applied to this type of problem without further ado. Alternatively, the following approach could be used, which works for all the other strategies as well: start each time step with a coarse mesh, keep refining until happy with the result, and only then move on to the next time step. </p>
 </li>
 </ul>
-<p>Try implementing one of these strategies into this tutorial and observe the subtle changes to the results. You will notice that all strategies are capable of identifying the singularities near the reentrant corners and will perform <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>-refinement in these regions, while preferring <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>-refinement in the bulk domain. A detailed comparison of these strategies is presented in <b>[fehling2020]</b> .</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_28.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_28.html	2024-03-17 21:57:44.935243514 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_28.html	2024-03-17 21:57:44.939243539 +0000
@@ -174,8 +174,8 @@
 </p>
 <p><a class="anchor" id="Introduction"></a><a class="anchor" id="Intro"></a> </p><h1>Introduction</h1>
 <p>In this example, we intend to solve the multigroup diffusion approximation of the neutron transport equation. Essentially, the way to view this is as follows: In a nuclear reactor, neutrons are speeding around at different energies, get absorbed or scattered, or start a new fission event. If viewed at long enough length scales, the movement of neutrons can be considered a diffusion process.</p>
-<p>A mathematical description of this would group neutrons into energy bins, and consider the balance equations for the neutron fluxes in each of these bins, or energy groups. The scattering, absorption, and fission events would then be operators within the diffusion equation describing the neutron fluxes. Assume we have energy groups <picture><source srcset="form_3773_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g=1,\ldots,G$" src="form_3773.png"/></picture>, where by convention we assume that the neutrons with the highest energy are in group 1 and those with the lowest energy in group <picture><source srcset="form_1737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1737.png"/></picture>. Then the neutron flux of each group satisfies the following equations:  </p><p class="formulaDsp">
-<picture><source srcset="form_3774_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>A mathematical description of this would group neutrons into energy bins, and consider the balance equations for the neutron fluxes in each of these bins, or energy groups. The scattering, absorption, and fission events would then be operators within the diffusion equation describing the neutron fluxes. Assume we have energy groups <picture><source srcset="form_3728_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g=1,\ldots,G$" src="form_3728.png"/></picture>, where by convention we assume that the neutrons with the highest energy are in group 1 and those with the lowest energy in group <picture><source srcset="form_1739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1739.png"/></picture>. Then the neutron flux of each group satisfies the following equations:  </p><p class="formulaDsp">
+<picture><source srcset="form_3729_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \frac 1{v_g}\frac{\partial \phi_g(x,t)}{\partial t}
 &amp;=&amp;
 \nabla \cdot(D_g(x) \nabla \phi_g(x,t))
@@ -189,25 +189,25 @@
 \sum_{g'\ne g}\Sigma_{s,g'\to g}(x)\phi_{g'}(x,t)
 +
 s_{\mathrm{ext},g}(x,t)
-\end{eqnarray*}" src="form_3774.png"/></picture>
+\end{eqnarray*}" src="form_3729.png"/></picture>
 </p>
-<p> augmented by appropriate boundary conditions. Here, <picture><source srcset="form_3775_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_g$" src="form_3775.png"/></picture> is the velocity of neutrons within group <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture>. In other words, the change in time in flux of neutrons in group <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> is governed by the following processes: </p><ul>
+<p> augmented by appropriate boundary conditions. Here, <picture><source srcset="form_3730_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_g$" src="form_3730.png"/></picture> is the velocity of neutrons within group <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture>. In other words, the change in time in flux of neutrons in group <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> is governed by the following processes: </p><ul>
 <li>
-Diffusion <picture><source srcset="form_3776_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \cdot(D_g(x) \nabla \phi_g(x,t))$" src="form_3776.png"/></picture>. Here, <picture><source srcset="form_3777_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_g$" src="form_3777.png"/></picture> is the (spatially variable) diffusion coefficient. </li>
+Diffusion <picture><source srcset="form_3731_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \cdot(D_g(x) \nabla \phi_g(x,t))$" src="form_3731.png"/></picture>. Here, <picture><source srcset="form_3732_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_g$" src="form_3732.png"/></picture> is the (spatially variable) diffusion coefficient. </li>
 <li>
-Absorption <picture><source srcset="form_3778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma_{r,g}(x)\phi_g(x,t)$" src="form_3778.png"/></picture> (note the negative sign). The coefficient <picture><source srcset="form_3779_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma_{r,g}$" src="form_3779.png"/></picture> is called the <em>removal cross section</em>. </li>
+Absorption <picture><source srcset="form_3733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma_{r,g}(x)\phi_g(x,t)$" src="form_3733.png"/></picture> (note the negative sign). The coefficient <picture><source srcset="form_3734_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma_{r,g}$" src="form_3734.png"/></picture> is called the <em>removal cross section</em>. </li>
 <li>
-Nuclear fission <picture><source srcset="form_3780_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi_g\sum_{g'=1}^G\nu\Sigma_{f,g'}(x)\phi_{g'}(x,t)$" src="form_3780.png"/></picture>. The production of neutrons of energy <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> is proportional to the flux of neutrons of energy <picture><source srcset="form_3781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g'$" src="form_3781.png"/></picture> times the probability <picture><source srcset="form_3782_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma_{f,g'}$" src="form_3782.png"/></picture> that neutrons of energy <picture><source srcset="form_3781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g'$" src="form_3781.png"/></picture> cause a fission event times the number <picture><source srcset="form_3078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3078.png"/></picture> of neutrons produced in each fission event times the probability that a neutron produced in this event has energy <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture>. <picture><source srcset="form_3783_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu\Sigma_{f,g'}$" src="form_3783.png"/></picture> is called the <em>fission cross section</em> and <picture><source srcset="form_3784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi_g$" src="form_3784.png"/></picture> the <em>fission spectrum</em>. We will denote the term <picture><source srcset="form_3785_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi_g\nu\Sigma_{f,g'}$" src="form_3785.png"/></picture> as the <em>fission distribution cross section</em> in the program. </li>
+Nuclear fission <picture><source srcset="form_3735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi_g\sum_{g'=1}^G\nu\Sigma_{f,g'}(x)\phi_{g'}(x,t)$" src="form_3735.png"/></picture>. The production of neutrons of energy <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> is proportional to the flux of neutrons of energy <picture><source srcset="form_3736_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g'$" src="form_3736.png"/></picture> times the probability <picture><source srcset="form_3737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma_{f,g'}$" src="form_3737.png"/></picture> that neutrons of energy <picture><source srcset="form_3736_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g'$" src="form_3736.png"/></picture> cause a fission event times the number <picture><source srcset="form_3006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3006.png"/></picture> of neutrons produced in each fission event times the probability that a neutron produced in this event has energy <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture>. <picture><source srcset="form_3738_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu\Sigma_{f,g'}$" src="form_3738.png"/></picture> is called the <em>fission cross section</em> and <picture><source srcset="form_3739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi_g$" src="form_3739.png"/></picture> the <em>fission spectrum</em>. We will denote the term <picture><source srcset="form_3740_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\chi_g\nu\Sigma_{f,g'}$" src="form_3740.png"/></picture> as the <em>fission distribution cross section</em> in the program. </li>
 <li>
-Scattering <picture><source srcset="form_3786_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sum_{g'\ne g}\Sigma_{s,g'\to g}(x)\phi_{g'}(x,t)$" src="form_3786.png"/></picture> of neutrons of energy <picture><source srcset="form_3781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g'$" src="form_3781.png"/></picture> producing neutrons of energy <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture>. <picture><source srcset="form_3787_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma_{s,g'\to g}$" src="form_3787.png"/></picture> is called the <em>scattering cross section</em>. The case of elastic, in-group scattering <picture><source srcset="form_3788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g'=g$" src="form_3788.png"/></picture> exists, too, but we subsume this into the removal cross section. The case <picture><source srcset="form_3789_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g'&lt;g$" src="form_3789.png"/></picture> is called down-scattering, since a neutron loses energy in such an event. On the other hand, <picture><source srcset="form_3790_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g'&gt;g$" src="form_3790.png"/></picture> corresponds to up-scattering: a neutron gains energy in a scattering event from the thermal motion of the atoms surrounding it; up-scattering is therefore only an important process for neutrons with kinetic energies that are already on the same order as the thermal kinetic energy (i.e. in the sub <picture><source srcset="form_3791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$eV$" src="form_3791.png"/></picture> range). </li>
+Scattering <picture><source srcset="form_3741_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sum_{g'\ne g}\Sigma_{s,g'\to g}(x)\phi_{g'}(x,t)$" src="form_3741.png"/></picture> of neutrons of energy <picture><source srcset="form_3736_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g'$" src="form_3736.png"/></picture> producing neutrons of energy <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture>. <picture><source srcset="form_3742_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma_{s,g'\to g}$" src="form_3742.png"/></picture> is called the <em>scattering cross section</em>. The case of elastic, in-group scattering <picture><source srcset="form_3743_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g'=g$" src="form_3743.png"/></picture> exists, too, but we subsume this into the removal cross section. The case <picture><source srcset="form_3744_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g'&lt;g$" src="form_3744.png"/></picture> is called down-scattering, since a neutron loses energy in such an event. On the other hand, <picture><source srcset="form_3745_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g'&gt;g$" src="form_3745.png"/></picture> corresponds to up-scattering: a neutron gains energy in a scattering event from the thermal motion of the atoms surrounding it; up-scattering is therefore only an important process for neutrons with kinetic energies that are already on the same order as the thermal kinetic energy (i.e. in the sub <picture><source srcset="form_3746_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$eV$" src="form_3746.png"/></picture> range). </li>
 <li>
-An extraneous source <picture><source srcset="form_3792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s_{\mathrm{ext},g}$" src="form_3792.png"/></picture>. </li>
+An extraneous source <picture><source srcset="form_3747_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s_{\mathrm{ext},g}$" src="form_3747.png"/></picture>. </li>
 </ul>
 <p>For realistic simulations in reactor analysis, one may want to split the continuous spectrum of neutron energies into many energy groups, often up to 100. However, if neutron energy spectra are known well enough for some type of reactor (for example Pressurized Water Reactors, PWR), it is possible to obtain satisfactory results with only 2 energy groups.</p>
-<p>In the program shown in this tutorial program, we provide the structure to compute with as many energy groups as desired. However, to keep computing times moderate and in order to avoid tabulating hundreds of coefficients, we only provide the coefficients for above equations for a two-group simulation, i.e. <picture><source srcset="form_3793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g=1,2$" src="form_3793.png"/></picture>. We do, however, consider a realistic situation by assuming that the coefficients are not constant, but rather depend on the materials that are assembled into reactor fuel assemblies in rather complicated ways (see below).</p>
+<p>In the program shown in this tutorial program, we provide the structure to compute with as many energy groups as desired. However, to keep computing times moderate and in order to avoid tabulating hundreds of coefficients, we only provide the coefficients for above equations for a two-group simulation, i.e. <picture><source srcset="form_3748_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g=1,2$" src="form_3748.png"/></picture>. We do, however, consider a realistic situation by assuming that the coefficients are not constant, but rather depend on the materials that are assembled into reactor fuel assemblies in rather complicated ways (see below).</p>
 <p><a class="anchor" id="Theeigenvalueproblem"></a></p><h3>The eigenvalue problem</h3>
 <p>If we consider all energy groups at once, we may write above equations in the following operator form:  </p><p class="formulaDsp">
-<picture><source srcset="form_3794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3749_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \frac 1v \frac{\partial \phi}{\partial t}
 =
 -L\phi
@@ -217,64 +217,64 @@
 X\phi
 +
 s_{\mathrm{ext}},
-\end{eqnarray*}" src="form_3794.png"/></picture>
+\end{eqnarray*}" src="form_3749.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_3795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L,F,X$" src="form_3795.png"/></picture> are sinking, fission, and scattering operators, respectively. <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture> here includes both the diffusion and removal terms. Note that <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture> is symmetric, whereas <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> and <picture><source srcset="form_1220_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X$" src="form_1220.png"/></picture> are not.</p>
-<p>It is well known that this equation admits a stable solution if all eigenvalues of the operator <picture><source srcset="form_3796_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-L+F+X$" src="form_3796.png"/></picture> are negative. This can be readily seen by multiplying the equation by <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> and integrating over the domain, leading to  </p><p class="formulaDsp">
-<picture><source srcset="form_3797_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> where <picture><source srcset="form_3750_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L,F,X$" src="form_3750.png"/></picture> are sinking, fission, and scattering operators, respectively. <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture> here includes both the diffusion and removal terms. Note that <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture> is symmetric, whereas <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> and <picture><source srcset="form_1220_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$X$" src="form_1220.png"/></picture> are not.</p>
+<p>It is well known that this equation admits a stable solution if all eigenvalues of the operator <picture><source srcset="form_3751_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-L+F+X$" src="form_3751.png"/></picture> are negative. This can be readily seen by multiplying the equation by <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> and integrating over the domain, leading to  </p><p class="formulaDsp">
+<picture><source srcset="form_3752_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \frac 1{2v} \frac{\partial}{\partial t}  \|\phi\|^2 = ((-L+F+X)\phi,\phi).
-\end{eqnarray*}" src="form_3797.png"/></picture>
+\end{eqnarray*}" src="form_3752.png"/></picture>
 </p>
 <p> Stability means that the solution does not grow, i.e. we want the left hand side to be less than zero, which is the case if the eigenvalues of the operator on the right are all negative. For obvious reasons, it is not very desirable if a nuclear reactor produces neutron fluxes that grow exponentially, so eigenvalue analyses are the bread-and-butter of nuclear engineers. The main point of the program is therefore to consider the eigenvalue problem  </p><p class="formulaDsp">
-<picture><source srcset="form_3798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3753_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (L-F-X) \phi = \lambda \phi,
-\end{eqnarray*}" src="form_3798.png"/></picture>
+\end{eqnarray*}" src="form_3753.png"/></picture>
 </p>
-<p> where we want to make sure that all eigenvalues are positive. Note that <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>, being the diffusion operator plus the absorption (removal), is positive definite; the condition that all eigenvalues are positive therefore means that we want to make sure that fission and inter-group scattering are weak enough to not shift the spectrum into the negative.</p>
-<p>In nuclear engineering, one typically looks at a slightly different formulation of the eigenvalue problem. To this end, we do not just multiply with <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> and integrate, but rather multiply with <picture><source srcset="form_3799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi(L-X)^{-1}$" src="form_3799.png"/></picture>. We then get the following evolution equation:  </p><p class="formulaDsp">
-<picture><source srcset="form_3800_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> where we want to make sure that all eigenvalues are positive. Note that <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>, being the diffusion operator plus the absorption (removal), is positive definite; the condition that all eigenvalues are positive therefore means that we want to make sure that fission and inter-group scattering are weak enough to not shift the spectrum into the negative.</p>
+<p>In nuclear engineering, one typically looks at a slightly different formulation of the eigenvalue problem. To this end, we do not just multiply with <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> and integrate, but rather multiply with <picture><source srcset="form_3754_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi(L-X)^{-1}$" src="form_3754.png"/></picture>. We then get the following evolution equation:  </p><p class="formulaDsp">
+<picture><source srcset="form_3755_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \frac 1{2v} \frac{\partial}{\partial t}  \|\phi\|^2_{(L-X)^{-1}} = ((L-X)^{-1}(-L+F+X)\phi,\phi).
-\end{eqnarray*}" src="form_3800.png"/></picture>
+\end{eqnarray*}" src="form_3755.png"/></picture>
 </p>
 <p> Stability is then guaranteed if the eigenvalues of the following problem are all negative:  </p><p class="formulaDsp">
-<picture><source srcset="form_3801_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3756_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (L-X)^{-1}(-L+F+X)\phi = \lambda_F \phi,
-\end{eqnarray*}" src="form_3801.png"/></picture>
+\end{eqnarray*}" src="form_3756.png"/></picture>
 </p>
 <p> which is equivalent to the eigenvalue problem  </p><p class="formulaDsp">
-<picture><source srcset="form_3802_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3757_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (L-X)\phi = \frac 1{\lambda_F+1} F \phi.
-\end{eqnarray*}" src="form_3802.png"/></picture>
+\end{eqnarray*}" src="form_3757.png"/></picture>
 </p>
 <p> The typical formulation in nuclear engineering is to write this as  </p><p class="formulaDsp">
-<picture><source srcset="form_3803_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3758_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (L-X) \phi = \frac 1{k_{\mathrm{eff}}} F \phi,
-\end{eqnarray*}" src="form_3803.png"/></picture>
+\end{eqnarray*}" src="form_3758.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_3804_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}=\frac 1{\lambda^F+1}$" src="form_3804.png"/></picture>. Intuitively, <picture><source srcset="form_3805_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}$" src="form_3805.png"/></picture> is something like the multiplication factor for neutrons per typical time scale and should be less than or equal to one for stable operation of a reactor: if it is less than one, the chain reaction will die down, whereas nuclear bombs for example have a <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>-eigenvalue larger than one. A stable reactor should have <picture><source srcset="form_3806_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}=1$" src="form_3806.png"/></picture>.</p>
-<p>For those who wonder how this can be achieved in practice without inadvertently getting slightly larger than one and triggering a nuclear bomb: first, fission processes happen on different time scales. While most neutrons are released very quickly after a fission event, a small number of neutrons are only released by daughter nuclei after several further decays, up to 10-60 seconds after the fission was initiated. If one is therefore slightly beyond <picture><source srcset="form_3806_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}=1$" src="form_3806.png"/></picture>, one therefore has many seconds to react until all the neutrons created in fission re-enter the fission cycle. Nevertheless, control rods in nuclear reactors absorbing neutrons &ndash; and therefore reducing <picture><source srcset="form_3805_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}$" src="form_3805.png"/></picture> &ndash; are designed in such a way that they are all the way in the reactor in at most 2 seconds.</p>
-<p>One therefore has on the order of 10-60 seconds to regulate the nuclear reaction if <picture><source srcset="form_3805_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}$" src="form_3805.png"/></picture> should be larger than one for some time, as indicated by a growing neutron flux. Regulation can be achieved by continuously monitoring the neutron flux, and if necessary increase or reduce neutron flux by moving neutron-absorbing control rods a few millimeters into or out of the reactor. On a longer scale, the water cooling the reactor contains boron, a good neutron absorber. Every few hours, boron concentrations are adjusted by adding boron or diluting the coolant.</p>
+<p> where <picture><source srcset="form_3759_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}=\frac 1{\lambda^F+1}$" src="form_3759.png"/></picture>. Intuitively, <picture><source srcset="form_3760_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}$" src="form_3760.png"/></picture> is something like the multiplication factor for neutrons per typical time scale and should be less than or equal to one for stable operation of a reactor: if it is less than one, the chain reaction will die down, whereas nuclear bombs for example have a <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>-eigenvalue larger than one. A stable reactor should have <picture><source srcset="form_3761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}=1$" src="form_3761.png"/></picture>.</p>
+<p>For those who wonder how this can be achieved in practice without inadvertently getting slightly larger than one and triggering a nuclear bomb: first, fission processes happen on different time scales. While most neutrons are released very quickly after a fission event, a small number of neutrons are only released by daughter nuclei after several further decays, up to 10-60 seconds after the fission was initiated. If one is therefore slightly beyond <picture><source srcset="form_3761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}=1$" src="form_3761.png"/></picture>, one therefore has many seconds to react until all the neutrons created in fission re-enter the fission cycle. Nevertheless, control rods in nuclear reactors absorbing neutrons &ndash; and therefore reducing <picture><source srcset="form_3760_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}$" src="form_3760.png"/></picture> &ndash; are designed in such a way that they are all the way in the reactor in at most 2 seconds.</p>
+<p>One therefore has on the order of 10-60 seconds to regulate the nuclear reaction if <picture><source srcset="form_3760_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}$" src="form_3760.png"/></picture> should be larger than one for some time, as indicated by a growing neutron flux. Regulation can be achieved by continuously monitoring the neutron flux, and if necessary increase or reduce neutron flux by moving neutron-absorbing control rods a few millimeters into or out of the reactor. On a longer scale, the water cooling the reactor contains boron, a good neutron absorber. Every few hours, boron concentrations are adjusted by adding boron or diluting the coolant.</p>
 <p>Finally, some of the absorption and scattering reactions have some stability built in; for example, higher neutron fluxes result in locally higher temperatures, which lowers the density of water and therefore reduces the number of scatterers that are necessary to moderate neutrons from high to low energies before they can start fission events themselves.</p>
-<p>In this tutorial program, we solve above <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>-eigenvalue problem for two energy groups, and we are looking for the largest multiplication factor <picture><source srcset="form_3805_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}$" src="form_3805.png"/></picture>, which is proportional to the inverse of the minimum eigenvalue plus one. To solve the eigenvalue problem, we generally use a modified version of the <em>inverse power method</em>. The algorithm looks like this:</p>
+<p>In this tutorial program, we solve above <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>-eigenvalue problem for two energy groups, and we are looking for the largest multiplication factor <picture><source srcset="form_3760_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}$" src="form_3760.png"/></picture>, which is proportional to the inverse of the minimum eigenvalue plus one. To solve the eigenvalue problem, we generally use a modified version of the <em>inverse power method</em>. The algorithm looks like this:</p>
 <ol>
 <li>
-<p class="startli">Initialize <picture><source srcset="form_3807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_g$" src="form_3807.png"/></picture> and <picture><source srcset="form_3805_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}$" src="form_3805.png"/></picture> with <picture><source srcset="form_3808_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_g^{(0)}$" src="form_3808.png"/></picture> and <picture><source srcset="form_3809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}^{(0)}$" src="form_3809.png"/></picture> and let <picture><source srcset="form_3810_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=1$" src="form_3810.png"/></picture>.</p>
+<p class="startli">Initialize <picture><source srcset="form_3762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_g$" src="form_3762.png"/></picture> and <picture><source srcset="form_3760_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}$" src="form_3760.png"/></picture> with <picture><source srcset="form_3763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_g^{(0)}$" src="form_3763.png"/></picture> and <picture><source srcset="form_3764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}^{(0)}$" src="form_3764.png"/></picture> and let <picture><source srcset="form_3765_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=1$" src="form_3765.png"/></picture>.</p>
 <p class="endli"></p>
 </li>
 <li>
 <p class="startli">Define the so-called <em>fission source</em> by  </p><p class="formulaDsp">
-<picture><source srcset="form_3811_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
     s_f^{(n-1)}(x)
     =
     \frac{1}{k_{\mathrm{eff}}^{(n-1)}}
     \sum_{g'=1}^G\nu\Sigma_{f,g'}(x)\phi_{g'}^{(n-1)}(x).
-  \end{eqnarray*}" src="form_3811.png"/></picture>
+  \end{eqnarray*}" src="form_3766.png"/></picture>
 </p>
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">Solve for all group fluxes <picture><source srcset="form_3812_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_g,g=1,\ldots,G$" src="form_3812.png"/></picture> using  </p><p class="formulaDsp">
-<picture><source srcset="form_3813_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p class="startli">Solve for all group fluxes <picture><source srcset="form_3767_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_g,g=1,\ldots,G$" src="form_3767.png"/></picture> using  </p><p class="formulaDsp">
+<picture><source srcset="form_3768_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
     -\nabla \cdot D_g\nabla \phi_g^{(n)}
     +
     \Sigma_{r,g}\phi_g^{(n)}
@@ -284,111 +284,111 @@
     \sum_{g'&lt; g} \Sigma_{s,g'\to g} \phi_{g'}^{(n)}
     +
     \sum_{g'&gt; g}\Sigma_{s,g'\to g}\phi_{g'}^{(n-1)}.
-  \end{eqnarray*}" src="form_3813.png"/></picture>
+  \end{eqnarray*}" src="form_3768.png"/></picture>
 </p>
 <p class="endli"></p>
 </li>
 <li>
 <p class="startli">Update  </p><p class="formulaDsp">
-<picture><source srcset="form_3814_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
     k_{\mathrm{eff}}^{(n)}
     =
     \sum_{g'=1}^G
     \int_{\Omega}\nu\Sigma_{f,g'}(x)
     \phi_{g'}^{(n)}(x)dx.
-  \end{eqnarray*}" src="form_3814.png"/></picture>
+  \end{eqnarray*}" src="form_3769.png"/></picture>
 </p>
 <p class="endli"></p>
 </li>
 <li>
-Compare <picture><source srcset="form_3815_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}^{(n)}$" src="form_3815.png"/></picture> with <picture><source srcset="form_3816_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}^{(n-1)}$" src="form_3816.png"/></picture>. If the change greater than a prescribed tolerance then set <picture><source srcset="form_3817_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=n+1$" src="form_3817.png"/></picture> repeat the iteration starting at step 2, otherwise end the iteration. </li>
+Compare <picture><source srcset="form_3770_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}^{(n)}$" src="form_3770.png"/></picture> with <picture><source srcset="form_3771_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{\mathrm{eff}}^{(n-1)}$" src="form_3771.png"/></picture>. If the change greater than a prescribed tolerance then set <picture><source srcset="form_3772_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=n+1$" src="form_3772.png"/></picture> repeat the iteration starting at step 2, otherwise end the iteration. </li>
 </ol>
-<p>Note that in this scheme, we do not solve group fluxes exactly in each power iteration, but rather consider previously compute <picture><source srcset="form_3818_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_{g'}^{(n)}$" src="form_3818.png"/></picture> only for down-scattering events <picture><source srcset="form_3789_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g'&lt;g$" src="form_3789.png"/></picture>. Up-scattering is only treated by using old iterators <picture><source srcset="form_3819_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_{g'}^{(n-1)}$" src="form_3819.png"/></picture>, in essence assuming that the scattering operator is triangular. This is physically motivated since up-scattering does not play a too important role in neutron scattering. In addition, practices shows that the inverse power iteration is stable even using this simplification.</p>
+<p>Note that in this scheme, we do not solve group fluxes exactly in each power iteration, but rather consider previously compute <picture><source srcset="form_3773_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_{g'}^{(n)}$" src="form_3773.png"/></picture> only for down-scattering events <picture><source srcset="form_3744_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g'&lt;g$" src="form_3744.png"/></picture>. Up-scattering is only treated by using old iterators <picture><source srcset="form_3774_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_{g'}^{(n-1)}$" src="form_3774.png"/></picture>, in essence assuming that the scattering operator is triangular. This is physically motivated since up-scattering does not play a too important role in neutron scattering. In addition, practices shows that the inverse power iteration is stable even using this simplification.</p>
 <p>Note also that one can use lots of extrapolation techniques to accelerate the power iteration laid out above. However, none of these are implemented in this example.</p>
 <p><a class="anchor" id="Meshesandmeshrefinement"></a></p><h3>Meshes and mesh refinement</h3>
-<p>One may wonder whether it is appropriate to solve for the solutions of the individual energy group equations on the same meshes. The question boils down to this: will <picture><source srcset="form_3807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_g$" src="form_3807.png"/></picture> and <picture><source srcset="form_3820_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_{g'}$" src="form_3820.png"/></picture> have similar smoothness properties? If this is the case, then it is appropriate to use the same mesh for the two; a typical application could be chemical combustion, where typically the concentrations of all or most chemical species change rapidly within the flame front. As it turns out, and as will be apparent by looking at the graphs shown in the results section of this tutorial program, this isn't the case here, however: since the diffusion coefficient is different for different energy groups, fast neutrons (in bins with a small group number <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture>) have a very smooth flux function, whereas slow neutrons (in bins with a large group number) are much more affected by the local material properties and have a correspondingly rough solution if the coefficient are rough as in the case we compute here. Consequently, we will want to use different meshes to compute each energy group.</p>
-<p>This has two implications that we will have to consider: First, we need to find a way to refine the meshes individually. Second, assembling the source terms for the inverse power iteration, where we have to integrate solution <picture><source srcset="form_3818_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_{g'}^{(n)}$" src="form_3818.png"/></picture> defined on mesh <picture><source srcset="form_3781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g'$" src="form_3781.png"/></picture> against the shape functions defined on mesh <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture>, becomes a much more complicated task.</p>
+<p>One may wonder whether it is appropriate to solve for the solutions of the individual energy group equations on the same meshes. The question boils down to this: will <picture><source srcset="form_3762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_g$" src="form_3762.png"/></picture> and <picture><source srcset="form_3775_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_{g'}$" src="form_3775.png"/></picture> have similar smoothness properties? If this is the case, then it is appropriate to use the same mesh for the two; a typical application could be chemical combustion, where typically the concentrations of all or most chemical species change rapidly within the flame front. As it turns out, and as will be apparent by looking at the graphs shown in the results section of this tutorial program, this isn't the case here, however: since the diffusion coefficient is different for different energy groups, fast neutrons (in bins with a small group number <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture>) have a very smooth flux function, whereas slow neutrons (in bins with a large group number) are much more affected by the local material properties and have a correspondingly rough solution if the coefficient are rough as in the case we compute here. Consequently, we will want to use different meshes to compute each energy group.</p>
+<p>This has two implications that we will have to consider: First, we need to find a way to refine the meshes individually. Second, assembling the source terms for the inverse power iteration, where we have to integrate solution <picture><source srcset="form_3773_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_{g'}^{(n)}$" src="form_3773.png"/></picture> defined on mesh <picture><source srcset="form_3736_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g'$" src="form_3736.png"/></picture> against the shape functions defined on mesh <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture>, becomes a much more complicated task.</p>
 <p><a class="anchor" id="Meshrefinement"></a></p><h4>Mesh refinement</h4>
 <p>We use the usual paradigm: solve on a given mesh, then evaluate an error indicator for each cell of each mesh we have. Because it is so convenient, we again use the a posteriori error estimator by Kelly, Gago, Zienkiewicz and Babuska which approximates the error per cell by integrating the jump of the gradient of the solution along the faces of each cell. Using this, we obtain indicators  </p><p class="formulaDsp">
-<picture><source srcset="form_3821_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3776_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \eta_{g,K}, \qquad g=1,2,\ldots,G,\qquad K\in{\cal T}_g,
-\end{eqnarray*}" src="form_3821.png"/></picture>
+\end{eqnarray*}" src="form_3776.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_3822_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal T}_g$" src="form_3822.png"/></picture> is the triangulation used in the solution of <picture><source srcset="form_3807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_g$" src="form_3807.png"/></picture>. The question is what to do with this. For one, it is clear that refining only those cells with the highest error indicators might lead to bad results. To understand this, it is important to realize that <picture><source srcset="form_3823_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_{g,K}$" src="form_3823.png"/></picture> scales with the second derivative of <picture><source srcset="form_3807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_g$" src="form_3807.png"/></picture>. In other words, if we have two energy groups <picture><source srcset="form_3793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g=1,2$" src="form_3793.png"/></picture> whose solutions are equally smooth but where one is larger by a factor of 10,000, for example, then only the cells of that mesh will be refined, whereas the mesh for the solution of small magnitude will remain coarse. This is probably not what one wants, since we can consider both components of the solution equally important.</p>
-<p>In essence, we would therefore have to scale <picture><source srcset="form_3823_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_{g,K}$" src="form_3823.png"/></picture> by an importance factor <picture><source srcset="form_3824_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_g$" src="form_3824.png"/></picture> that says how important it is to resolve <picture><source srcset="form_3807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_g$" src="form_3807.png"/></picture> to any given accuracy. Such important factors can be computed using duality techniques (see, for example, the <a class="el" href="step_14.html">step-14</a> tutorial program, and the reference to the book by Bangerth and Rannacher cited there). We won't go there, however, and simply assume that all energy groups are equally important, and will therefore normalize the error indicators <picture><source srcset="form_3823_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_{g,K}$" src="form_3823.png"/></picture> for group <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> by the maximum of the solution <picture><source srcset="form_3807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_g$" src="form_3807.png"/></picture>. We then refine the cells whose errors satisfy  </p><p class="formulaDsp">
-<picture><source srcset="form_3825_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> where <picture><source srcset="form_3777_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal T}_g$" src="form_3777.png"/></picture> is the triangulation used in the solution of <picture><source srcset="form_3762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_g$" src="form_3762.png"/></picture>. The question is what to do with this. For one, it is clear that refining only those cells with the highest error indicators might lead to bad results. To understand this, it is important to realize that <picture><source srcset="form_3778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_{g,K}$" src="form_3778.png"/></picture> scales with the second derivative of <picture><source srcset="form_3762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_g$" src="form_3762.png"/></picture>. In other words, if we have two energy groups <picture><source srcset="form_3748_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g=1,2$" src="form_3748.png"/></picture> whose solutions are equally smooth but where one is larger by a factor of 10,000, for example, then only the cells of that mesh will be refined, whereas the mesh for the solution of small magnitude will remain coarse. This is probably not what one wants, since we can consider both components of the solution equally important.</p>
+<p>In essence, we would therefore have to scale <picture><source srcset="form_3778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_{g,K}$" src="form_3778.png"/></picture> by an importance factor <picture><source srcset="form_3779_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z_g$" src="form_3779.png"/></picture> that says how important it is to resolve <picture><source srcset="form_3762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_g$" src="form_3762.png"/></picture> to any given accuracy. Such important factors can be computed using duality techniques (see, for example, the <a class="el" href="step_14.html">step-14</a> tutorial program, and the reference to the book by Bangerth and Rannacher cited there). We won't go there, however, and simply assume that all energy groups are equally important, and will therefore normalize the error indicators <picture><source srcset="form_3778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_{g,K}$" src="form_3778.png"/></picture> for group <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> by the maximum of the solution <picture><source srcset="form_3762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_g$" src="form_3762.png"/></picture>. We then refine the cells whose errors satisfy  </p><p class="formulaDsp">
+<picture><source srcset="form_3780_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \frac{\eta_{g,K}}{\|\phi_g\|_\infty}
   &gt;
   \alpha_1
   \displaystyle{\max_{\begin{matrix}1\le g\le G \\ K\in {\cal T}_g\end{matrix}}
     \frac{\eta_{g,K}}{\|\phi_g\|_\infty}}
-\end{eqnarray*}" src="form_3825.png"/></picture>
+\end{eqnarray*}" src="form_3780.png"/></picture>
 </p>
 <p> and coarsen the cells where  </p><p class="formulaDsp">
-<picture><source srcset="form_3826_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \frac{\eta_{g,K}}{\|\phi_g\|_\infty}
/usr/share/doc/packages/dealii/doxygen/deal.II/step_29.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_29.html	2024-03-17 21:57:45.007243958 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_29.html	2024-03-17 21:57:45.015244008 +0000
@@ -139,43 +139,43 @@
 <p><a class="anchor" id="Problemsetting"></a></p><h3>Problem setting</h3>
 <p>The original purpose of this program is to simulate the focusing properties of an ultrasound wave generated by a transducer lens with variable geometry. Recent applications in medical imaging use ultrasound waves not only for imaging purposes, but also to excite certain local effects in a material, like changes in optical properties, that can then be measured by other imaging techniques. A vital ingredient for these methods is the ability to focus the intensity of the ultrasound wave in a particular part of the material, ideally in a point, to be able to examine the properties of the material at that particular location.</p>
 <p>To derive a model for this problem, we think of ultrasound as a pressure wave governed by the wave equation:  </p><p class="formulaDsp">
-<picture><source srcset="form_3728_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3832_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \frac{\partial^2 U}{\partial t^2}       -       c^2 \Delta U = 0
-\]" src="form_3728.png"/></picture>
+\]" src="form_3832.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture> is the wave speed (that for simplicity we assume to be constant), <picture><source srcset="form_3729_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U
-= U(x,t),\;x \in \Omega,\;t\in\mathrm{R}$" src="form_3729.png"/></picture>. The boundary <picture><source srcset="form_2784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma=\partial\Omega$" src="form_2784.png"/></picture> is divided into two parts <picture><source srcset="form_3730_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1$" src="form_3730.png"/></picture> and <picture><source srcset="form_3731_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2=\Gamma\setminus\Gamma_1$" src="form_3731.png"/></picture>, with <picture><source srcset="form_3730_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1$" src="form_3730.png"/></picture> representing the transducer lens and <picture><source srcset="form_3732_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3732.png"/></picture> an absorbing boundary (that is, we want to choose boundary conditions on <picture><source srcset="form_3732_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3732.png"/></picture> in such a way that they imitate a larger domain). On <picture><source srcset="form_3730_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1$" src="form_3730.png"/></picture>, the transducer generates a wave of constant frequency <picture><source srcset="form_3733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\omega}&gt;0$" src="form_3733.png"/></picture> and constant amplitude (that we chose to be 1 here):  </p><p class="formulaDsp">
-<picture><source srcset="form_3734_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture> is the wave speed (that for simplicity we assume to be constant), <picture><source srcset="form_3833_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U
+= U(x,t),\;x \in \Omega,\;t\in\mathrm{R}$" src="form_3833.png"/></picture>. The boundary <picture><source srcset="form_2777_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma=\partial\Omega$" src="form_2777.png"/></picture> is divided into two parts <picture><source srcset="form_3834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1$" src="form_3834.png"/></picture> and <picture><source srcset="form_3835_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2=\Gamma\setminus\Gamma_1$" src="form_3835.png"/></picture>, with <picture><source srcset="form_3834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1$" src="form_3834.png"/></picture> representing the transducer lens and <picture><source srcset="form_3836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3836.png"/></picture> an absorbing boundary (that is, we want to choose boundary conditions on <picture><source srcset="form_3836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3836.png"/></picture> in such a way that they imitate a larger domain). On <picture><source srcset="form_3834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1$" src="form_3834.png"/></picture>, the transducer generates a wave of constant frequency <picture><source srcset="form_3837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\omega}&gt;0$" src="form_3837.png"/></picture> and constant amplitude (that we chose to be 1 here):  </p><p class="formulaDsp">
+<picture><source srcset="form_3838_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 U(x,t) = \cos{\omega t}, \qquad x\in \Gamma_1
-\]" src="form_3734.png"/></picture>
+\]" src="form_3838.png"/></picture>
 </p>
-<p>If there are no other (interior or boundary) sources, and since the only source has frequency <picture><source srcset="form_3735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega$" src="form_3735.png"/></picture>, then the solution admits a separation of variables of the form <picture><source srcset="form_3736_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U(x,t) = \textrm{Re}\left(u(x)\,e^{i\omega
-t})\right)$" src="form_3736.png"/></picture>. The complex-valued function <picture><source srcset="form_3737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(x)$" src="form_3737.png"/></picture> describes the spatial dependency of amplitude and phase (relative to the source) of the waves of frequency <picture><source srcset="form_3738_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\omega}$" src="form_3738.png"/></picture>, with the amplitude being the quantity that we are interested in. By plugging this form of the solution into the wave equation, we see that for <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> we have  </p><p class="formulaDsp">
-<picture><source srcset="form_3739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>If there are no other (interior or boundary) sources, and since the only source has frequency <picture><source srcset="form_3839_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega$" src="form_3839.png"/></picture>, then the solution admits a separation of variables of the form <picture><source srcset="form_3840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U(x,t) = \textrm{Re}\left(u(x)\,e^{i\omega
+t})\right)$" src="form_3840.png"/></picture>. The complex-valued function <picture><source srcset="form_3841_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(x)$" src="form_3841.png"/></picture> describes the spatial dependency of amplitude and phase (relative to the source) of the waves of frequency <picture><source srcset="form_3842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\omega}$" src="form_3842.png"/></picture>, with the amplitude being the quantity that we are interested in. By plugging this form of the solution into the wave equation, we see that for <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> we have  </p><p class="formulaDsp">
+<picture><source srcset="form_3843_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 -\omega^2 u(x) - c^2\Delta u(x) &amp;=&amp; 0, \qquad x\in\Omega,\\
 u(x) &amp;=&amp; 1,  \qquad x\in\Gamma_1.
-\end{eqnarray*}" src="form_3739.png"/></picture>
+\end{eqnarray*}" src="form_3843.png"/></picture>
 </p>
-<p>For finding suitable conditions on <picture><source srcset="form_3732_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3732.png"/></picture> that model an absorbing boundary, consider a wave of the form <picture><source srcset="form_3740_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(x,t)=e^{i(k\cdot x -\omega t)}$" src="form_3740.png"/></picture> with frequency <picture><source srcset="form_3738_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\omega}$" src="form_3738.png"/></picture> traveling in direction <picture><source srcset="form_3741_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k\in {\mathrm{R}^2}$" src="form_3741.png"/></picture>. In order for <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> to solve the wave equation, <picture><source srcset="form_3742_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|k|={\frac{\omega}{c}}$" src="form_3742.png"/></picture> must hold. Suppose that this wave hits the boundary in <picture><source srcset="form_3743_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0\in\Gamma_2$" src="form_3743.png"/></picture> at a right angle, i.e. <picture><source srcset="form_3744_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=\frac{k}{|k|}$" src="form_3744.png"/></picture> with <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> denoting the outer unit normal of <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> in <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture>. Then at <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture>, this wave satisfies the equation  </p><p class="formulaDsp">
-<picture><source srcset="form_3745_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>For finding suitable conditions on <picture><source srcset="form_3836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3836.png"/></picture> that model an absorbing boundary, consider a wave of the form <picture><source srcset="form_3844_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(x,t)=e^{i(k\cdot x -\omega t)}$" src="form_3844.png"/></picture> with frequency <picture><source srcset="form_3842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\omega}$" src="form_3842.png"/></picture> traveling in direction <picture><source srcset="form_3845_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k\in {\mathrm{R}^2}$" src="form_3845.png"/></picture>. In order for <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> to solve the wave equation, <picture><source srcset="form_3846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|k|={\frac{\omega}{c}}$" src="form_3846.png"/></picture> must hold. Suppose that this wave hits the boundary in <picture><source srcset="form_3847_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0\in\Gamma_2$" src="form_3847.png"/></picture> at a right angle, i.e. <picture><source srcset="form_3848_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=\frac{k}{|k|}$" src="form_3848.png"/></picture> with <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> denoting the outer unit normal of <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> in <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture>. Then at <picture><source srcset="form_63_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_0$" src="form_63.png"/></picture>, this wave satisfies the equation  </p><p class="formulaDsp">
+<picture><source srcset="form_3849_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 c (n\cdot\nabla V) + \frac{\partial V}{\partial t} = (i\, c\, |k| - i\, \omega) V = 0.
-\]" src="form_3745.png"/></picture>
+\]" src="form_3849.png"/></picture>
 </p>
 <p> Hence, by enforcing the boundary condition  </p><p class="formulaDsp">
-<picture><source srcset="form_3746_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3850_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 c (n\cdot\nabla U) + \frac{\partial U}{\partial t} = 0, \qquad x\in\Gamma_2,
-\]" src="form_3746.png"/></picture>
+\]" src="form_3850.png"/></picture>
 </p>
-<p> waves that hit the boundary <picture><source srcset="form_3732_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3732.png"/></picture> at a right angle will be perfectly absorbed. On the other hand, those parts of the wave field that do not hit a boundary at a right angle do not satisfy this condition and enforcing it as a boundary condition will yield partial reflections, i.e. only parts of the wave will pass through the boundary as if it wasn't here whereas the remaining fraction of the wave will be reflected back into the domain.</p>
-<p>If we are willing to accept this as a sufficient approximation to an absorbing boundary we finally arrive at the following problem for <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_3747_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> waves that hit the boundary <picture><source srcset="form_3836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3836.png"/></picture> at a right angle will be perfectly absorbed. On the other hand, those parts of the wave field that do not hit a boundary at a right angle do not satisfy this condition and enforcing it as a boundary condition will yield partial reflections, i.e. only parts of the wave will pass through the boundary as if it wasn't here whereas the remaining fraction of the wave will be reflected back into the domain.</p>
+<p>If we are willing to accept this as a sufficient approximation to an absorbing boundary we finally arrive at the following problem for <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_3851_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 -\omega^2 u - c^2\Delta u &amp;=&amp; 0, \qquad x\in\Omega,\\
 c (n\cdot\nabla u) + i\,\omega\,u &amp;=&amp;0, \qquad x\in\Gamma_2,\\
 u &amp;=&amp; 1,  \qquad x\in\Gamma_1.
-\end{eqnarray*}" src="form_3747.png"/></picture>
+\end{eqnarray*}" src="form_3851.png"/></picture>
 </p>
-<p> This is a Helmholtz equation (similar to the one in <a class="el" href="step_7.html">step-7</a>, but this time with ''the bad sign'') with Dirichlet data on <picture><source srcset="form_3730_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1$" src="form_3730.png"/></picture> and mixed boundary conditions on <picture><source srcset="form_3732_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3732.png"/></picture>. Because of the condition on <picture><source srcset="form_3732_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3732.png"/></picture>, we cannot just treat the equations for real and imaginary parts of <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> separately. What we can do however is to view the PDE for <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> as a system of two PDEs for the real and imaginary parts of <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture>, with the boundary condition on <picture><source srcset="form_3732_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3732.png"/></picture> representing the coupling terms between the two components of the system. This works along the following lines: Let <picture><source srcset="form_3748_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v=\textrm{Re}\;u,\; w=\textrm{Im}\;u$" src="form_3748.png"/></picture>, then in terms of <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> and <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture> we have the following system:  </p><p class="formulaDsp">
-<picture><source srcset="form_3749_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> This is a Helmholtz equation (similar to the one in <a class="el" href="step_7.html">step-7</a>, but this time with ''the bad sign'') with Dirichlet data on <picture><source srcset="form_3834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1$" src="form_3834.png"/></picture> and mixed boundary conditions on <picture><source srcset="form_3836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3836.png"/></picture>. Because of the condition on <picture><source srcset="form_3836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3836.png"/></picture>, we cannot just treat the equations for real and imaginary parts of <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> separately. What we can do however is to view the PDE for <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> as a system of two PDEs for the real and imaginary parts of <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture>, with the boundary condition on <picture><source srcset="form_3836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3836.png"/></picture> representing the coupling terms between the two components of the system. This works along the following lines: Let <picture><source srcset="form_3852_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v=\textrm{Re}\;u,\; w=\textrm{Im}\;u$" src="form_3852.png"/></picture>, then in terms of <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> and <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture> we have the following system:  </p><p class="formulaDsp">
+<picture><source srcset="form_3853_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \left.\begin{array}{ccc}
     -\omega^2 v - c^2\Delta v &amp;=&amp; 0 \quad\\
     -\omega^2 w - c^2\Delta w &amp;=&amp; 0 \quad
@@ -190,26 +190,26 @@
     v &amp;=&amp; 1 \quad\\
     w &amp;=&amp; 0 \quad
   \end{array}\right\} &amp;\;&amp; x\in\Gamma_1.
-\end{eqnarray*}" src="form_3749.png"/></picture>
+\end{eqnarray*}" src="form_3853.png"/></picture>
 </p>
-<p>For test functions <picture><source srcset="form_3750_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi,\psi$" src="form_3750.png"/></picture> with <picture><source srcset="form_3751_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi|_{\Gamma_1}=\psi|_{\Gamma_1}=0$" src="form_3751.png"/></picture>, after the usual multiplication, integration over <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> and applying integration by parts, we get the weak formulation  </p><p class="formulaDsp">
-<picture><source srcset="form_3752_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>For test functions <picture><source srcset="form_3854_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi,\psi$" src="form_3854.png"/></picture> with <picture><source srcset="form_3855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi|_{\Gamma_1}=\psi|_{\Gamma_1}=0$" src="form_3855.png"/></picture>, after the usual multiplication, integration over <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> and applying integration by parts, we get the weak formulation  </p><p class="formulaDsp">
+<picture><source srcset="form_3856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 -\omega^2 \langle \phi, v \rangle_{\mathrm{L}^2(\Omega)}
 + c^2 \langle \nabla \phi, \nabla v \rangle_{\mathrm{L}^2(\Omega)}
 - c \omega \langle \phi, w \rangle_{\mathrm{L}^2(\Gamma_2)} &amp;=&amp; 0, \\
 -\omega^2 \langle \psi, w \rangle_{\mathrm{L}^2(\Omega)}
 + c^2 \langle \nabla \psi, \nabla w \rangle_{\mathrm{L}^2(\Omega)}
 + c \omega \langle \psi, v \rangle_{\mathrm{L}^2(\Gamma_2)} &amp;=&amp; 0.
-\end{eqnarray*}" src="form_3752.png"/></picture>
+\end{eqnarray*}" src="form_3856.png"/></picture>
 </p>
-<p>We choose finite element spaces <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture> and <picture><source srcset="form_3753_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W_h$" src="form_3753.png"/></picture> with bases <picture><source srcset="form_3754_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\phi_j\}_{j=1}^n,
-\{\psi_j\}_{j=1}^n$" src="form_3754.png"/></picture> and look for approximate solutions  </p><p class="formulaDsp">
-<picture><source srcset="form_3755_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>We choose finite element spaces <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture> and <picture><source srcset="form_3857_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W_h$" src="form_3857.png"/></picture> with bases <picture><source srcset="form_3858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\phi_j\}_{j=1}^n,
+\{\psi_j\}_{j=1}^n$" src="form_3858.png"/></picture> and look for approximate solutions  </p><p class="formulaDsp">
+<picture><source srcset="form_3859_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 v_h = \sum_{j=1}^n \alpha_j \phi_j, \;\; w_h = \sum_{j=1}^n \beta_j \psi_j.
-\]" src="form_3755.png"/></picture>
+\]" src="form_3859.png"/></picture>
 </p>
 <p> Plugging into the variational form yields the equation system  </p><p class="formulaDsp">
-<picture><source srcset="form_3756_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \renewcommand{\arraystretch}{2.0}
 \left.\begin{array}{ccc}
 \sum_{j=1}^n
@@ -232,10 +232,10 @@
 \right)\alpha_j
 &amp;=&amp; 0
 \end{array}\right\}\;\;\forall\; i =1,\ldots,n.
-\]" src="form_3756.png"/></picture>
+\]" src="form_3860.png"/></picture>
 </p>
 <p> In matrix notation:  </p><p class="formulaDsp">
-<picture><source srcset="form_3757_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_3861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \renewcommand{\arraystretch}{2.0}
 \left(
 \begin{array}{cc}
@@ -258,12 +258,12 @@
 0 \\ 0
 \end{array}
 \right)
-\]" src="form_3757.png"/></picture>
+\]" src="form_3861.png"/></picture>
 </p>
-<p> (One should not be fooled by the right hand side being zero here, that is because we haven't included the Dirichlet boundary data yet.) Because of the alternating sign in the off-diagonal blocks, we can already see that this system is non-symmetric, in fact it is even indefinite. Of course, there is no necessity to choose the spaces <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture> and <picture><source srcset="form_3753_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W_h$" src="form_3753.png"/></picture> to be the same. However, we expect real and imaginary part of the solution to have similar properties and will therefore indeed take <picture><source srcset="form_3758_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h=W_h$" src="form_3758.png"/></picture> in the implementation, and also use the same basis functions <picture><source srcset="form_3759_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i = \psi_i$" src="form_3759.png"/></picture> for both spaces. The reason for the notation using different symbols is just that it allows us to distinguish between shape functions for <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> and <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture>, as this distinction plays an important role in the implementation.</p>
+<p> (One should not be fooled by the right hand side being zero here, that is because we haven't included the Dirichlet boundary data yet.) Because of the alternating sign in the off-diagonal blocks, we can already see that this system is non-symmetric, in fact it is even indefinite. Of course, there is no necessity to choose the spaces <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture> and <picture><source srcset="form_3857_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W_h$" src="form_3857.png"/></picture> to be the same. However, we expect real and imaginary part of the solution to have similar properties and will therefore indeed take <picture><source srcset="form_3862_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h=W_h$" src="form_3862.png"/></picture> in the implementation, and also use the same basis functions <picture><source srcset="form_3863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i = \psi_i$" src="form_3863.png"/></picture> for both spaces. The reason for the notation using different symbols is just that it allows us to distinguish between shape functions for <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> and <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture>, as this distinction plays an important role in the implementation.</p>
 <p><a class="anchor" id="Thetestcase"></a></p><h3>The test case</h3>
-<p>For the computations, we will consider wave propagation in the unit square, with ultrasound generated by a transducer lens that is shaped like a segment of the circle with center at <picture><source srcset="form_3760_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0.5, d)$" src="form_3760.png"/></picture> and a radius slightly greater than <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>; this shape should lead to a focusing of the sound wave at the center of the circle. Varying <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> changes the "focus" of the lens and affects the spatial distribution of the intensity of <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture>, where our main concern is how well <picture><source srcset="form_3761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|u|=\sqrt{v^2+w^2}$" src="form_3761.png"/></picture> is focused.</p>
-<p>In the program below, we will implement the complex-valued Helmholtz equations using the formulation with split real and imaginary parts. We will also discuss how to generate a domain that looks like a square with a slight bulge simulating the transducer (in the <code>UltrasoundProblem&lt;dim&gt;::make_grid()</code> function), and how to generate graphical output that not only contains the solution components <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> and <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture>, but also the magnitude <picture><source srcset="form_3762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{v^2+w^2}$" src="form_3762.png"/></picture> directly in the output file (in <code>UltrasoundProblem&lt;dim&gt;::output_results()</code>). Finally, we use the <a class="el" href="classParameterHandler.html">ParameterHandler</a> class to easily read parameters like the focal distance <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>, wave speed <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>, frequency <picture><source srcset="form_3735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega$" src="form_3735.png"/></picture>, and a number of other parameters from an input file at run-time, rather than fixing those parameters in the source code where we would have to re-compile every time we want to change parameters.</p>
+<p>For the computations, we will consider wave propagation in the unit square, with ultrasound generated by a transducer lens that is shaped like a segment of the circle with center at <picture><source srcset="form_3864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0.5, d)$" src="form_3864.png"/></picture> and a radius slightly greater than <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>; this shape should lead to a focusing of the sound wave at the center of the circle. Varying <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> changes the "focus" of the lens and affects the spatial distribution of the intensity of <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture>, where our main concern is how well <picture><source srcset="form_3865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|u|=\sqrt{v^2+w^2}$" src="form_3865.png"/></picture> is focused.</p>
+<p>In the program below, we will implement the complex-valued Helmholtz equations using the formulation with split real and imaginary parts. We will also discuss how to generate a domain that looks like a square with a slight bulge simulating the transducer (in the <code>UltrasoundProblem&lt;dim&gt;::make_grid()</code> function), and how to generate graphical output that not only contains the solution components <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> and <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture>, but also the magnitude <picture><source srcset="form_3866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{v^2+w^2}$" src="form_3866.png"/></picture> directly in the output file (in <code>UltrasoundProblem&lt;dim&gt;::output_results()</code>). Finally, we use the <a class="el" href="classParameterHandler.html">ParameterHandler</a> class to easily read parameters like the focal distance <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>, wave speed <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>, frequency <picture><source srcset="form_3839_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega$" src="form_3839.png"/></picture>, and a number of other parameters from an input file at run-time, rather than fixing those parameters in the source code where we would have to re-compile every time we want to change parameters.</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
 <p><a class="anchor" id="Includefiles"></a> </p><h3>Include files</h3>
 <p>The following header files have all been discussed before:</p>
@@ -310,7 +310,7 @@
 <div class="ttc" id="anamespacedealii_html"><div class="ttname"><a href="namespacedealii.html">dealii</a></div><div class="ttdef"><b>Definition</b> <a href="namespace__dealii_8h_source.html#href_anchor">namespace_dealii.h:26</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="ThecodeDirichletBoundaryValuescodeclass"></a> </p><h3>The <code>DirichletBoundaryValues</code> class</h3>
 <p>First we define a class for the function representing the Dirichlet boundary values. This has been done many times before and therefore does not need much explanation.</p>
-<p>Since there are two values <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> and <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture> that need to be prescribed at the boundary, we have to tell the base class that this is a vector-valued function with two components, and the <code>vector_value</code> function and its cousin <code>vector_value_list</code> must return vectors with two entries. In our case the function is very simple, it just returns 1 for the real part <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> and 0 for the imaginary part <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture> regardless of the point where it is evaluated.</p>
+<p>Since there are two values <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> and <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture> that need to be prescribed at the boundary, we have to tell the base class that this is a vector-valued function with two components, and the <code>vector_value</code> function and its cousin <code>vector_value_list</code> must return vectors with two entries. In our case the function is very simple, it just returns 1 for the real part <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> and 0 for the imaginary part <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture> regardless of the point where it is evaluated.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keyword">class </span>DirichletBoundaryValues : <span class="keyword">public</span> <a class="code hl_class" href="classFunction.html">Function</a>&lt;dim&gt;</div>
 <div class="line">    {</div>
@@ -369,7 +369,7 @@
 <p>The <code>declare_parameters</code> function declares all the parameters that our <a class="el" href="classParameterHandler.html">ParameterHandler</a> object will be able to read from input files, along with their types, range conditions and the subsections they appear in. We will wrap all the entries that go into a section in a pair of braces to force the editor to indent them by one level, making it simpler to read which entries together form a section:</p>
 <div class="fragment"><div class="line">    <span class="keywordtype">void</span> ParameterReader::declare_parameters()</div>
 <div class="line">    {</div>
-</div><!-- fragment --><p>Parameters for mesh and geometry include the number of global refinement steps that are applied to the initial coarse mesh and the focal distance <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> of the transducer lens. For the number of refinement steps, we allow integer values in the range <picture><source srcset="form_3763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,\infty)$" src="form_3763.png"/></picture>, where the omitted second argument to the <a class="el" href="classPatterns_1_1Integer.html">Patterns::Integer</a> object denotes the half-open interval. For the focal distance any number greater than zero is accepted:</p>
+</div><!-- fragment --><p>Parameters for mesh and geometry include the number of global refinement steps that are applied to the initial coarse mesh and the focal distance <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> of the transducer lens. For the number of refinement steps, we allow integer values in the range <picture><source srcset="form_3867_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,\infty)$" src="form_3867.png"/></picture>, where the omitted second argument to the <a class="el" href="classPatterns_1_1Integer.html">Patterns::Integer</a> object denotes the half-open interval. For the focal distance any number greater than zero is accepted:</p>
 <div class="fragment"><div class="line">      prm.enter_subsection(<span class="stringliteral">&quot;Mesh &amp; geometry parameters&quot;</span>);</div>
 <div class="line">      {</div>
 <div class="line">        prm.declare_entry(<span class="stringliteral">&quot;Number of refinements&quot;</span>,</div>
@@ -388,7 +388,7 @@
 <div class="line">  </div>
 <div class="ttc" id="aclassPatterns_1_1Double_html"><div class="ttname"><a href="classPatterns_1_1Double.html">Patterns::Double</a></div><div class="ttdef"><b>Definition</b> <a href="patterns_8h_source.html#href_anchor">patterns.h:292</a></div></div>
 <div class="ttc" id="aclassPatterns_1_1Integer_html"><div class="ttname"><a href="classPatterns_1_1Integer.html">Patterns::Integer</a></div><div class="ttdef"><b>Definition</b> <a href="patterns_8h_source.html#href_anchor">patterns.h:189</a></div></div>
-</div><!-- fragment --><p>The next subsection is devoted to the physical parameters appearing in the equation, which are the frequency <picture><source srcset="form_3735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega$" src="form_3735.png"/></picture> and wave speed <picture><source srcset="form_371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_371.png"/></picture>. Again, both need to lie in the half-open interval <picture><source srcset="form_3763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,\infty)$" src="form_3763.png"/></picture> represented by calling the <a class="el" href="classPatterns_1_1Double.html">Patterns::Double</a> class with only the left end-point as argument:</p>
+</div><!-- fragment --><p>The next subsection is devoted to the physical parameters appearing in the equation, which are the frequency <picture><source srcset="form_3839_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega$" src="form_3839.png"/></picture> and wave speed <picture><source srcset="form_356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c$" src="form_356.png"/></picture>. Again, both need to lie in the half-open interval <picture><source srcset="form_3867_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,\infty)$" src="form_3867.png"/></picture> represented by calling the <a class="el" href="classPatterns_1_1Double.html">Patterns::Double</a> class with only the left end-point as argument:</p>
 <div class="fragment"><div class="line">      prm.enter_subsection(<span class="stringliteral">&quot;Physical constants&quot;</span>);</div>
 <div class="line">      {</div>
 <div class="line">        prm.declare_entry(<span class="stringliteral">&quot;c&quot;</span>, <span class="stringliteral">&quot;1.5e5&quot;</span>, <a class="code hl_class" href="classPatterns_1_1Double.html">Patterns::Double</a>(0), <span class="stringliteral">&quot;Wave speed&quot;</span>);</div>
@@ -426,8 +426,8 @@
 <div class="line">  </div>
 <div class="line">  </div>
 </div><!-- fragment --><p><a class="anchor" id="ThecodeComputeIntensitycodeclass"></a> </p><h3>The <code>ComputeIntensity</code> class</h3>
-<p>As mentioned in the introduction, the quantity that we are really after is the spatial distribution of the intensity of the ultrasound wave, which corresponds to <picture><source srcset="form_3761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|u|=\sqrt{v^2+w^2}$" src="form_3761.png"/></picture>. Now we could just be content with having <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> and <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture> in our output, and use a suitable visualization or postprocessing tool to derive <picture><source srcset="form_3764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|u|$" src="form_3764.png"/></picture> from the solution we computed. However, there is also a way to output data derived from the solution in deal.II, and we are going to make use of this mechanism here.</p>
-<p>So far we have always used the <a class="el" href="classDataOut__DoFData.html#href_anchor">DataOut::add_data_vector</a> function to add vectors containing output data to a <a class="el" href="classDataOut.html">DataOut</a> object. There is a special version of this function that in addition to the data vector has an additional argument of type <a class="el" href="classDataPostprocessor.html">DataPostprocessor</a>. What happens when this function is used for output is that at each point where output data is to be generated, the <a class="el" href="classDataPostprocessor.html#href_anchor">DataPostprocessor::evaluate_scalar_field()</a> or <a class="el" href="classDataPostprocessor.html#href_anchor">DataPostprocessor::evaluate_vector_field()</a> function of the specified <a class="el" href="classDataPostprocessor.html">DataPostprocessor</a> object is invoked to compute the output quantities from the values, the gradients and the second derivatives of the finite element function represented by the data vector (in the case of face related data, normal vectors are available as well). Hence, this allows us to output any quantity that can locally be derived from the values of the solution and its derivatives. Of course, the ultrasound intensity <picture><source srcset="form_3764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|u|$" src="form_3764.png"/></picture> is such a quantity and its computation doesn't even involve any derivatives of <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> or <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture>.</p>
+<p>As mentioned in the introduction, the quantity that we are really after is the spatial distribution of the intensity of the ultrasound wave, which corresponds to <picture><source srcset="form_3865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|u|=\sqrt{v^2+w^2}$" src="form_3865.png"/></picture>. Now we could just be content with having <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> and <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture> in our output, and use a suitable visualization or postprocessing tool to derive <picture><source srcset="form_3868_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|u|$" src="form_3868.png"/></picture> from the solution we computed. However, there is also a way to output data derived from the solution in deal.II, and we are going to make use of this mechanism here.</p>
+<p>So far we have always used the <a class="el" href="classDataOut__DoFData.html#href_anchor">DataOut::add_data_vector</a> function to add vectors containing output data to a <a class="el" href="classDataOut.html">DataOut</a> object. There is a special version of this function that in addition to the data vector has an additional argument of type <a class="el" href="classDataPostprocessor.html">DataPostprocessor</a>. What happens when this function is used for output is that at each point where output data is to be generated, the <a class="el" href="classDataPostprocessor.html#href_anchor">DataPostprocessor::evaluate_scalar_field()</a> or <a class="el" href="classDataPostprocessor.html#href_anchor">DataPostprocessor::evaluate_vector_field()</a> function of the specified <a class="el" href="classDataPostprocessor.html">DataPostprocessor</a> object is invoked to compute the output quantities from the values, the gradients and the second derivatives of the finite element function represented by the data vector (in the case of face related data, normal vectors are available as well). Hence, this allows us to output any quantity that can locally be derived from the values of the solution and its derivatives. Of course, the ultrasound intensity <picture><source srcset="form_3868_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|u|$" src="form_3868.png"/></picture> is such a quantity and its computation doesn't even involve any derivatives of <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> or <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture>.</p>
 <p>In practice, the <a class="el" href="classDataPostprocessor.html">DataPostprocessor</a> class only provides an interface to this functionality, and we need to derive our own class from it in order to implement the functions specified by the interface. In the most general case one has to implement several member functions but if the output quantity is a single scalar then some of this boilerplate code can be handled by a more specialized class, <a class="el" href="classDataPostprocessorScalar.html">DataPostprocessorScalar</a> and we can derive from that one instead. This is what the <code>ComputeIntensity</code> class does:</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keyword">class </span>ComputeIntensity : <span class="keyword">public</span> <a class="code hl_class" href="classDataPostprocessorScalar.html">DataPostprocessorScalar</a>&lt;dim&gt;</div>
@@ -443,8 +443,8 @@
 <div class="ttc" id="aclassDataPostprocessorScalar_html"><div class="ttname"><a href="classDataPostprocessorScalar.html">DataPostprocessorScalar</a></div><div class="ttdef"><b>Definition</b> <a href="data__postprocessor_8h_source.html#href_anchor">data_postprocessor.h:718</a></div></div>
 <div class="ttc" id="aclassDataPostprocessor_html_ac907e98f8f03ea7e6ac25237271dc7b7"><div class="ttname"><a href="classDataPostprocessor.html#href_anchor">DataPostprocessor::evaluate_vector_field</a></div><div class="ttdeci">virtual void evaluate_vector_field(const DataPostprocessorInputs::Vector&lt; dim &gt; &amp;input_data, std::vector&lt; Vector&lt; double &gt; &gt; &amp;computed_quantities) const</div><div class="ttdef"><b>Definition</b> <a href="data__postprocessor_8cc_source.html#href_anchor">data_postprocessor.cc:60</a></div></div>
 <div class="ttc" id="astructDataPostprocessorInputs_1_1Vector_html"><div class="ttname"><a href="structDataPostprocessorInputs_1_1Vector.html">DataPostprocessorInputs::Vector</a></div><div class="ttdef"><b>Definition</b> <a href="data__postprocessor_8h_source.html#href_anchor">data_postprocessor.h:402</a></div></div>
-</div><!-- fragment --><p>In the constructor, we need to call the constructor of the base class with two arguments. The first denotes the name by which the single scalar quantity computed by this class should be represented in output files. In our case, the postprocessor has <picture><source srcset="form_3764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|u|$" src="form_3764.png"/></picture> as output, so we use "Intensity".</p>
-<p>The second argument is a set of flags that indicate which data is needed by the postprocessor in order to compute the output quantities. This can be any subset of update_values, update_gradients and update_hessians (and, in the case of face data, also update_normal_vectors), which are documented in UpdateFlags. Of course, computation of the derivatives requires additional resources, so only the flags for data that are really needed should be given here, just as we do when we use <a class="el" href="classFEValues.html">FEValues</a> objects. In our case, only the function values of <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> and <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture> are needed to compute <picture><source srcset="form_3764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|u|$" src="form_3764.png"/></picture>, so we're good with the update_values flag.</p>
+</div><!-- fragment --><p>In the constructor, we need to call the constructor of the base class with two arguments. The first denotes the name by which the single scalar quantity computed by this class should be represented in output files. In our case, the postprocessor has <picture><source srcset="form_3868_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|u|$" src="form_3868.png"/></picture> as output, so we use "Intensity".</p>
+<p>The second argument is a set of flags that indicate which data is needed by the postprocessor in order to compute the output quantities. This can be any subset of update_values, update_gradients and update_hessians (and, in the case of face data, also update_normal_vectors), which are documented in UpdateFlags. Of course, computation of the derivatives requires additional resources, so only the flags for data that are really needed should be given here, just as we do when we use <a class="el" href="classFEValues.html">FEValues</a> objects. In our case, only the function values of <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> and <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture> are needed to compute <picture><source srcset="form_3868_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|u|$" src="form_3868.png"/></picture>, so we're good with the update_values flag.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    ComputeIntensity&lt;dim&gt;::ComputeIntensity()</div>
 <div class="line">      : <a class="code hl_class" href="classDataPostprocessorScalar.html">DataPostprocessorScalar</a>&lt;dim&gt;(&quot;Intensity&quot;, <a class="code hl_enumvalue" href="group__feaccess.html#href_anchor">update_values</a>)</div>
@@ -452,7 +452,7 @@
 <div class="line">  </div>
 <div class="line">  </div>
 <div class="ttc" id="agroup__feaccess_html_ggaa94b67d2fdcc390690c523f28019e52fa4057ca2f127aa619c65886a9d3ad4aea"><div class="ttname"><a href="group__feaccess.html#href_anchor">update_values</a></div><div class="ttdeci">@ update_values</div><div class="ttdoc">Shape function values.</div><div class="ttdef"><b>Definition</b> <a href="fe__update__flags_8h_source.html#href_anchor">fe_update_flags.h:76</a></div></div>
-</div><!-- fragment --><p>The actual postprocessing happens in the following function. Its input is an object that stores values of the function (which is here vector-valued) representing the data vector given to <a class="el" href="classDataOut__DoFData.html#href_anchor">DataOut::add_data_vector</a>, evaluated at all evaluation points where we generate output, and some tensor objects representing derivatives (that we don't use here since <picture><source srcset="form_3764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|u|$" src="form_3764.png"/></picture> is computed from just <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> and <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture>). The derived quantities are returned in the <code>computed_quantities</code> vector. Remember that this function may only use data for which the respective update flag is specified by <code>get_needed_update_flags</code>. For example, we may not use the derivatives here, since our implementation of <code>get_needed_update_flags</code> requests that only function values are provided.</p>
+</div><!-- fragment --><p>The actual postprocessing happens in the following function. Its input is an object that stores values of the function (which is here vector-valued) representing the data vector given to <a class="el" href="classDataOut__DoFData.html#href_anchor">DataOut::add_data_vector</a>, evaluated at all evaluation points where we generate output, and some tensor objects representing derivatives (that we don't use here since <picture><source srcset="form_3868_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|u|$" src="form_3868.png"/></picture> is computed from just <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> and <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture>). The derived quantities are returned in the <code>computed_quantities</code> vector. Remember that this function may only use data for which the respective update flag is specified by <code>get_needed_update_flags</code>. For example, we may not use the derivatives here, since our implementation of <code>get_needed_update_flags</code> requests that only function values are provided.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> ComputeIntensity&lt;dim&gt;::evaluate_vector_field(</div>
 <div class="line">      <span class="keyword">const</span> <a class="code hl_struct" href="structDataPostprocessorInputs_1_1Vector.html">DataPostprocessorInputs::Vector&lt;dim&gt;</a> &amp;inputs,</div>
@@ -460,7 +460,7 @@
 <div class="line">    {</div>
 <div class="line">      <a class="code hl_define" href="group__Exceptions.html#href_anchor">AssertDimension</a>(computed_quantities.size(), inputs.solution_values.size());</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>The computation itself is straightforward: We iterate over each entry in the output vector and compute <picture><source srcset="form_3764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|u|$" src="form_3764.png"/></picture> from the corresponding values of <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> and <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture>. We do this by creating a complex number <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> and then calling <code><a class="el" href="namespacestd.html#href_anchor">std::abs()</a></code> on the result. (One may be tempted to call <code>std::norm()</code>, but in a historical quirk, the C++ committee decided that <code>std::norm()</code> should return the <em>square</em> of the absolute value &ndash; thereby not satisfying the properties mathematicians require of something called a "norm".)</p>
+</div><!-- fragment --><p>The computation itself is straightforward: We iterate over each entry in the output vector and compute <picture><source srcset="form_3868_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|u|$" src="form_3868.png"/></picture> from the corresponding values of <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> and <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture>. We do this by creating a complex number <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> and then calling <code><a class="el" href="namespacestd.html#href_anchor">std::abs()</a></code> on the result. (One may be tempted to call <code>std::norm()</code>, but in a historical quirk, the C++ committee decided that <code>std::norm()</code> should return the <em>square</em> of the absolute value &ndash; thereby not satisfying the properties mathematicians require of something called a "norm".)</p>
 <div class="fragment"><div class="line">      <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> p = 0; p &lt; computed_quantities.size(); ++p)</div>
 <div class="line">        {</div>
 <div class="line">          <a class="code hl_define" href="group__Exceptions.html#href_anchor">AssertDimension</a>(computed_quantities[p].size(), 1);</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_3.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_3.html	2024-03-17 21:57:45.079244403 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_3.html	2024-03-17 21:57:45.079244403 +0000
@@ -137,99 +137,99 @@
 <dl class="section note"><dt>Note</dt><dd>The material presented here is also discussed in <a href="http://www.math.colostate.edu/~bangerth/videos.676.10.html">video lecture 10</a>. (All video lectures are also available <a href="http://www.math.colostate.edu/~bangerth/videos.html">here</a>.)</dd></dl>
 <p><a class="anchor" id="Thebasicsetupoffiniteelementmethods"></a></p><h3>The basic set up of finite element methods</h3>
 <p>This is the first example where we actually use finite elements to compute something. We will solve a simple version of Poisson's equation with zero boundary values, but a nonzero right hand side:  </p><p class="formulaDsp">
-<picture><source srcset="form_3865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_3877_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   -\Delta u &amp;= f \qquad\qquad &amp; \text{in}\ \Omega,
   \\
   u &amp;= 0 \qquad\qquad &amp; \text{on}\ \partial\Omega.
-\end{align*}" src="form_3865.png"/></picture>
+\end{align*}" src="form_3877.png"/></picture>
 </p>
-<p> We will solve this equation on the square, <picture><source srcset="form_3866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega=[-1,1]^2$" src="form_3866.png"/></picture>, for which you've already learned how to generate a mesh in <a class="el" href="step_1.html">step-1</a> and <a class="el" href="step_2.html">step-2</a>. In this program, we will also only consider the particular case <picture><source srcset="form_3867_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)=1$" src="form_3867.png"/></picture> and come back to how to implement the more general case in the next tutorial program, <a class="el" href="step_4.html">step-4</a>.</p>
-<p>If you've learned about the basics of the finite element method, you will remember the steps we need to take to approximate the solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> by a finite dimensional approximation. Specifically, we first need to derive the weak form of the equation above, which we obtain by multiplying the equation by a test function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> <em>from the left</em> (we will come back to the reason for multiplying from the left and not from the right below) and integrating over the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_3868_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> We will solve this equation on the square, <picture><source srcset="form_3878_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega=[-1,1]^2$" src="form_3878.png"/></picture>, for which you've already learned how to generate a mesh in <a class="el" href="step_1.html">step-1</a> and <a class="el" href="step_2.html">step-2</a>. In this program, we will also only consider the particular case <picture><source srcset="form_3879_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)=1$" src="form_3879.png"/></picture> and come back to how to implement the more general case in the next tutorial program, <a class="el" href="step_4.html">step-4</a>.</p>
+<p>If you've learned about the basics of the finite element method, you will remember the steps we need to take to approximate the solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> by a finite dimensional approximation. Specifically, we first need to derive the weak form of the equation above, which we obtain by multiplying the equation by a test function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> <em>from the left</em> (we will come back to the reason for multiplying from the left and not from the right below) and integrating over the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_3880_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   -\int_\Omega \varphi \Delta u = \int_\Omega \varphi f.
-\end{align*}" src="form_3868.png"/></picture>
+\end{align*}" src="form_3880.png"/></picture>
 </p>
 <p> This can be integrated by parts:  </p><p class="formulaDsp">
-<picture><source srcset="form_3869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_3881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \int_\Omega \nabla\varphi \cdot \nabla u
   -
   \int_{\partial\Omega} \varphi \mathbf{n}\cdot \nabla u
    = \int_\Omega \varphi f.
-\end{align*}" src="form_3869.png"/></picture>
+\end{align*}" src="form_3881.png"/></picture>
 </p>
-<p> The test function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> has to satisfy the same kind of boundary conditions (in mathematical terms: it needs to come from the tangent space of the set in which we seek the solution), so on the boundary <picture><source srcset="form_3870_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi=0$" src="form_3870.png"/></picture> and consequently the weak form we are looking for reads  </p><p class="formulaDsp">
-<picture><source srcset="form_3872_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> The test function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> has to satisfy the same kind of boundary conditions (in mathematical terms: it needs to come from the tangent space of the set in which we seek the solution), so on the boundary <picture><source srcset="form_3882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi=0$" src="form_3882.png"/></picture> and consequently the weak form we are looking for reads  </p><p class="formulaDsp">
+<picture><source srcset="form_3883_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   (\nabla\varphi, \nabla u)
    = (\varphi, f),
-\end{align*}" src="form_3872.png"/></picture>
+\end{align*}" src="form_3883.png"/></picture>
 </p>
-<p> where we have used the common notation <picture><source srcset="form_3873_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(a,b)=\int_\Omega a\; b$" src="form_3873.png"/></picture>. The problem then asks for a function <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> for which this statement is true for all test functions <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> from the appropriate space (which here is the space <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture>).</p>
-<p>Of course we can't find such a function on a computer in the general case, and instead we seek an approximation <picture><source srcset="form_3875_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)=\sum_j U_j \varphi_j(\mathbf
-x)$" src="form_3875.png"/></picture>, where the <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> are unknown expansion coefficients we need to determine (the "degrees of freedom" of this problem), and <picture><source srcset="form_166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i(\mathbf x)$" src="form_166.png"/></picture> are the finite element shape functions we will use. To define these shape functions, we need the following:</p>
+<p> where we have used the common notation <picture><source srcset="form_3884_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(a,b)=\int_\Omega a\; b$" src="form_3884.png"/></picture>. The problem then asks for a function <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> for which this statement is true for all test functions <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> from the appropriate space (which here is the space <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture>).</p>
+<p>Of course we can't find such a function on a computer in the general case, and instead we seek an approximation <picture><source srcset="form_3885_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)=\sum_j U_j \varphi_j(\mathbf
+x)$" src="form_3885.png"/></picture>, where the <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> are unknown expansion coefficients we need to determine (the "degrees of freedom" of this problem), and <picture><source srcset="form_140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i(\mathbf x)$" src="form_140.png"/></picture> are the finite element shape functions we will use. To define these shape functions, we need the following:</p>
 <ul>
 <li>A mesh on which to define shape functions. You have already seen how to generate and manipulate the objects that describe meshes in <a class="el" href="step_1.html">step-1</a> and <a class="el" href="step_2.html">step-2</a>.</li>
-<li>A finite element that describes the shape functions we want to use on the reference cell (which in deal.II is always the unit interval <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture>, the unit square <picture><source srcset="form_735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]^2$" src="form_735.png"/></picture> or the unit cube <picture><source srcset="form_3878_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]^3$" src="form_3878.png"/></picture>, depending on which space dimension you work in). In <a class="el" href="step_2.html">step-2</a>, we had already used an object of type FE_Q&lt;2&gt;, which denotes the usual Lagrange elements that define shape functions by interpolation on support points. The simplest one is FE_Q&lt;2&gt;(1), which uses polynomial degree 1. In 2d, these are often referred to as <em>bilinear</em>, since they are linear in each of the two coordinates of the reference cell. (In 1d, they would be <em>linear</em> and in 3d <em>tri-linear</em>; however, in the deal.II documentation, we will frequently not make this distinction and simply always call these functions "linear".)</li>
+<li>A finite element that describes the shape functions we want to use on the reference cell (which in deal.II is always the unit interval <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture>, the unit square <picture><source srcset="form_735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]^2$" src="form_735.png"/></picture> or the unit cube <picture><source srcset="form_3886_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]^3$" src="form_3886.png"/></picture>, depending on which space dimension you work in). In <a class="el" href="step_2.html">step-2</a>, we had already used an object of type FE_Q&lt;2&gt;, which denotes the usual Lagrange elements that define shape functions by interpolation on support points. The simplest one is FE_Q&lt;2&gt;(1), which uses polynomial degree 1. In 2d, these are often referred to as <em>bilinear</em>, since they are linear in each of the two coordinates of the reference cell. (In 1d, they would be <em>linear</em> and in 3d <em>tri-linear</em>; however, in the deal.II documentation, we will frequently not make this distinction and simply always call these functions "linear".)</li>
 <li>A <a class="el" href="classDoFHandler.html">DoFHandler</a> object that enumerates all the degrees of freedom on the mesh, taking the reference cell description the finite element object provides as the basis. You've also already seen how to do this in <a class="el" href="step_2.html">step-2</a>.</li>
 <li>A mapping that tells how the shape functions on the real cell are obtained from the shape functions defined by the finite element class on the reference cell. By default, unless you explicitly say otherwise, deal.II will use a (bi-, tri-)linear mapping for this, so in most cases you don't have to worry about this step.</li>
 </ul>
-<p>Through these steps, we now have a set of functions <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture>, and we can define the weak form of the discrete problem: Find a function <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture>, i.e., find the expansion coefficients <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> mentioned above, so that  </p><p class="formulaDsp">
-<picture><source srcset="form_3879_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>Through these steps, we now have a set of functions <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture>, and we can define the weak form of the discrete problem: Find a function <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture>, i.e., find the expansion coefficients <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> mentioned above, so that  </p><p class="formulaDsp">
+<picture><source srcset="form_3887_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   (\nabla\varphi_i, \nabla u_h)
    = (\varphi_i, f),
    \qquad\qquad
    i=0\ldots N-1.
-\end{align*}" src="form_3879.png"/></picture>
+\end{align*}" src="form_3887.png"/></picture>
 </p>
-<p> Note that we here follow the convention that everything is counted starting at zero, as common in C and C++. This equation can be rewritten as a linear system if you insert the representation <picture><source srcset="form_3880_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)=\sum_j U_j
-\varphi_j(\mathbf x)$" src="form_3880.png"/></picture> and then observe that  </p><p class="formulaDsp">
-<picture><source srcset="form_3881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> Note that we here follow the convention that everything is counted starting at zero, as common in C and C++. This equation can be rewritten as a linear system if you insert the representation <picture><source srcset="form_3888_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)=\sum_j U_j
+\varphi_j(\mathbf x)$" src="form_3888.png"/></picture> and then observe that  </p><p class="formulaDsp">
+<picture><source srcset="form_3889_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   (\nabla\varphi_i, \nabla u_h)
   &amp;= \left(\nabla\varphi_i, \nabla \Bigl[\sum_j U_j \varphi_j\Bigr]\right)
 \\
   &amp;= \sum_j \left(\nabla\varphi_i, \nabla \left[U_j \varphi_j\right]\right)
 \\
   &amp;= \sum_j \left(\nabla\varphi_i, \nabla \varphi_j \right) U_j.
-\end{align*}" src="form_3881.png"/></picture>
+\end{align*}" src="form_3889.png"/></picture>
 </p>
 <p> With this, the problem reads: Find a vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> so that  </p><p class="formulaDsp">
-<picture><source srcset="form_3882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_3890_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   A U = F,
-\end{align*}" src="form_3882.png"/></picture>
+\end{align*}" src="form_3890.png"/></picture>
 </p>
-<p> where the matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> and the right hand side <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> are defined as  </p><p class="formulaDsp">
-<picture><source srcset="form_3883_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> where the matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> and the right hand side <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> are defined as  </p><p class="formulaDsp">
+<picture><source srcset="form_3891_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   A_{ij} &amp;= (\nabla\varphi_i, \nabla \varphi_j),
   \\
   F_i &amp;= (\varphi_i, f).
-\end{align*}" src="form_3883.png"/></picture>
+\end{align*}" src="form_3891.png"/></picture>
 </p>
 <p><a class="anchor" id="Shouldwemultiplybyatestfunctionfromtheleftorfromtheright"></a></p><h3>Should we multiply by a test function from the left or from the right? </h3>
 <p>Before we move on with describing how these quantities can be computed, note that if we had multiplied the original equation from the <em>right</em> by a test function rather than from the left, then we would have obtained a linear system of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_3884_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_3892_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   U^T A = F^T
-\end{align*}" src="form_3884.png"/></picture>
+\end{align*}" src="form_3892.png"/></picture>
 </p>
-<p> with a row vector <picture><source srcset="form_3885_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^T$" src="form_3885.png"/></picture>. By transposing this system, this is of course equivalent to solving  </p><p class="formulaDsp">
-<picture><source srcset="form_3886_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> with a row vector <picture><source srcset="form_3893_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F^T$" src="form_3893.png"/></picture>. By transposing this system, this is of course equivalent to solving  </p><p class="formulaDsp">
+<picture><source srcset="form_3894_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   A^T U = F
-\end{align*}" src="form_3886.png"/></picture>
+\end{align*}" src="form_3894.png"/></picture>
 </p>
-<p> which here is the same as above since <picture><source srcset="form_3887_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A=A^T$" src="form_3887.png"/></picture>. But in general is not, and in order to avoid any sort of confusion, experience has shown that simply getting into the habit of multiplying the equation from the left rather than from the right (as is often done in the mathematical literature) avoids a common class of errors as the matrix is automatically correct and does not need to be transposed when comparing theory and implementation. See <a class="el" href="step_9.html">step-9</a> for the first example in this tutorial where we have a non-symmetric bilinear form for which it makes a difference whether we multiply from the right or from the left.</p>
+<p> which here is the same as above since <picture><source srcset="form_3895_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A=A^T$" src="form_3895.png"/></picture>. But in general is not, and in order to avoid any sort of confusion, experience has shown that simply getting into the habit of multiplying the equation from the left rather than from the right (as is often done in the mathematical literature) avoids a common class of errors as the matrix is automatically correct and does not need to be transposed when comparing theory and implementation. See <a class="el" href="step_9.html">step-9</a> for the first example in this tutorial where we have a non-symmetric bilinear form for which it makes a difference whether we multiply from the right or from the left.</p>
 <p><a class="anchor" id="Assemblingthematrixandrighthandsidevector"></a></p><h3><em>Assembling</em> the matrix and right hand side vector </h3>
-<p>Now we know what we need (namely: objects that hold the matrix and vectors, as well as ways to compute <picture><source srcset="form_3888_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij},F_i$" src="form_3888.png"/></picture>), and we can look at what it takes to make that happen:</p>
+<p>Now we know what we need (namely: objects that hold the matrix and vectors, as well as ways to compute <picture><source srcset="form_3896_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{ij},F_i$" src="form_3896.png"/></picture>), and we can look at what it takes to make that happen:</p>
 <ul>
-<li>The object for <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is of type <a class="el" href="classSparseMatrix.html">SparseMatrix</a> while those for <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> and <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> are of type <a class="el" href="classVector.html">Vector</a>. We will see in the program below what classes are used to solve linear systems.</li>
-<li>We need a way to form the integrals. In the finite element method, this is most commonly done using quadrature, i.e. the integrals are replaced by a weighted sum over a set of <em>quadrature points</em> on each cell. That is, we first split the integral over <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> into integrals over all cells,  <p class="formulaDsp">
-<picture><source srcset="form_3889_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<li>The object for <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is of type <a class="el" href="classSparseMatrix.html">SparseMatrix</a> while those for <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> and <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> are of type <a class="el" href="classVector.html">Vector</a>. We will see in the program below what classes are used to solve linear systems.</li>
+<li>We need a way to form the integrals. In the finite element method, this is most commonly done using quadrature, i.e. the integrals are replaced by a weighted sum over a set of <em>quadrature points</em> on each cell. That is, we first split the integral over <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> into integrals over all cells,  <p class="formulaDsp">
+<picture><source srcset="form_3897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     A_{ij} &amp;= (\nabla\varphi_i, \nabla \varphi_j)
     = \sum_{K \in {\mathbb T}} \int_K \nabla\varphi_i \cdot \nabla \varphi_j,
     \\
     F_i &amp;= (\varphi_i, f)
     = \sum_{K \in {\mathbb T}} \int_K \varphi_i f,
-  \end{align*}" src="form_3889.png"/></picture>
+  \end{align*}" src="form_3897.png"/></picture>
 </p>
  and then approximate each cell's contribution by quadrature:  <p class="formulaDsp">
-<picture><source srcset="form_3890_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_3898_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     A^K_{ij} &amp;=
     \int_K \nabla\varphi_i \cdot \nabla \varphi_j
     \approx
@@ -240,11 +240,11 @@
     \int_K \varphi_i f
     \approx
     \sum_q \varphi_i(\mathbf x^K_q) f(\mathbf x^K_q) w^K_q,
-  \end{align*}" src="form_3890.png"/></picture>
+  \end{align*}" src="form_3898.png"/></picture>
 </p>
- where <picture><source srcset="form_3891_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{T} \approx \Omega$" src="form_3891.png"/></picture> is a <a class="el" href="classTriangulation.html">Triangulation</a> approximating the domain, <picture><source srcset="form_3892_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x^K_q$" src="form_3892.png"/></picture> is the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, and <picture><source srcset="form_3893_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w^K_q$" src="form_3893.png"/></picture> the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature weight. There are different parts to what is needed in doing this, and we will discuss them in turn next.</li>
-<li>First, we need a way to describe the location <picture><source srcset="form_3894_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_q^K$" src="form_3894.png"/></picture> of quadrature points and their weights <picture><source srcset="form_3893_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w^K_q$" src="form_3893.png"/></picture>. They are usually mapped from the reference cell in the same way as shape functions, i.e., implicitly using the <a class="el" href="classMappingQ1.html">MappingQ1</a> class or, if you explicitly say so, through one of the other classes derived from <a class="el" href="classMapping.html" title="Abstract base class for mapping classes.">Mapping</a>. The locations and weights on the reference cell are described by objects derived from the <a class="el" href="classQuadrature.html">Quadrature</a> base class. Typically, one chooses a quadrature formula (i.e. a set of points and weights) so that the quadrature exactly equals the integral in the matrix; this can be achieved because all factors in the integral are polynomial, and is done by Gaussian quadrature formulas, implemented in the <a class="el" href="classQGauss.html">QGauss</a> class.</li>
-<li>We then need something that can help us evaluate <picture><source srcset="form_3896_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i(\mathbf x^K_q)$" src="form_3896.png"/></picture> on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This is what the <a class="el" href="classFEValues.html">FEValues</a> class does: it takes a finite element objects to describe <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> on the reference cell, a quadrature object to describe the quadrature points and weights, and a mapping object (or implicitly takes the <a class="el" href="classMappingQ1.html">MappingQ1</a> class) and provides values and derivatives of the shape functions on the real cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> as well as all sorts of other information needed for integration, at the quadrature points located on <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>.</li>
+ where <picture><source srcset="form_3899_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{T} \approx \Omega$" src="form_3899.png"/></picture> is a <a class="el" href="classTriangulation.html">Triangulation</a> approximating the domain, <picture><source srcset="form_3900_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x^K_q$" src="form_3900.png"/></picture> is the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, and <picture><source srcset="form_3901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w^K_q$" src="form_3901.png"/></picture> the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature weight. There are different parts to what is needed in doing this, and we will discuss them in turn next.</li>
+<li>First, we need a way to describe the location <picture><source srcset="form_3902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_q^K$" src="form_3902.png"/></picture> of quadrature points and their weights <picture><source srcset="form_3901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w^K_q$" src="form_3901.png"/></picture>. They are usually mapped from the reference cell in the same way as shape functions, i.e., implicitly using the <a class="el" href="classMappingQ1.html">MappingQ1</a> class or, if you explicitly say so, through one of the other classes derived from <a class="el" href="classMapping.html" title="Abstract base class for mapping classes.">Mapping</a>. The locations and weights on the reference cell are described by objects derived from the <a class="el" href="classQuadrature.html">Quadrature</a> base class. Typically, one chooses a quadrature formula (i.e. a set of points and weights) so that the quadrature exactly equals the integral in the matrix; this can be achieved because all factors in the integral are polynomial, and is done by Gaussian quadrature formulas, implemented in the <a class="el" href="classQGauss.html">QGauss</a> class.</li>
+<li>We then need something that can help us evaluate <picture><source srcset="form_3903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i(\mathbf x^K_q)$" src="form_3903.png"/></picture> on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This is what the <a class="el" href="classFEValues.html">FEValues</a> class does: it takes a finite element objects to describe <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> on the reference cell, a quadrature object to describe the quadrature points and weights, and a mapping object (or implicitly takes the <a class="el" href="classMappingQ1.html">MappingQ1</a> class) and provides values and derivatives of the shape functions on the real cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> as well as all sorts of other information needed for integration, at the quadrature points located on <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>.</li>
 </ul>
 <p>The process of computing the matrix and right hand side as a sum over all cells (and then a sum over quadrature points) is usually called <em>assembling the linear system</em>, or <em>assembly</em> for short, using the meaning of the word related to <a href="https://en.wikipedia.org/wiki/Assembly_line">assembly line</a>, meaning <a href="https://en.wiktionary.org/wiki/assembly">"the act of putting together a set of pieces, fragments, or elements"</a>.</p>
 <p><a class="el" href="classFEValues.html">FEValues</a> really is the central class in the assembly process. One way you can view it is as follows: The <a class="el" href="classFiniteElement.html">FiniteElement</a> and derived classes describe shape <em>functions</em>, i.e., infinite dimensional objects: functions have values at every point. We need this for theoretical reasons because we want to perform our analysis with integrals over functions. However, for a computer, this is a very difficult concept, since they can in general only deal with a finite amount of information, and so we replace integrals by sums over quadrature points that we obtain by mapping (the <a class="el" href="classMapping.html" title="Abstract base class for mapping classes.">Mapping</a> object) using points defined on a reference cell (the <a class="el" href="classQuadrature.html">Quadrature</a> object) onto points on the real cell. In essence, we reduce the problem to one where we only need a finite amount of information, namely shape function values and derivatives, quadrature weights, normal vectors, etc, exclusively at a finite set of points. The <a class="el" href="classFEValues.html">FEValues</a> class is the one that brings the three components together and provides this finite set of information on a particular cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. You will see it in action when we assemble the linear system below.</p>
@@ -252,17 +252,17 @@
 <p>The final piece of this introduction is to mention that after a linear system is obtained, it is solved using an iterative solver and then postprocessed: we create an output file using the <a class="el" href="classDataOut.html">DataOut</a> class that can then be visualized using one of the common visualization programs.</p>
 <dl class="section note"><dt>Note</dt><dd>The preceding overview of all the important steps of any finite element implementation has its counterpart in deal.II: The library can naturally be grouped into a number of "modules" that cover the basic concepts just outlined. You can access these modules through the tab at the top of this page. An overview of the most fundamental groups of concepts is also available on the <a href="index.html">front page of the deal.II manual</a>.</dd></dl>
 <p><a class="anchor" id="Solvingthelinearsystem"></a></p><h3>Solving the linear system </h3>
-<p>For a finite element program, the linear system we end up with here is relatively small: The matrix has size <picture><source srcset="form_3897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1089 \times 1089$" src="form_3897.png"/></picture>, owing to the fact that the mesh we use is <picture><source srcset="form_3316_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$32\times 32$" src="form_3316.png"/></picture> and so there are <picture><source srcset="form_3898_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$33^2=1089$" src="form_3898.png"/></picture> vertices in the mesh. In many of the later tutorial programs, matrix sizes in the range of tens of thousands to hundreds of thousands will not be uncommon, and with codes such as <a href="https://aspect.geodynamics.org">ASPECT</a> that build on deal.II, we regularly solve problems with more than a hundred million equations (albeit using parallel computers). In any case, even for the small system here, the matrix is much larger than what one typically encounters in an undergraduate or most graduate courses, and so the question arises how we can solve such linear systems.</p>
-<p>The first method one typically learns for solving linear systems is <a href="https://en.wikipedia.org/wiki/Gaussian_elimination">Gaussian elimination</a>. The problem with this method is that it requires a number of operations that is proportional to <picture><source srcset="form_3899_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N^3$" src="form_3899.png"/></picture>, where <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> is the number of equations or unknowns in the linear system &ndash; more specifically, the number of operations is <picture><source srcset="form_3900_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 23 N^3$" src="form_3900.png"/></picture>, give or take a few. With <picture><source srcset="form_3901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N=1089$" src="form_3901.png"/></picture>, this means that we would have to do around <picture><source srcset="form_3902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$861$" src="form_3902.png"/></picture> million operations. This is a number that is quite feasible and it would take modern processors less than 0.1 seconds to do this. But it is clear that this isn't going to scale: If we have twenty times as many equations in the linear system (that is, twenty times as many unknowns), then it would already take 1000-10,000 seconds or on the order of an hour. Make the linear system another ten times larger, and it is clear that we can not solve it any more on a single computer.</p>
+<p>For a finite element program, the linear system we end up with here is relatively small: The matrix has size <picture><source srcset="form_3904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1089 \times 1089$" src="form_3904.png"/></picture>, owing to the fact that the mesh we use is <picture><source srcset="form_3151_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$32\times 32$" src="form_3151.png"/></picture> and so there are <picture><source srcset="form_3905_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$33^2=1089$" src="form_3905.png"/></picture> vertices in the mesh. In many of the later tutorial programs, matrix sizes in the range of tens of thousands to hundreds of thousands will not be uncommon, and with codes such as <a href="https://aspect.geodynamics.org">ASPECT</a> that build on deal.II, we regularly solve problems with more than a hundred million equations (albeit using parallel computers). In any case, even for the small system here, the matrix is much larger than what one typically encounters in an undergraduate or most graduate courses, and so the question arises how we can solve such linear systems.</p>
+<p>The first method one typically learns for solving linear systems is <a href="https://en.wikipedia.org/wiki/Gaussian_elimination">Gaussian elimination</a>. The problem with this method is that it requires a number of operations that is proportional to <picture><source srcset="form_3906_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N^3$" src="form_3906.png"/></picture>, where <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> is the number of equations or unknowns in the linear system &ndash; more specifically, the number of operations is <picture><source srcset="form_3907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 23 N^3$" src="form_3907.png"/></picture>, give or take a few. With <picture><source srcset="form_3908_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N=1089$" src="form_3908.png"/></picture>, this means that we would have to do around <picture><source srcset="form_3909_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$861$" src="form_3909.png"/></picture> million operations. This is a number that is quite feasible and it would take modern processors less than 0.1 seconds to do this. But it is clear that this isn't going to scale: If we have twenty times as many equations in the linear system (that is, twenty times as many unknowns), then it would already take 1000-10,000 seconds or on the order of an hour. Make the linear system another ten times larger, and it is clear that we can not solve it any more on a single computer.</p>
 <p>One can rescue the situation somewhat by realizing that only a relatively small number of entries in the matrix are nonzero &ndash; that is, the matrix is <a href="https://en.wikipedia.org/wiki/Sparse_matrix">sparse</a>. Variations of Gaussian elimination can exploit this, making the process substantially faster; we will use one such method &ndash; implemented in the <a class="el" href="classSparseDirectUMFPACK.html">SparseDirectUMFPACK</a> class &ndash; in <a class="el" href="step_29.html">step-29</a> for the first time, among several others than come after that. These variations of Gaussian elimination might get us to problem sizes on the order of 100,000 or 200,000, but not all that much beyond that.</p>
-<p>Instead, what we will do here is take up an idea from 1952: the <a href="https://en.wikipedia.org/wiki/Conjugate_gradient_method">Conjugate Gradient method</a>, or in short "CG". CG is an "iterative" solver in that it forms a sequence of vectors that <em>converge</em> to the exact solution; in fact, after <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> such iterations in the absence of roundoff errors it finds the exact solution if the matrix is symmetric and positive definite. The method was originally developed as another way to solve a linear system exactly, like Gaussian elimination, but as such it had few advantages and was largely forgotten for a few decades. But, when computers became powerful enough to solve problems of a size where Gaussian elimination doesn't work well any more (sometime in the 1980s), CG was rediscovered as people realized that it is well suited for large and sparse systems like the ones we get from the finite element method. This is because (i) the vectors it computes <em>converge</em> to the exact solution, and consequently we do not actually have to do all <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> iterations to find the exact solution as long as we're happy with reasonably good approximations; and (ii) it only ever requires matrix-vector products, which is very useful for sparse matrices because a sparse matrix has, by definition, only <picture><source srcset="form_183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_183.png"/></picture> entries and so a matrix-vector product can be done with <picture><source srcset="form_183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_183.png"/></picture> effort whereas it costs <picture><source srcset="form_3903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N^2$" src="form_3903.png"/></picture> operations to do the same for dense matrices. As a consequence, we can hope to solve linear systems with at most <picture><source srcset="form_562_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N^2)$" src="form_562.png"/></picture> operations, and in many cases substantially fewer.</p>
+<p>Instead, what we will do here is take up an idea from 1952: the <a href="https://en.wikipedia.org/wiki/Conjugate_gradient_method">Conjugate Gradient method</a>, or in short "CG". CG is an "iterative" solver in that it forms a sequence of vectors that <em>converge</em> to the exact solution; in fact, after <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> such iterations in the absence of roundoff errors it finds the exact solution if the matrix is symmetric and positive definite. The method was originally developed as another way to solve a linear system exactly, like Gaussian elimination, but as such it had few advantages and was largely forgotten for a few decades. But, when computers became powerful enough to solve problems of a size where Gaussian elimination doesn't work well any more (sometime in the 1980s), CG was rediscovered as people realized that it is well suited for large and sparse systems like the ones we get from the finite element method. This is because (i) the vectors it computes <em>converge</em> to the exact solution, and consequently we do not actually have to do all <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> iterations to find the exact solution as long as we're happy with reasonably good approximations; and (ii) it only ever requires matrix-vector products, which is very useful for sparse matrices because a sparse matrix has, by definition, only <picture><source srcset="form_157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_157.png"/></picture> entries and so a matrix-vector product can be done with <picture><source srcset="form_157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_157.png"/></picture> effort whereas it costs <picture><source srcset="form_3910_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N^2$" src="form_3910.png"/></picture> operations to do the same for dense matrices. As a consequence, we can hope to solve linear systems with at most <picture><source srcset="form_560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N^2)$" src="form_560.png"/></picture> operations, and in many cases substantially fewer.</p>
 <p>Finite element codes therefore almost always use iterative solvers such as CG for the solution of the linear systems, and we will do so in this code as well. (We note that the CG method is only usable for matrices that are symmetric and positive definite; for other equations, the matrix may not have these properties and we will have to use other variations of iterative solvers such as <a href="https://en.wikipedia.org/wiki/Biconjugate_gradient_stabilized_method">BiCGStab</a> or <a href="https://en.wikipedia.org/wiki/Generalized_minimal_residual_method">GMRES</a> that are applicable to more general matrices.)</p>
-<p>An important component of these iterative solvers is that we specify the <em>tolerance</em> with which we want to solve the linear system &ndash; in essence, a statement about the error we are willing to accept in our approximate solution. The error in an approximate solution <picture><source srcset="form_3904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde x$" src="form_3904.png"/></picture> obtained to the exact solution <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> of a linear system <picture><source srcset="form_57_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=b$" src="form_57.png"/></picture> is defined as <picture><source srcset="form_3905_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|x-\tilde x\|$" src="form_3905.png"/></picture>, but this is a quantity we cannot compute because we don't know the exact solution <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>. Instead, we typically consider the <em>residual</em>, defined as <picture><source srcset="form_3906_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|b-A\tilde x\|=\|A(x-\tilde x)\|$" src="form_3906.png"/></picture>, as a computable measure. We then let the iterative solver compute more and more accurate solutions <picture><source srcset="form_3904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde x$" src="form_3904.png"/></picture>, until <picture><source srcset="form_3907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|b-A\tilde x\|\le \tau$" src="form_3907.png"/></picture>. A practical question is what value <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture> should have. In most applications, setting  </p><p class="formulaDsp">
-<picture><source srcset="form_3909_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>An important component of these iterative solvers is that we specify the <em>tolerance</em> with which we want to solve the linear system &ndash; in essence, a statement about the error we are willing to accept in our approximate solution. The error in an approximate solution <picture><source srcset="form_3911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde x$" src="form_3911.png"/></picture> obtained to the exact solution <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> of a linear system <picture><source srcset="form_57_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=b$" src="form_57.png"/></picture> is defined as <picture><source srcset="form_3912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|x-\tilde x\|$" src="form_3912.png"/></picture>, but this is a quantity we cannot compute because we don't know the exact solution <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>. Instead, we typically consider the <em>residual</em>, defined as <picture><source srcset="form_3913_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|b-A\tilde x\|=\|A(x-\tilde x)\|$" src="form_3913.png"/></picture>, as a computable measure. We then let the iterative solver compute more and more accurate solutions <picture><source srcset="form_3911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde x$" src="form_3911.png"/></picture>, until <picture><source srcset="form_3914_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|b-A\tilde x\|\le \tau$" src="form_3914.png"/></picture>. A practical question is what value <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture> should have. In most applications, setting  </p><p class="formulaDsp">
+<picture><source srcset="form_3915_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \tau = 10^{-6} \|b\|
-\end{align*}" src="form_3909.png"/></picture>
+\end{align*}" src="form_3915.png"/></picture>
 </p>
-<p> is a reasonable choice. The fact that we make <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture> proportional to the size (norm) of <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> makes sure that our expectations of the accuracy in the solution are relative to the size of the solution. This makes sense: If we make the right hand side <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> ten times larger, then the solution <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> of <picture><source srcset="form_57_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=b$" src="form_57.png"/></picture> will also be ten times larger, and so will <picture><source srcset="form_3904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde x$" src="form_3904.png"/></picture>; we want the same number of accurate digits in <picture><source srcset="form_3904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde x$" src="form_3904.png"/></picture> as before, which means that we should also terminate when the residual <picture><source srcset="form_3910_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|b-A\tilde x\|$" src="form_3910.png"/></picture> is ten times the original size &ndash; which is exactly what we get if we make <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture> proportional to <picture><source srcset="form_3911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|b\|$" src="form_3911.png"/></picture>.</p>
+<p> is a reasonable choice. The fact that we make <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture> proportional to the size (norm) of <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> makes sure that our expectations of the accuracy in the solution are relative to the size of the solution. This makes sense: If we make the right hand side <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> ten times larger, then the solution <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> of <picture><source srcset="form_57_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Ax=b$" src="form_57.png"/></picture> will also be ten times larger, and so will <picture><source srcset="form_3911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde x$" src="form_3911.png"/></picture>; we want the same number of accurate digits in <picture><source srcset="form_3911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde x$" src="form_3911.png"/></picture> as before, which means that we should also terminate when the residual <picture><source srcset="form_3916_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|b-A\tilde x\|$" src="form_3916.png"/></picture> is ten times the original size &ndash; which is exactly what we get if we make <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture> proportional to <picture><source srcset="form_3917_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|b\|$" src="form_3917.png"/></picture>.</p>
 <p>All of this will be implemented in the <code>Step3::solve()</code> function in this program. As you will see, it is quite simple to set up linear solvers with deal.II: The whole function will have only three lines.</p>
 <p><a class="anchor" id="Abouttheimplementation"></a></p><h3>About the implementation</h3>
 <p>Although this is the simplest possible equation you can solve using the finite element method, this program shows the basic structure of most finite element programs and also serves as the template that almost all of the following programs will essentially follow. Specifically, the main class of this program looks like this: </p><div class="fragment"><div class="line"><span class="keyword">class </span>Step3</div>
@@ -304,7 +304,7 @@
 <li>
 <code>assemble_system()</code>: This, then is where the contents of the matrix and right hand side are computed, as discussed at length in the introduction above. Since doing something with this linear system is conceptually very different from computing its entries, we separate it from the following function. </li>
 <li>
-<code>solve()</code>: This then is the function in which we compute the solution <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> of the linear system <picture><source srcset="form_3914_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$AU=F$" src="form_3914.png"/></picture>. In the current program, this is a simple task since the matrix is so simple, but it will become a significant part of a program's size whenever the problem is not so trivial any more (see, for example, <a class="el" href="step_20.html">step-20</a>, <a class="el" href="step_22.html">step-22</a>, or <a class="el" href="step_31.html">step-31</a> once you've learned a bit more about the library). </li>
+<code>solve()</code>: This then is the function in which we compute the solution <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> of the linear system <picture><source srcset="form_3918_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$AU=F$" src="form_3918.png"/></picture>. In the current program, this is a simple task since the matrix is so simple, but it will become a significant part of a program's size whenever the problem is not so trivial any more (see, for example, <a class="el" href="step_20.html">step-20</a>, <a class="el" href="step_22.html">step-22</a>, or <a class="el" href="step_31.html">step-31</a> once you've learned a bit more about the library). </li>
 <li>
 <code>output_results()</code>: Finally, when you have computed a solution, you probably want to do something with it. For example, you may want to output it in a format that can be visualized, or you may want to compute quantities you are interested in: say, heat fluxes in a heat exchanger, air friction coefficients of a wing, maximum bridge loads, or simply the value of the numerical solution at a point. This function is therefore the place for postprocessing your solution. </li>
 </ul>
@@ -314,7 +314,7 @@
 <p>deal.II defines a number of integral types via alias in namespace <a class="el" href="namespacetypes.html">types</a>. (In the previous sentence, the word "integral" is used as the <em>adjective</em> that corresponds to the noun "integer". It shouldn't be confused with the <em>noun</em> "integral" that represents the area or volume under a curve or surface. The adjective "integral" is widely used in the C++ world in contexts such as "integral type", "integral constant", etc.) In particular, in this program you will see <a class="el" href="namespacetypes.html#href_anchor">types::global_dof_index</a> in a couple of places: an integer type that is used to denote the <em>global</em> index of a degree of freedom, i.e., the index of a particular degree of freedom within the <a class="el" href="classDoFHandler.html">DoFHandler</a> object that is defined on top of a triangulation (as opposed to the index of a particular degree of freedom within a particular cell). For the current program (as well as almost all of the tutorial programs), you will have a few thousand to maybe a few million unknowns globally (and, for <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements, you will have 4 <em>locally on each cell</em> in 2d and 8 in 3d). Consequently, a data type that allows to store sufficiently large numbers for global DoF indices is <code>unsigned int</code> given that it allows to store numbers between 0 and slightly more than 4 billion (on most systems, where integers are 32-bit). In fact, this is what <a class="el" href="namespacetypes.html#href_anchor">types::global_dof_index</a> is.</p>
 <p>So, why not just use <code>unsigned int</code> right away? deal.II used to do this until version 7.3. However, deal.II supports very large computations (via the framework discussed in <a class="el" href="step_40.html">step-40</a>) that may have more than 4 billion unknowns when spread across a few thousand processors. Consequently, there are situations where <code>unsigned int</code> is not sufficiently large and we need a 64-bit unsigned integral type. To make this possible, we introduced <a class="el" href="namespacetypes.html#href_anchor">types::global_dof_index</a> which by default is defined as simply <code>unsigned int</code> whereas it is possible to define it as <code>unsigned long long int</code> if necessary, by passing a particular flag during configuration (see the ReadMe file).</p>
 <p>This covers the technical aspect. But there is also a documentation purpose: everywhere in the library and codes that are built on it, if you see a place using the data type <a class="el" href="namespacetypes.html#href_anchor">types::global_dof_index</a>, you immediately know that the quantity that is being referenced is, in fact, a global dof index. No such meaning would be apparent if we had just used <code>unsigned int</code> (which may also be a local index, a boundary indicator, a material id, etc.). Immediately knowing what a variable refers to also helps avoid errors: it's quite clear that there must be a bug if you see an object of type <a class="el" href="namespacetypes.html#href_anchor">types::global_dof_index</a> being assigned to variable of type <a class="el" href="namespacetypes.html#href_anchor">types::subdomain_id</a>, even though they are both represented by unsigned integers and the compiler will, consequently, not complain.</p>
-<p>In more practical terms what the presence of this type means is that during assembly, we create a <picture><source srcset="form_3915_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$4\times 4$" src="form_3915.png"/></picture> matrix (in 2d, using a <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> element) of the contributions of the cell we are currently sitting on, and then we need to add the elements of this matrix to the appropriate elements of the global (system) matrix. For this, we need to get at the global indices of the degrees of freedom that are local to the current cell, for which we will always use the following piece of the code: </p><div class="fragment"><div class="line">cell-&gt;get_dof_indices (local_dof_indices);</div>
+<p>In more practical terms what the presence of this type means is that during assembly, we create a <picture><source srcset="form_3919_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$4\times 4$" src="form_3919.png"/></picture> matrix (in 2d, using a <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> element) of the contributions of the cell we are currently sitting on, and then we need to add the elements of this matrix to the appropriate elements of the global (system) matrix. For this, we need to get at the global indices of the degrees of freedom that are local to the current cell, for which we will always use the following piece of the code: </p><div class="fragment"><div class="line">cell-&gt;get_dof_indices (local_dof_indices);</div>
 </div><!-- fragment --><p> where <code>local_dof_indices</code> is declared as </p><div class="fragment"><div class="line">std::vector&lt;types::global_dof_index&gt; local_dof_indices (fe.n_dofs_per_cell());</div>
 </div><!-- fragment --><p> The name of this variable might be a bit of a misnomer &ndash; it stands for "the
 global indices of those degrees of freedom locally defined on the current
/usr/share/doc/packages/dealii/doxygen/deal.II/step_30.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_30.html	2024-03-17 21:57:45.155244872 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_30.html	2024-03-17 21:57:45.155244872 +0000
@@ -218,9 +218,9 @@
 <p><a class="anchor" id="Motivation"></a></p><h4>Motivation</h4>
 <p>Adaptive local refinement is used to obtain fine meshes which are well adapted to solving the problem at hand efficiently. In short, the size of cells which produce a large error is reduced to obtain a better approximation of the solution to the problem at hand. However, a lot of problems contain anisotropic features. Prominent examples are shocks or boundary layers in compressible viscous flows. An efficient mesh approximates these features with cells of higher aspect ratio which are oriented according to the mentioned features. Using only isotropic refinement, the aspect ratios of the original mesh cells are preserved, as they are inherited by the children of a cell. Thus, starting from an isotropic mesh, a boundary layer will be refined in order to catch the rapid variation of the flow field in the wall normal direction, thus leading to cells with very small edge lengths both in normal and tangential direction. Usually, much higher edge lengths in tangential direction and thus significantly less cells could be used without a significant loss in approximation accuracy. An anisotropic refinement process can modify the aspect ratio from mother to child cells by a factor of two for each refinement step. In the course of several refinements, the aspect ratio of the fine cells can be optimized, saving a considerable number of cells and correspondingly degrees of freedom and thus computational resources, memory as well as CPU time.</p>
 <p><a class="anchor" id="Implementation"></a></p><h3>Implementation</h3>
-<p>Most of the time, when we do finite element computations, we only consider one cell at a time, for example to calculate cell contributions to the global matrix, or to interpolate boundary values. However, sometimes we have to look at how cells are related in our algorithms. Relationships between cells come in two forms: neighborship and mother-child relationship. For the case of isotropic refinement, deal.II uses certain conventions (invariants) for cell relationships that are always maintained. For example, a refined cell always has exactly <picture><source srcset="form_2078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^{dim}$" src="form_2078.png"/></picture> children. And (except for the 1d case), two neighboring cells may differ by at most one refinement level: they are equally often refined or one of them is exactly once more refined, leaving exactly one hanging node on the common face. Almost all of the time these invariants are only of concern in the internal implementation of the library. However, there are cases where knowledge of them is also relevant to an application program.</p>
-<p>In the current context, it is worth noting that the kind of mesh refinement affects some of the most fundamental assumptions. Consequently, some of the usual code found in application programs will need modifications to exploit the features of meshes which were created using anisotropic refinement. For those interested in how deal.II evolved, it may be of interest that the loosening of such invariants required some incompatible changes. For example, the library used to have a member GeometryInfo&lt;dim&gt;::children_per_cell that specified how many children a cell has once it is refined. For isotropic refinement, this number is equal to <picture><source srcset="form_2078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^{dim}$" src="form_2078.png"/></picture>, as mentioned above. However, for anisotropic refinement, this number does not exist, as is can be either two or four in 2D and two, four or eight in 3D, and the member GeometryInfo&lt;dim&gt;::children_per_cell has consequently been removed. It has now been replaced by <a class="el" href="structGeometryInfo.html#href_anchor">GeometryInfo&lt;dim&gt;::max_children_per_cell</a> which specifies the <em>maximum</em> number of children a cell can have. How many children a refined cell has was previously available as static information, but now it depends on the actual refinement state of a cell and can be retrieved using <a class="el" href="classTriaAccessor.html#href_anchor">TriaAccessor::n_children()</a>, a call that works equally well for both isotropic and anisotropic refinement. A very similar situation can be found for faces and their subfaces: the pertinent information can be queried using <a class="el" href="structGeometryInfo.html#href_anchor">GeometryInfo&lt;dim&gt;::max_children_per_face</a> or <code>face-&gt;n_children()</code>, depending on the context.</p>
-<p>Another important aspect, and the most important one in this tutorial, is the treatment of neighbor-relations when assembling jump terms on the faces between cells. Looking at the documentation of the assemble_system functions in <a class="el" href="step_12.html">step-12</a> we notice, that we need to decide if a neighboring cell is coarser, finer or on the same (refinement) level as our current cell. These decisions do not work in the same way for anisotropic refinement as the information given by the <em>level</em> of a cell is not enough to completely characterize anisotropic cells; for example, are the terminal children of a two-dimensional cell that is first cut in <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>-direction and whose children are then cut in <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>-direction on level 2, or are they on level 1 as they would be if the cell would have been refined once isotropically, resulting in the same set of finest cells?</p>
+<p>Most of the time, when we do finite element computations, we only consider one cell at a time, for example to calculate cell contributions to the global matrix, or to interpolate boundary values. However, sometimes we have to look at how cells are related in our algorithms. Relationships between cells come in two forms: neighborship and mother-child relationship. For the case of isotropic refinement, deal.II uses certain conventions (invariants) for cell relationships that are always maintained. For example, a refined cell always has exactly <picture><source srcset="form_2075_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^{dim}$" src="form_2075.png"/></picture> children. And (except for the 1d case), two neighboring cells may differ by at most one refinement level: they are equally often refined or one of them is exactly once more refined, leaving exactly one hanging node on the common face. Almost all of the time these invariants are only of concern in the internal implementation of the library. However, there are cases where knowledge of them is also relevant to an application program.</p>
+<p>In the current context, it is worth noting that the kind of mesh refinement affects some of the most fundamental assumptions. Consequently, some of the usual code found in application programs will need modifications to exploit the features of meshes which were created using anisotropic refinement. For those interested in how deal.II evolved, it may be of interest that the loosening of such invariants required some incompatible changes. For example, the library used to have a member GeometryInfo&lt;dim&gt;::children_per_cell that specified how many children a cell has once it is refined. For isotropic refinement, this number is equal to <picture><source srcset="form_2075_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^{dim}$" src="form_2075.png"/></picture>, as mentioned above. However, for anisotropic refinement, this number does not exist, as is can be either two or four in 2D and two, four or eight in 3D, and the member GeometryInfo&lt;dim&gt;::children_per_cell has consequently been removed. It has now been replaced by <a class="el" href="structGeometryInfo.html#href_anchor">GeometryInfo&lt;dim&gt;::max_children_per_cell</a> which specifies the <em>maximum</em> number of children a cell can have. How many children a refined cell has was previously available as static information, but now it depends on the actual refinement state of a cell and can be retrieved using <a class="el" href="classTriaAccessor.html#href_anchor">TriaAccessor::n_children()</a>, a call that works equally well for both isotropic and anisotropic refinement. A very similar situation can be found for faces and their subfaces: the pertinent information can be queried using <a class="el" href="structGeometryInfo.html#href_anchor">GeometryInfo&lt;dim&gt;::max_children_per_face</a> or <code>face-&gt;n_children()</code>, depending on the context.</p>
+<p>Another important aspect, and the most important one in this tutorial, is the treatment of neighbor-relations when assembling jump terms on the faces between cells. Looking at the documentation of the assemble_system functions in <a class="el" href="step_12.html">step-12</a> we notice, that we need to decide if a neighboring cell is coarser, finer or on the same (refinement) level as our current cell. These decisions do not work in the same way for anisotropic refinement as the information given by the <em>level</em> of a cell is not enough to completely characterize anisotropic cells; for example, are the terminal children of a two-dimensional cell that is first cut in <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>-direction and whose children are then cut in <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>-direction on level 2, or are they on level 1 as they would be if the cell would have been refined once isotropically, resulting in the same set of finest cells?</p>
 <p>After anisotropic refinement, a coarser neighbor is not necessarily exactly one level below ours, but can pretty much have any level relative to the current one; in fact, it can even be on a higher level even though it is coarser. Thus the decisions have to be made on a different basis, whereas the intention of the decisions stays the same.</p>
 <p>In the following, we will discuss the cases that can happen when we want to compute contributions to the matrix (or right hand side) of the form  </p><p class="formulaDsp">
 <picture><source srcset="form_3933_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
@@ -231,7 +231,7 @@
 <ul>
 <li>
 <p class="startli"><em>Finer neighbor</em>: If we are on an active cell and want to integrate over a face <picture><source srcset="form_3934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\subset \partial K$" src="form_3934.png"/></picture>, the first possibility is that the neighbor behind this face is more refined, i.e. has children occupying only part of the common face. In this case, the face under consideration has to be a refined one, which can determine by asking <code>if (face-&gt;has_children())</code>. If this is true, we need to loop over all subfaces and get the neighbors' child behind this subface, so that we can reinit an <a class="el" href="classFEFaceValues.html">FEFaceValues</a> object with the neighbor and an <a class="el" href="classFESubfaceValues.html">FESubfaceValues</a> object with our cell and the respective subface.</p>
-<p class="interli">For isotropic refinement, this kind is reasonably simple because we know that an invariant of the isotropically refined adaptive meshes in deal.II is that neighbors can only differ by exactly one refinement level. However, this isn't quite true any more for anisotropically refined meshes, in particular in 3d; there, the active cell we are interested on the other side of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> might not actually be a child of our neighbor, but perhaps a grandchild or even a farther offspring. Fortunately, this complexity is hidden in the internals of the library. All we need to do is call the <a class="el" href="classCellAccessor.html#href_anchor">CellAccessor::neighbor_child_on_subface()</a> function. Still, in 3D there are two cases which need special consideration: </p><ul>
+<p class="interli">For isotropic refinement, this kind is reasonably simple because we know that an invariant of the isotropically refined adaptive meshes in deal.II is that neighbors can only differ by exactly one refinement level. However, this isn't quite true any more for anisotropically refined meshes, in particular in 3d; there, the active cell we are interested on the other side of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> might not actually be a child of our neighbor, but perhaps a grandchild or even a farther offspring. Fortunately, this complexity is hidden in the internals of the library. All we need to do is call the <a class="el" href="classCellAccessor.html#href_anchor">CellAccessor::neighbor_child_on_subface()</a> function. Still, in 3D there are two cases which need special consideration: </p><ul>
 <li>
 <p class="startli">If the neighbor is refined more than once anisotropically, it might be that here are not two or four but actually three subfaces to consider. Imagine the following refinement process of the (two-dimensional) face of the (three-dimensional) neighbor cell we are considering: first the face is refined along x, later on only the left subface is refined along y. </p><div class="fragment"><div class="line"> -------*        *---*---*        *---*---*</div>
 <div class="line">|       |        |   |   |        |   |   |</div>
@@ -253,7 +253,7 @@
 <div class="line"><span class="preprocessor">#           # #   +           + +</span></div>
 <div class="line"><span class="preprocessor">#           ##    +           ++</span></div>
 <div class="line"><span class="preprocessor">#############     +++++++++++++</span></div>
-</div><!-- fragment --><p class="endli">Here, the left two cells resulted from an anisotropic bisection of the mother cell in <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>-direction, whereas the right four cells resulted from a simultaneous anisotropic refinement in both the <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>- and <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>-directions. The left cell marked with # has two finer neighbors marked with +, but the actual neighbor of the left cell is the complete right mother cell, as the two cells marked with + are finer and their direct mother is the one large cell. </p>
+</div><!-- fragment --><p class="endli">Here, the left two cells resulted from an anisotropic bisection of the mother cell in <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>-direction, whereas the right four cells resulted from a simultaneous anisotropic refinement in both the <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>- and <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>-directions. The left cell marked with # has two finer neighbors marked with +, but the actual neighbor of the left cell is the complete right mother cell, as the two cells marked with + are finer and their direct mother is the one large cell. </p>
 </li>
 </ul>
 <p class="interli">However, fortunately, <a class="el" href="classCellAccessor.html#href_anchor">CellAccessor::neighbor_child_on_subface()</a> takes care of these situations by itself, if you loop over the correct number of subfaces, in the above example this is two. The <a class="el" href="classFESubfaceValues.html#href_anchor">FESubfaceValues&lt;dim&gt;::reinit</a> function takes care of this too, so that the resulting state is always correct. There is one little caveat, however: For reiniting the neighbors <a class="el" href="classFEFaceValues.html">FEFaceValues</a> object you need to know the index of the face that points toward the current cell. Usually you assume that the neighbor you get directly is as coarse or as fine as you, if it has children, thus this information can be obtained with <a class="el" href="classCellAccessor.html#href_anchor">CellAccessor::neighbor_of_neighbor()</a>. If the neighbor is coarser, however, you would have to use the first value in <a class="el" href="classCellAccessor.html#href_anchor">CellAccessor::neighbor_of_coarser_neighbor()</a> instead. In order to make this easy for you, there is <a class="el" href="classCellAccessor.html#href_anchor">CellAccessor::neighbor_face_no()</a> which does the correct thing for you and returns the desired result.</p>
@@ -294,12 +294,12 @@
 </ol>
 <p>This approach is similar to the one we have used in <a class="el" href="step_27.html">step-27</a> for hp-refinement and has the great advantage of flexibility: Any error indicator can be used in the anisotropic process, i.e. if you have quite involved a posteriori goal-oriented error indicators available you can use them as easily as a simple Kelly error estimator. The anisotropic part of the refinement process is not influenced by this choice. Furthermore, simply leaving out the third and forth steps leads to the same isotropic refinement you used to get before any anisotropic changes in deal.II or your application program. As a last advantage, working only on cells flagged for refinement results in a faster evaluation of the anisotropic indicator, which can become noticeable on finer meshes with a lot of cells if the indicator is quite involved.</p>
 <p>Here, we use a very simple approach which is only applicable to DG methods. The general idea is quite simple: DG methods allow the discrete solution to jump over the faces of a cell, whereas it is smooth within each cell. Of course, in the limit we expect that the jumps tend to zero as we refine the mesh and approximate the true solution better and better. Thus, a large jump across a given face indicates that the cell should be refined (at least) orthogonally to that face, whereas a small jump does not lead to this conclusion. It is possible, of course, that the exact solution is not smooth and that it also features a jump. In that case, however, a large jump over one face indicates, that this face is more or less parallel to the jump and in the vicinity of it, thus again we would expect a refinement orthogonal to the face under consideration to be effective.</p>
-<p>The proposed indicator calculates the average jump <picture><source srcset="form_3935_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_j$" src="form_3935.png"/></picture>, i.e. the mean value of the absolute jump <picture><source srcset="form_3936_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|[u]|$" src="form_3936.png"/></picture> of the discrete solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> over the two faces <picture><source srcset="form_3937_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i^j$" src="form_3937.png"/></picture>, <picture><source srcset="form_3938_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i=1,2$" src="form_3938.png"/></picture>, <picture><source srcset="form_3939_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=1..d$" src="form_3939.png"/></picture> orthogonal to coordinate direction <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> on the unit cell.  </p><p class="formulaDsp">
+<p>The proposed indicator calculates the average jump <picture><source srcset="form_3935_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_j$" src="form_3935.png"/></picture>, i.e. the mean value of the absolute jump <picture><source srcset="form_3936_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|[u]|$" src="form_3936.png"/></picture> of the discrete solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> over the two faces <picture><source srcset="form_3937_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_i^j$" src="form_3937.png"/></picture>, <picture><source srcset="form_3938_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i=1,2$" src="form_3938.png"/></picture>, <picture><source srcset="form_3939_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=1..d$" src="form_3939.png"/></picture> orthogonal to coordinate direction <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> on the unit cell.  </p><p class="formulaDsp">
 <picture><source srcset="form_3940_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 K_j = \frac{\sum_{i=1}^2 \int_{f_i^j}|[u]| dx}{\sum_{i=1}^2 |f_i^j|} .
 \]" src="form_3940.png"/></picture>
 </p>
-<p> If the average jump in one direction is larger than the average of the jumps in the other directions by a certain factor <picture><source srcset="form_3941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa$" src="form_3941.png"/></picture>, i.e. if <picture><source srcset="form_3942_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_i &gt; \kappa \frac 1{d-1} \sum_{j=1, j\neq i}^d K_j$" src="form_3942.png"/></picture>, the cell is refined only along that particular direction <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>, otherwise the cell is refined isotropically.</p>
+<p> If the average jump in one direction is larger than the average of the jumps in the other directions by a certain factor <picture><source srcset="form_3941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa$" src="form_3941.png"/></picture>, i.e. if <picture><source srcset="form_3942_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_i &gt; \kappa \frac 1{d-1} \sum_{j=1, j\neq i}^d K_j$" src="form_3942.png"/></picture>, the cell is refined only along that particular direction <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>, otherwise the cell is refined isotropically.</p>
 <p>Such a criterion is easily generalized to systems of equations: the absolute value of the jump would be replaced by an appropriate norm of the vector-valued jump.</p>
 <p><a class="anchor" id="Theproblem"></a></p><h3>The problem</h3>
 <p>We solve the linear transport equation presented in <a class="el" href="step_12.html">step-12</a>. The domain is extended to cover <picture><source srcset="form_3943_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]\times[0,1]$" src="form_3943.png"/></picture> in 2D, where the flow field <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> describes a counterclockwise quarter circle around the origin in the right half of the domain and is parallel to the x-axis in the left part of the domain. The inflow boundary is again located at <picture><source srcset="form_600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=1$" src="form_600.png"/></picture> and along the positive part of the x-axis, and the boundary conditions are chosen as in <a class="el" href="step_12.html">step-12</a>.</p>
@@ -382,7 +382,7 @@
 <div class="ttc" id="aclassFunction_html_abe86ee7f7f12cf4041d1e714c0fb42f3"><div class="ttname"><a href="classFunction.html#href_anchor">Function::value_list</a></div><div class="ttdeci">virtual void value_list(const std::vector&lt; Point&lt; dim &gt; &gt; &amp;points, std::vector&lt; RangeNumberType &gt; &amp;values, const unsigned int component=0) const</div></div>
 <div class="ttc" id="aclassPoint_html"><div class="ttname"><a href="classPoint.html">Point</a></div><div class="ttdef"><b>Definition</b> <a href="base_2point_8h_source.html#href_anchor">point.h:112</a></div></div>
 <div class="ttc" id="agroup__Exceptions_html_ga9442b63275c9ef3fab29bc222831c49c"><div class="ttname"><a href="group__Exceptions.html#href_anchor">AssertDimension</a></div><div class="ttdeci">#define AssertDimension(dim1, dim2)</div><div class="ttdef"><b>Definition</b> <a href="include_2deal_8II_2base_2exceptions_8h_source.html#href_anchor">exceptions.h:1787</a></div></div>
-</div><!-- fragment --><p>The flow field is chosen to be a quarter circle with counterclockwise flow direction and with the origin as midpoint for the right half of the domain with positive <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> values, whereas the flow simply goes to the left in the left part of the domain at a velocity that matches the one coming in from the right. In the circular part the magnitude of the flow velocity is proportional to the distance from the origin. This is a difference to <a class="el" href="step_12.html">step-12</a>, where the magnitude was 1 everywhere. the new definition leads to a linear variation of <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> along each given face of a cell. On the other hand, the solution <picture><source srcset="form_3944_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(x,y)$" src="form_3944.png"/></picture> is exactly the same as before.</p>
+</div><!-- fragment --><p>The flow field is chosen to be a quarter circle with counterclockwise flow direction and with the origin as midpoint for the right half of the domain with positive <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> values, whereas the flow simply goes to the left in the left part of the domain at a velocity that matches the one coming in from the right. In the circular part the magnitude of the flow velocity is proportional to the distance from the origin. This is a difference to <a class="el" href="step_12.html">step-12</a>, where the magnitude was 1 everywhere. the new definition leads to a linear variation of <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> along each given face of a cell. On the other hand, the solution <picture><source srcset="form_3944_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(x,y)$" src="form_3944.png"/></picture> is exactly the same as before.</p>
 <div class="fragment"><div class="line">      <span class="keywordtype">void</span> value_list(<span class="keyword">const</span> std::vector&lt;<a class="code hl_class" href="classPoint.html">Point&lt;dim&gt;</a>&gt; &amp;points,</div>
 <div class="line">                      std::vector&lt;<a class="code hl_class" href="classPoint.html">Point&lt;dim&gt;</a>&gt; &amp;      values) <span class="keyword">const</span></div>
 <div class="line">      {</div>
@@ -1336,7 +1336,7 @@
 <td align="center"><img src="https://www.dealii.org/images/steps/developer/step-30.sol-4.iso.9.2.png" alt="" class="inline"/>  </td><td align="center"><img src="https://www.dealii.org/images/steps/developer/step-30.sol-4.aniso.9.2.png" alt="" class="inline"/>   </td></tr>
 </table>
 <p>We see, that the solution on the anisotropically refined mesh is very similar to the solution obtained on the isotropically refined mesh. Thus the anisotropic indicator seems to effectively select the appropriate cells for anisotropic refinement.</p>
-<p>The pictures also explain why the mesh is refined as it is. In the whole left part of the domain refinement is only performed along the <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>-axis of cells. In the right part of the domain the refinement is dominated by isotropic refinement, as the anisotropic feature of the solution - the jump from one to zero - is not well aligned with the mesh where the advection direction takes a turn. However, at the bottom and closest (to the observer) parts of the quarter circle this jumps again becomes more and more aligned with the mesh and the refinement algorithm reacts by creating anisotropic cells of increasing aspect ratio.</p>
+<p>The pictures also explain why the mesh is refined as it is. In the whole left part of the domain refinement is only performed along the <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>-axis of cells. In the right part of the domain the refinement is dominated by isotropic refinement, as the anisotropic feature of the solution - the jump from one to zero - is not well aligned with the mesh where the advection direction takes a turn. However, at the bottom and closest (to the observer) parts of the quarter circle this jumps again becomes more and more aligned with the mesh and the refinement algorithm reacts by creating anisotropic cells of increasing aspect ratio.</p>
 <p>It might seem that the necessary alignment of anisotropic features and the coarse mesh can decrease performance significantly for real world problems. That is not wrong in general: If one were, for example, to apply anisotropic refinement to problems in which shocks appear (e.g., the equations solved in <a class="el" href="step_69.html">step-69</a>), then it many cases the shock is not aligned with the mesh and anisotropic refinement will help little unless one also introduces techniques to move the mesh in alignment with the shocks. On the other hand, many steep features of solutions are due to boundary layers. In those cases, the mesh is already aligned with the anisotropic features because it is of course aligned with the boundary itself, and anisotropic refinement will almost always increase the efficiency of computations on adapted grids for these cases.</p>
 <p><a class="anchor" id="PlainProg"></a> </p><h1>The plain program</h1>
 <div class="fragment"><div class="line"><span class="comment">/* ---------------------------------------------------------------------</span></div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_31.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_31.html	2024-03-17 21:57:45.283245663 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_31.html	2024-03-17 21:57:45.279245638 +0000
@@ -174,7 +174,7 @@
 <p><a class="anchor" id="TheBoussinesqequations"></a></p><h3>The Boussinesq equations</h3>
 <p>This program deals with an interesting physical problem: how does a fluid (i.e., a liquid or gas) behave if it experiences differences in buoyancy caused by temperature differences? It is clear that those parts of the fluid that are hotter (and therefore lighter) are going to rise up and those that are cooler (and denser) are going to sink down with gravity.</p>
 <p>In cases where the fluid moves slowly enough such that inertial effects can be neglected, the equations that describe such behavior are the Boussinesq equations that read as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_4057_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3945_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   -\nabla \cdot (2 \eta \varepsilon ({\mathbf u})) + \nabla p &amp;=&amp;
   -\rho\; \beta \; T\; \mathbf{g},
   \\
@@ -185,49 +185,49 @@
   {\mathbf u} \cdot \nabla T
   -
   \nabla \cdot \kappa \nabla T &amp;=&amp; \gamma.
-\end{eqnarray*}" src="form_4057.png"/></picture>
+\end{eqnarray*}" src="form_3945.png"/></picture>
 </p>
-<p> These equations fall into the class of vector-valued problems (a toplevel overview of this topic can be found in the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> module). Here, <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> is the velocity field, <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> the pressure, and <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture> the temperature of the fluid. <picture><source srcset="form_4058_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon ({\mathbf u}) = \frac 12
-[(\nabla{\mathbf u}) + (\nabla {\mathbf u})^T]$" src="form_4058.png"/></picture> is the symmetric gradient of the velocity. As can be seen, velocity and pressure solve a Stokes equation describing the motion of an incompressible fluid, an equation we have previously considered in <a class="el" href="step_22.html">step-22</a>; we will draw extensively on the experience we have gained in that program, in particular with regard to efficient linear Stokes solvers.</p>
-<p>The forcing term of the fluid motion is the buoyancy of the fluid, expressed as the product of the density <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture>, the thermal expansion coefficient <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture>, the temperature <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture> and the gravity vector <picture><source srcset="form_3946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{g}$" src="form_3946.png"/></picture> pointing downward. (A derivation of why the right hand side looks like it looks is given in the introduction of <a class="el" href="step_32.html">step-32</a>.) While the first two equations describe how the fluid reacts to temperature differences by moving around, the third equation states how the fluid motion affects the temperature field: it is an advection diffusion equation, i.e., the temperature is attached to the fluid particles and advected along in the flow field, with an additional diffusion (heat conduction) term. In many applications, the diffusion coefficient is fairly small, and the temperature equation is in fact transport, not diffusion dominated and therefore in character more hyperbolic than elliptic; we will have to take this into account when developing a stable discretization.</p>
-<p>In the equations above, the term <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture> on the right hand side denotes the heat sources and may be a spatially and temporally varying function. <picture><source srcset="form_2182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2182.png"/></picture> and <picture><source srcset="form_3941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa$" src="form_3941.png"/></picture> denote the viscosity and diffusivity coefficients, which we assume constant for this tutorial program. The more general case when <picture><source srcset="form_2182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2182.png"/></picture> depends on the temperature is an important factor in physical applications: Most materials become more fluid as they get hotter (i.e., <picture><source srcset="form_2182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2182.png"/></picture> decreases with <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture>); sometimes, as in the case of rock minerals at temperatures close to their melting point, <picture><source srcset="form_2182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2182.png"/></picture> may change by orders of magnitude over the typical range of temperatures.</p>
-<p>We note that the Stokes equation above could be nondimensionalized by introducing the <a href="http://en.wikipedia.org/wiki/Rayleigh_number" target="_top">Rayleigh number</a> <picture><source srcset="form_4059_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Ra}=\frac{\|\mathbf{g}\| \beta \rho}{\eta \kappa} \delta T L^3$" src="form_4059.png"/></picture> using a typical length scale <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>, typical temperature difference <picture><source srcset="form_4060_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta T$" src="form_4060.png"/></picture>, density <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture>, thermal diffusivity <picture><source srcset="form_2182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2182.png"/></picture>, and thermal conductivity <picture><source srcset="form_3941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa$" src="form_3941.png"/></picture>. <picture><source srcset="form_4061_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Ra}$" src="form_4061.png"/></picture> is a dimensionless number that describes the ratio of heat transport due to convection induced by buoyancy changes from temperature differences, and of heat transport due to thermal diffusion. A small Rayleigh number implies that buoyancy is not strong relative to viscosity and fluid motion <picture><source srcset="form_2520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2520.png"/></picture> is slow enough so that heat diffusion <picture><source srcset="form_4062_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa\nabla T$" src="form_4062.png"/></picture> is the dominant heat transport term. On the other hand, a fluid with a high Rayleigh number will show vigorous convection that dominates heat conduction.</p>
-<p>For most fluids for which we are interested in computing thermal convection, the Rayleigh number is very large, often <picture><source srcset="form_4063_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^6$" src="form_4063.png"/></picture> or larger. From the structure of the equations, we see that this will lead to large pressure differences and large velocities. Consequently, the convection term in the convection-diffusion equation for <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture> will also be very large and an accurate solution of this equation will require us to choose small time steps. Problems with large Rayleigh numbers are therefore hard to solve numerically for similar reasons that make solving the <a href="http://en.wikipedia.org/wiki/Navier-stokes_equations">Navier-Stokes equations</a> hard to solve when the <a href="http://en.wikipedia.org/wiki/Reynolds_number">Reynolds number <picture><source srcset="form_4064_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Re}$" src="form_4064.png"/></picture></a> is large.</p>
-<p>Note that a large Rayleigh number does not necessarily involve large velocities in absolute terms. For example, the Rayleigh number in the earth mantle is larger than <picture><source srcset="form_4063_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^6$" src="form_4063.png"/></picture>. Yet the velocities are small: the material is in fact solid rock but it is so hot and under pressure that it can flow very slowly, on the order of at most a few centimeters per year. Nevertheless, this can lead to mixing over time scales of many million years, a time scale much shorter than for the same amount of heat to be distributed by thermal conductivity and a time scale of relevance to affect the evolution of the earth's interior and surface structure.</p>
+<p> These equations fall into the class of vector-valued problems (a toplevel overview of this topic can be found in the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> module). Here, <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> is the velocity field, <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> the pressure, and <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture> the temperature of the fluid. <picture><source srcset="form_3946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon ({\mathbf u}) = \frac 12
+[(\nabla{\mathbf u}) + (\nabla {\mathbf u})^T]$" src="form_3946.png"/></picture> is the symmetric gradient of the velocity. As can be seen, velocity and pressure solve a Stokes equation describing the motion of an incompressible fluid, an equation we have previously considered in <a class="el" href="step_22.html">step-22</a>; we will draw extensively on the experience we have gained in that program, in particular with regard to efficient linear Stokes solvers.</p>
+<p>The forcing term of the fluid motion is the buoyancy of the fluid, expressed as the product of the density <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture>, the thermal expansion coefficient <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture>, the temperature <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture> and the gravity vector <picture><source srcset="form_3947_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{g}$" src="form_3947.png"/></picture> pointing downward. (A derivation of why the right hand side looks like it looks is given in the introduction of <a class="el" href="step_32.html">step-32</a>.) While the first two equations describe how the fluid reacts to temperature differences by moving around, the third equation states how the fluid motion affects the temperature field: it is an advection diffusion equation, i.e., the temperature is attached to the fluid particles and advected along in the flow field, with an additional diffusion (heat conduction) term. In many applications, the diffusion coefficient is fairly small, and the temperature equation is in fact transport, not diffusion dominated and therefore in character more hyperbolic than elliptic; we will have to take this into account when developing a stable discretization.</p>
+<p>In the equations above, the term <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture> on the right hand side denotes the heat sources and may be a spatially and temporally varying function. <picture><source srcset="form_2162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2162.png"/></picture> and <picture><source srcset="form_3941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa$" src="form_3941.png"/></picture> denote the viscosity and diffusivity coefficients, which we assume constant for this tutorial program. The more general case when <picture><source srcset="form_2162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2162.png"/></picture> depends on the temperature is an important factor in physical applications: Most materials become more fluid as they get hotter (i.e., <picture><source srcset="form_2162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2162.png"/></picture> decreases with <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture>); sometimes, as in the case of rock minerals at temperatures close to their melting point, <picture><source srcset="form_2162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2162.png"/></picture> may change by orders of magnitude over the typical range of temperatures.</p>
+<p>We note that the Stokes equation above could be nondimensionalized by introducing the <a href="http://en.wikipedia.org/wiki/Rayleigh_number" target="_top">Rayleigh number</a> <picture><source srcset="form_3948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Ra}=\frac{\|\mathbf{g}\| \beta \rho}{\eta \kappa} \delta T L^3$" src="form_3948.png"/></picture> using a typical length scale <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>, typical temperature difference <picture><source srcset="form_3949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta T$" src="form_3949.png"/></picture>, density <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture>, thermal diffusivity <picture><source srcset="form_2162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2162.png"/></picture>, and thermal conductivity <picture><source srcset="form_3941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa$" src="form_3941.png"/></picture>. <picture><source srcset="form_3950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Ra}$" src="form_3950.png"/></picture> is a dimensionless number that describes the ratio of heat transport due to convection induced by buoyancy changes from temperature differences, and of heat transport due to thermal diffusion. A small Rayleigh number implies that buoyancy is not strong relative to viscosity and fluid motion <picture><source srcset="form_2515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2515.png"/></picture> is slow enough so that heat diffusion <picture><source srcset="form_3951_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa\nabla T$" src="form_3951.png"/></picture> is the dominant heat transport term. On the other hand, a fluid with a high Rayleigh number will show vigorous convection that dominates heat conduction.</p>
+<p>For most fluids for which we are interested in computing thermal convection, the Rayleigh number is very large, often <picture><source srcset="form_3952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^6$" src="form_3952.png"/></picture> or larger. From the structure of the equations, we see that this will lead to large pressure differences and large velocities. Consequently, the convection term in the convection-diffusion equation for <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture> will also be very large and an accurate solution of this equation will require us to choose small time steps. Problems with large Rayleigh numbers are therefore hard to solve numerically for similar reasons that make solving the <a href="http://en.wikipedia.org/wiki/Navier-stokes_equations">Navier-Stokes equations</a> hard to solve when the <a href="http://en.wikipedia.org/wiki/Reynolds_number">Reynolds number <picture><source srcset="form_3953_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Re}$" src="form_3953.png"/></picture></a> is large.</p>
+<p>Note that a large Rayleigh number does not necessarily involve large velocities in absolute terms. For example, the Rayleigh number in the earth mantle is larger than <picture><source srcset="form_3952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^6$" src="form_3952.png"/></picture>. Yet the velocities are small: the material is in fact solid rock but it is so hot and under pressure that it can flow very slowly, on the order of at most a few centimeters per year. Nevertheless, this can lead to mixing over time scales of many million years, a time scale much shorter than for the same amount of heat to be distributed by thermal conductivity and a time scale of relevance to affect the evolution of the earth's interior and surface structure.</p>
 <dl class="section note"><dt>Note</dt><dd>If you are interested in using the program as the basis for your own experiments, you will also want to take a look at its continuation in <a class="el" href="step_32.html">step-32</a>. Furthermore, <a class="el" href="step_32.html">step-32</a> later was developed into the much larger open source code ASPECT (see <a href="https://aspect.geodynamics.org/">https://aspect.geodynamics.org/</a> ) that can solve realistic problems and that you may want to investigate before trying to morph <a class="el" href="step_31.html">step-31</a> into something that can solve whatever you want to solve.</dd></dl>
 <p><a class="anchor" id="Boundaryandinitialconditions"></a></p><h3>Boundary and initial conditions</h3>
-<p>Since the Boussinesq equations are derived under the assumption that inertia of the fluid's motion does not play a role, the flow field is at each time entirely determined by buoyancy difference at that time, not by the flow field at previous times. This is reflected by the fact that the first two equations above are the steady state Stokes equation that do not contain a time derivative. Consequently, we do not need initial conditions for either velocities or pressure. On the other hand, the temperature field does satisfy an equation with a time derivative, so we need initial conditions for <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture>.</p>
-<p>As for boundary conditions: if <picture><source srcset="form_4065_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa&gt;0$" src="form_4065.png"/></picture> then the temperature satisfies a second order differential equation that requires boundary data all around the boundary for all times. These can either be a prescribed boundary temperature <picture><source srcset="form_4066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T|_{\partial\Omega}=T_b$" src="form_4066.png"/></picture> (Dirichlet boundary conditions), or a prescribed thermal flux <picture><source srcset="form_4067_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}\cdot\kappa\nabla
-T|_{\partial\Omega}=\phi$" src="form_4067.png"/></picture>; in this program, we will use an insulated boundary condition, i.e., prescribe no thermal flux: <picture><source srcset="form_4068_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi=0$" src="form_4068.png"/></picture>.</p>
-<p>Similarly, the velocity field requires us to pose boundary conditions. These may be no-slip no-flux conditions <picture><source srcset="form_4069_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}=0$" src="form_4069.png"/></picture> on <picture><source srcset="form_3116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3116.png"/></picture> if the fluid sticks to the boundary, or no normal flux conditions <picture><source srcset="form_4070_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n \cdot \mathbf
-u = 0$" src="form_4070.png"/></picture> if the fluid can flow along but not across the boundary, or any number of other conditions that are physically reasonable. In this program, we will use no normal flux conditions.</p>
+<p>Since the Boussinesq equations are derived under the assumption that inertia of the fluid's motion does not play a role, the flow field is at each time entirely determined by buoyancy difference at that time, not by the flow field at previous times. This is reflected by the fact that the first two equations above are the steady state Stokes equation that do not contain a time derivative. Consequently, we do not need initial conditions for either velocities or pressure. On the other hand, the temperature field does satisfy an equation with a time derivative, so we need initial conditions for <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture>.</p>
+<p>As for boundary conditions: if <picture><source srcset="form_3954_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa&gt;0$" src="form_3954.png"/></picture> then the temperature satisfies a second order differential equation that requires boundary data all around the boundary for all times. These can either be a prescribed boundary temperature <picture><source srcset="form_3955_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T|_{\partial\Omega}=T_b$" src="form_3955.png"/></picture> (Dirichlet boundary conditions), or a prescribed thermal flux <picture><source srcset="form_3956_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}\cdot\kappa\nabla
+T|_{\partial\Omega}=\phi$" src="form_3956.png"/></picture>; in this program, we will use an insulated boundary condition, i.e., prescribe no thermal flux: <picture><source srcset="form_3957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi=0$" src="form_3957.png"/></picture>.</p>
+<p>Similarly, the velocity field requires us to pose boundary conditions. These may be no-slip no-flux conditions <picture><source srcset="form_3958_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}=0$" src="form_3958.png"/></picture> on <picture><source srcset="form_3192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3192.png"/></picture> if the fluid sticks to the boundary, or no normal flux conditions <picture><source srcset="form_3959_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n \cdot \mathbf
+u = 0$" src="form_3959.png"/></picture> if the fluid can flow along but not across the boundary, or any number of other conditions that are physically reasonable. In this program, we will use no normal flux conditions.</p>
 <p><a class="anchor" id="Solutionapproach"></a></p><h3>Solution approach</h3>
-<p>Like the equations solved in <a class="el" href="step_21.html">step-21</a>, we here have a system of differential-algebraic equations (DAE): with respect to the time variable, only the temperature equation is a differential equation whereas the Stokes system for <picture><source srcset="form_2520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2520.png"/></picture> and <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> has no time-derivatives and is therefore of the sort of an algebraic constraint that has to hold at each time instant. The main difference to <a class="el" href="step_21.html">step-21</a> is that the algebraic constraint there was a mixed Laplace system of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_4071_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>Like the equations solved in <a class="el" href="step_21.html">step-21</a>, we here have a system of differential-algebraic equations (DAE): with respect to the time variable, only the temperature equation is a differential equation whereas the Stokes system for <picture><source srcset="form_2515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2515.png"/></picture> and <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> has no time-derivatives and is therefore of the sort of an algebraic constraint that has to hold at each time instant. The main difference to <a class="el" href="step_21.html">step-21</a> is that the algebraic constraint there was a mixed Laplace system of the form  </p><p class="formulaDsp">
+<picture><source srcset="form_3960_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \mathbf u + {\mathbf K}\lambda \nabla p &amp;=&amp; 0, \\
   \nabla\cdot \mathbf u &amp;=&amp; f,
-\end{eqnarray*}" src="form_4071.png"/></picture>
+\end{eqnarray*}" src="form_3960.png"/></picture>
 </p>
 <p> where now we have a Stokes system  </p><p class="formulaDsp">
-<picture><source srcset="form_4072_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3961_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   -\nabla \cdot (2 \eta \varepsilon ({\mathbf u})) + \nabla p &amp;=&amp; f, \\
   \nabla\cdot \mathbf u &amp;=&amp; 0,
-\end{eqnarray*}" src="form_4072.png"/></picture>
+\end{eqnarray*}" src="form_3961.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_4073_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \cdot \eta \varepsilon (\cdot)$" src="form_4073.png"/></picture> is an operator similar to the Laplacian <picture><source srcset="form_4074_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta$" src="form_4074.png"/></picture> applied to a vector field.</p>
+<p> where <picture><source srcset="form_3962_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \cdot \eta \varepsilon (\cdot)$" src="form_3962.png"/></picture> is an operator similar to the Laplacian <picture><source srcset="form_3963_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta$" src="form_3963.png"/></picture> applied to a vector field.</p>
 <p>Given the similarity to what we have done in <a class="el" href="step_21.html">step-21</a>, it may not come as a surprise that we choose a similar approach, although we will have to make adjustments for the change in operator in the top-left corner of the differential operator.</p>
 <p><a class="anchor" id="Timestepping"></a></p><h4>Time stepping</h4>
-<p>The structure of the problem as a DAE allows us to use the same strategy as we have already used in <a class="el" href="step_21.html">step-21</a>, i.e., we use a time lag scheme: we first solve the temperature equation (using an extrapolated velocity field), and then insert the new temperature solution into the right hand side of the velocity equation. The way we implement this in our code looks at things from a slightly different perspective, though. We first solve the Stokes equations for velocity and pressure using the temperature field from the previous time step, which means that we get the velocity for the previous time step. In other words, we first solve the Stokes system for time step <picture><source srcset="form_4075_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n - 1$" src="form_4075.png"/></picture> as  </p><p class="formulaDsp">
-<picture><source srcset="form_4076_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>The structure of the problem as a DAE allows us to use the same strategy as we have already used in <a class="el" href="step_21.html">step-21</a>, i.e., we use a time lag scheme: we first solve the temperature equation (using an extrapolated velocity field), and then insert the new temperature solution into the right hand side of the velocity equation. The way we implement this in our code looks at things from a slightly different perspective, though. We first solve the Stokes equations for velocity and pressure using the temperature field from the previous time step, which means that we get the velocity for the previous time step. In other words, we first solve the Stokes system for time step <picture><source srcset="form_3964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n - 1$" src="form_3964.png"/></picture> as  </p><p class="formulaDsp">
+<picture><source srcset="form_3965_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   -\nabla \cdot (2\eta \varepsilon ({\mathbf u}^{n-1})) + \nabla p^{n-1} &amp;=&amp;
   -\rho\; \beta \; T^{n-1} \mathbf{g},
   \\
   \nabla \cdot {\mathbf u}^{n-1} &amp;=&amp; 0,
-\end{eqnarray*}" src="form_4076.png"/></picture>
+\end{eqnarray*}" src="form_3965.png"/></picture>
 </p>
-<p> and then the temperature equation with an extrapolated velocity field to time <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>.</p>
-<p>In contrast to <a class="el" href="step_21.html">step-21</a>, we'll use a higher order time stepping scheme here, namely the <a href="http://en.wikipedia.org/wiki/Backward_differentiation_formula">Backward Differentiation Formula scheme of order 2 (BDF-2 in short)</a> that replaces the time derivative <picture><source srcset="form_4077_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial T}{\partial t}$" src="form_4077.png"/></picture> by the (one-sided) difference quotient <picture><source srcset="form_4078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\frac 32 T^{n}-2T^{n-1}+\frac 12 T^{n-2}}{k}$" src="form_4078.png"/></picture> with <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> the time step size. This gives the discretized-in-time temperature equation  </p><p class="formulaDsp">
-<picture><source srcset="form_4079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> and then the temperature equation with an extrapolated velocity field to time <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>.</p>
+<p>In contrast to <a class="el" href="step_21.html">step-21</a>, we'll use a higher order time stepping scheme here, namely the <a href="http://en.wikipedia.org/wiki/Backward_differentiation_formula">Backward Differentiation Formula scheme of order 2 (BDF-2 in short)</a> that replaces the time derivative <picture><source srcset="form_3966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial T}{\partial t}$" src="form_3966.png"/></picture> by the (one-sided) difference quotient <picture><source srcset="form_3967_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\frac 32 T^{n}-2T^{n-1}+\frac 12 T^{n-2}}{k}$" src="form_3967.png"/></picture> with <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> the time step size. This gives the discretized-in-time temperature equation  </p><p class="formulaDsp">
+<picture><source srcset="form_3968_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \frac 32 T^n
   -
   k\nabla \cdot \kappa \nabla T^n
@@ -239,13 +239,13 @@
   k(2{\mathbf u}^{n-1} - {\mathbf u}^{n-2} ) \cdot \nabla (2T^{n-1}-T^{n-2})
   +
   k\gamma.
-\end{eqnarray*}" src="form_4079.png"/></picture>
+\end{eqnarray*}" src="form_3968.png"/></picture>
 </p>
-<p> Note how the temperature equation is solved semi-explicitly: diffusion is treated implicitly whereas advection is treated explicitly using an extrapolation (or forward-projection) of temperature and velocity, including the just-computed velocity <picture><source srcset="form_4080_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u}^{n-1}$" src="form_4080.png"/></picture>. The forward-projection to the current time level <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> is derived from a Taylor expansion, <picture><source srcset="form_4081_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T^n
+<p> Note how the temperature equation is solved semi-explicitly: diffusion is treated implicitly whereas advection is treated explicitly using an extrapolation (or forward-projection) of temperature and velocity, including the just-computed velocity <picture><source srcset="form_3969_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u}^{n-1}$" src="form_3969.png"/></picture>. The forward-projection to the current time level <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> is derived from a Taylor expansion, <picture><source srcset="form_3970_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T^n
 \approx T^{n-1} + k_n \frac{\partial T}{\partial t} \approx T^{n-1} + k_n
-\frac{T^{n-1}-T^{n-2}}{k_n} = 2T^{n-1}-T^{n-2}$" src="form_4081.png"/></picture>. We need this projection for maintaining the order of accuracy of the BDF-2 scheme. In other words, the temperature fields we use in the explicit right hand side are second order approximations of the current temperature field &mdash; not quite an explicit time stepping scheme, but by character not too far away either.</p>
-<p>The introduction of the temperature extrapolation limits the time step by a <a href="http://en.wikipedia.org/wiki/Courant–Friedrichs–Lewy_condition">Courant-Friedrichs-Lewy (CFL) condition</a> just like it was in <a class="el" href="step_21.html">step-21</a>. (We wouldn't have had that stability condition if we treated the advection term implicitly since the BDF-2 scheme is A-stable, at the price that we needed to build a new temperature matrix at each time step.) We will discuss the exact choice of time step in the <a href="#href_anchor">results section</a>, but for the moment of importance is that this CFL condition means that the time step size <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> may change from time step to time step, and that we have to modify the above formula slightly. If <picture><source srcset="form_4082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n,k_{n-1}$" src="form_4082.png"/></picture> are the time steps sizes of the current and previous time step, then we use the approximations  </p><p class="formulaDsp">
-<picture><source srcset="form_4083_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+\frac{T^{n-1}-T^{n-2}}{k_n} = 2T^{n-1}-T^{n-2}$" src="form_3970.png"/></picture>. We need this projection for maintaining the order of accuracy of the BDF-2 scheme. In other words, the temperature fields we use in the explicit right hand side are second order approximations of the current temperature field &mdash; not quite an explicit time stepping scheme, but by character not too far away either.</p>
+<p>The introduction of the temperature extrapolation limits the time step by a <a href="http://en.wikipedia.org/wiki/Courant–Friedrichs–Lewy_condition">Courant-Friedrichs-Lewy (CFL) condition</a> just like it was in <a class="el" href="step_21.html">step-21</a>. (We wouldn't have had that stability condition if we treated the advection term implicitly since the BDF-2 scheme is A-stable, at the price that we needed to build a new temperature matrix at each time step.) We will discuss the exact choice of time step in the <a href="#href_anchor">results section</a>, but for the moment of importance is that this CFL condition means that the time step size <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> may change from time step to time step, and that we have to modify the above formula slightly. If <picture><source srcset="form_3971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n,k_{n-1}$" src="form_3971.png"/></picture> are the time steps sizes of the current and previous time step, then we use the approximations  </p><p class="formulaDsp">
+<picture><source srcset="form_3972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 \frac{\partial T}{\partial t} \approx
  \frac 1{k_n}
  \left(
@@ -255,10 +255,10 @@
        +
        \frac{k_n^2}{k_{n-1}(k_n+k_{n-1})} T^{n-2}
  \right)
- \end{align*}" src="form_4083.png"/></picture>
+ \end{align*}" src="form_3972.png"/></picture>
 </p>
 <p> and  </p><p class="formulaDsp">
-<picture><source srcset="form_4084_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_3973_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 T^n \approx
    T^{n-1} + k_n \frac{\partial T}{\partial t}
    \approx
@@ -266,10 +266,10 @@
    \frac{T^{n-1}-T^{n-2}}{k_{n-1}}
    =
    \left(1+\frac{k_n}{k_{n-1}}\right)T^{n-1}-\frac{k_n}{k_{n-1}}T^{n-2},
-\end{align*}" src="form_4084.png"/></picture>
+\end{align*}" src="form_3973.png"/></picture>
 </p>
 <p> and above equation is generalized as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_4085_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3974_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \frac{2k_n+k_{n-1}}{k_n+k_{n-1}} T^n
   -
   k_n\nabla \cdot \kappa \nabla T^n
@@ -281,14 +281,14 @@
   k_n{\mathbf u}^{*,n} \cdot \nabla T^{*,n}
   +
   k_n\gamma,
-\end{eqnarray*}" src="form_4085.png"/></picture>
+\end{eqnarray*}" src="form_3974.png"/></picture>
 </p>
-<p>where <picture><source srcset="form_4086_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${(\cdot)}^{*,n} = \left(1+\frac{k_n}{k_{n-1}}\right)(\cdot)^{n-1} -
-\frac{k_n}{k_{n-1}}(\cdot)^{n-2}$" src="form_4086.png"/></picture> denotes the extrapolation of velocity <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> and temperature <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture> to time level <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>, using the values at the two previous time steps. That's not an easy to read equation, but will provide us with the desired higher order accuracy. As a consistency check, it is easy to verify that it reduces to the same equation as above if <picture><source srcset="form_4087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n=k_{n-1}$" src="form_4087.png"/></picture>.</p>
-<p>As a final remark we note that the choice of a higher order time stepping scheme of course forces us to keep more time steps in memory; in particular, we here will need to have <picture><source srcset="form_4088_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T^{n-2}$" src="form_4088.png"/></picture> around, a vector that we could previously discard. This seems like a nuisance that we were able to avoid previously by using only a first order time stepping scheme, but as we will see below when discussing the topic of stabilization, we will need this vector anyway and so keeping it around for time discretization is essentially for free and gives us the opportunity to use a higher order scheme.</p>
+<p>where <picture><source srcset="form_3975_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${(\cdot)}^{*,n} = \left(1+\frac{k_n}{k_{n-1}}\right)(\cdot)^{n-1} -
+\frac{k_n}{k_{n-1}}(\cdot)^{n-2}$" src="form_3975.png"/></picture> denotes the extrapolation of velocity <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> and temperature <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture> to time level <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>, using the values at the two previous time steps. That's not an easy to read equation, but will provide us with the desired higher order accuracy. As a consistency check, it is easy to verify that it reduces to the same equation as above if <picture><source srcset="form_3976_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n=k_{n-1}$" src="form_3976.png"/></picture>.</p>
+<p>As a final remark we note that the choice of a higher order time stepping scheme of course forces us to keep more time steps in memory; in particular, we here will need to have <picture><source srcset="form_3977_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T^{n-2}$" src="form_3977.png"/></picture> around, a vector that we could previously discard. This seems like a nuisance that we were able to avoid previously by using only a first order time stepping scheme, but as we will see below when discussing the topic of stabilization, we will need this vector anyway and so keeping it around for time discretization is essentially for free and gives us the opportunity to use a higher order scheme.</p>
 <p><a class="anchor" id="WeakformandspacediscretizationfortheStokespart"></a></p><h4>Weak form and space discretization for the Stokes part</h4>
-<p>Like solving the mixed Laplace equations, solving the Stokes equations requires us to choose particular pairs of finite elements for velocities and pressure variables. Because this has already been discussed in <a class="el" href="step_22.html">step-22</a>, we only cover this topic briefly: Here, we use the stable pair <picture><source srcset="form_4089_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_{p+1}^d \times Q_p, p\ge 1$" src="form_4089.png"/></picture>. These are continuous elements, so we can form the weak form of the Stokes equation without problem by integrating by parts and substituting continuous functions by their discrete counterparts:  </p><p class="formulaDsp">
-<picture><source srcset="form_4090_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>Like solving the mixed Laplace equations, solving the Stokes equations requires us to choose particular pairs of finite elements for velocities and pressure variables. Because this has already been discussed in <a class="el" href="step_22.html">step-22</a>, we only cover this topic briefly: Here, we use the stable pair <picture><source srcset="form_3978_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_{p+1}^d \times Q_p, p\ge 1$" src="form_3978.png"/></picture>. These are continuous elements, so we can form the weak form of the Stokes equation without problem by integrating by parts and substituting continuous functions by their discrete counterparts:  </p><p class="formulaDsp">
+<picture><source srcset="form_3979_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (\nabla {\mathbf v}_h, 2\eta \varepsilon ({\mathbf u}^{n-1}_h))
   -
   (\nabla \cdot {\mathbf v}_h, p^{n-1}_h)
@@ -296,12 +296,12 @@
   -({\mathbf v}_h, \rho\; \beta \; T^{n-1}_h \mathbf{g}),
   \\
   (q_h, \nabla \cdot {\mathbf u}^{n-1}_h) &amp;=&amp; 0,
-\end{eqnarray*}" src="form_4090.png"/></picture>
+\end{eqnarray*}" src="form_3979.png"/></picture>
 </p>
-<p> for all test functions <picture><source srcset="form_4091_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v_h, q_h$" src="form_4091.png"/></picture>. The first term of the first equation is considered as the inner product between tensors, i.e.  <picture><source srcset="form_4092_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\nabla {\mathbf v}_h, \eta \varepsilon ({\mathbf u}^{n-1}_h))_\Omega
+<p> for all test functions <picture><source srcset="form_3980_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v_h, q_h$" src="form_3980.png"/></picture>. The first term of the first equation is considered as the inner product between tensors, i.e.  <picture><source srcset="form_3981_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\nabla {\mathbf v}_h, \eta \varepsilon ({\mathbf u}^{n-1}_h))_\Omega
  = \int_\Omega \sum_{i,j=1}^d [\nabla {\mathbf v}_h]_{ij}
-           \eta [\varepsilon ({\mathbf u}^{n-1}_h)]_{ij}\, dx$" src="form_4092.png"/></picture>. Because the second tensor in this product is symmetric, the anti-symmetric component of <picture><source srcset="form_4093_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla {\mathbf v}_h$" src="form_4093.png"/></picture> plays no role and it leads to the entirely same form if we use the symmetric gradient of <picture><source srcset="form_4094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v_h$" src="form_4094.png"/></picture> instead. Consequently, the formulation we consider and that we implement is  </p><p class="formulaDsp">
-<picture><source srcset="form_4095_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+           \eta [\varepsilon ({\mathbf u}^{n-1}_h)]_{ij}\, dx$" src="form_3981.png"/></picture>. Because the second tensor in this product is symmetric, the anti-symmetric component of <picture><source srcset="form_3982_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla {\mathbf v}_h$" src="form_3982.png"/></picture> plays no role and it leads to the entirely same form if we use the symmetric gradient of <picture><source srcset="form_3983_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v_h$" src="form_3983.png"/></picture> instead. Consequently, the formulation we consider and that we implement is  </p><p class="formulaDsp">
+<picture><source srcset="form_3984_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (\varepsilon({\mathbf v}_h), 2\eta \varepsilon ({\mathbf u}^{n-1}_h))
   -
   (\nabla \cdot {\mathbf v}_h, p^{n-1}_h)
@@ -309,32 +309,32 @@
   -({\mathbf v}_h, \rho\; \beta \; T^{n-1}_h \mathbf{g}),
   \\
   (q_h, \nabla \cdot {\mathbf u}^{n-1}_h) &amp;=&amp; 0.
-\end{eqnarray*}" src="form_4095.png"/></picture>
+\end{eqnarray*}" src="form_3984.png"/></picture>
 </p>
 <p>This is exactly the same as what we already discussed in <a class="el" href="step_22.html">step-22</a> and there is not much more to say about this here.</p>
 <p><a class="anchor" id="Stabilizationweakformandspacediscretizationforthetemperatureequation"></a></p><h4>Stabilization, weak form and space discretization for the temperature equation</h4>
 <p>The more interesting question is what to do with the temperature advection-diffusion equation. By default, not all discretizations of this equation are equally stable unless we either do something like upwinding, stabilization, or all of this. One way to achieve this is to use discontinuous elements (i.e., the <a class="el" href="classFE__DGQ.html">FE_DGQ</a> class that we used, for example, in the discretization of the transport equation in <a class="el" href="step_12.html">step-12</a>, or in discretizing the pressure in <a class="el" href="step_20.html">step-20</a> and <a class="el" href="step_21.html">step-21</a>) and to define a flux at the interface between cells that takes into account upwinding. If we had a pure advection problem this would probably be the simplest way to go. However, here we have some diffusion as well, and the discretization of the Laplace operator with discontinuous elements is cumbersome because of the significant number of additional terms that need to be integrated on each face between cells. Discontinuous elements also have the drawback that the use of numerical fluxes introduces an additional numerical diffusion that acts everywhere, whereas we would really like to minimize the effect of numerical diffusion to a minimum and only apply it where it is necessary to stabilize the scheme.</p>
 <p>A better alternative is therefore to add some nonlinear viscosity to the model. Essentially, what this does is to transform the temperature equation from the form  </p><p class="formulaDsp">
-<picture><source srcset="form_4096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3985_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \frac{\partial T}{\partial t}
   +
   {\mathbf u} \cdot \nabla T
   -
   \nabla \cdot \kappa \nabla T &amp;=&amp; \gamma
-\end{eqnarray*}" src="form_4096.png"/></picture>
+\end{eqnarray*}" src="form_3985.png"/></picture>
 </p>
 <p> to something like  </p><p class="formulaDsp">
-<picture><source srcset="form_4097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_3986_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \frac{\partial T}{\partial t}
   +
   {\mathbf u} \cdot \nabla T
   -
   \nabla \cdot (\kappa+\nu(T)) \nabla T &amp;=&amp; \gamma,
-\end{eqnarray*}" src="form_4097.png"/></picture>
+\end{eqnarray*}" src="form_3986.png"/></picture>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_32.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_32.html	2024-03-17 21:57:45.463246775 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_32.html	2024-03-17 21:57:45.475246848 +0000
@@ -166,58 +166,58 @@
 <p>In addition to these changes, we also use a slightly different preconditioner, and we will have to make a number of changes that have to do with the fact that we want to solve a <em>realistic</em> problem here, not a model problem. The latter, in particular, will require that we think about scaling issues as well as what all those parameters and coefficients in the equations under consideration actually mean. We will discuss first the issues that affect changes in the mathematical formulation and solver structure, then how to parallelize things, and finally the actual testcase we will consider.</p>
 <p><a class="anchor" id="Usingtherightpressure"></a></p><h3>Using the "right" pressure </h3>
 <p>In <a class="el" href="step_31.html">step-31</a>, we used the following Stokes model for the velocity and pressure field:  </p><p class="formulaDsp">
-<picture><source srcset="form_4453_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_4126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   -\nabla \cdot (2 \eta \varepsilon ({\mathbf u})) + \nabla p &amp;=&amp;
   -\rho \; \beta \; T \mathbf{g},
   \\
   \nabla \cdot {\mathbf u} &amp;=&amp; 0.
-\end{eqnarray*}" src="form_4453.png"/></picture>
+\end{eqnarray*}" src="form_4126.png"/></picture>
 </p>
-<p> The right hand side of the first equation appears a wee bit unmotivated. Here's how things should really be. We need the external forces that act on the fluid, which we assume are given by gravity only. In the current case, we assume that the fluid does expand slightly for the purposes of this gravity force, but not enough that we need to modify the incompressibility condition (the second equation). What this means is that for the purpose of the right hand side, we can assume that <picture><source srcset="form_4454_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho=\rho(T)$" src="form_4454.png"/></picture>. An assumption that may not be entirely justified is that we can assume that the changes of density as a function of temperature are small, leading to an expression of the form <picture><source srcset="form_4455_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho(T) = \rho_{\text{ref}}
-[1-\beta(T-T_{\text{ref}})]$" src="form_4455.png"/></picture>, i.e., the density equals <picture><source srcset="form_4456_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho_{\text{ref}}$" src="form_4456.png"/></picture> at reference temperature and decreases linearly as the temperature increases (as the material expands). The force balance equation then looks properly written like this:  </p><p class="formulaDsp">
-<picture><source srcset="form_4457_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> The right hand side of the first equation appears a wee bit unmotivated. Here's how things should really be. We need the external forces that act on the fluid, which we assume are given by gravity only. In the current case, we assume that the fluid does expand slightly for the purposes of this gravity force, but not enough that we need to modify the incompressibility condition (the second equation). What this means is that for the purpose of the right hand side, we can assume that <picture><source srcset="form_4127_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho=\rho(T)$" src="form_4127.png"/></picture>. An assumption that may not be entirely justified is that we can assume that the changes of density as a function of temperature are small, leading to an expression of the form <picture><source srcset="form_4128_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho(T) = \rho_{\text{ref}}
+[1-\beta(T-T_{\text{ref}})]$" src="form_4128.png"/></picture>, i.e., the density equals <picture><source srcset="form_4129_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho_{\text{ref}}$" src="form_4129.png"/></picture> at reference temperature and decreases linearly as the temperature increases (as the material expands). The force balance equation then looks properly written like this:  </p><p class="formulaDsp">
+<picture><source srcset="form_4130_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   -\nabla \cdot (2 \eta \varepsilon ({\mathbf u})) + \nabla p &amp;=&amp;
   \rho_{\text{ref}} [1-\beta(T-T_{\text{ref}})] \mathbf{g}.
-\end{eqnarray*}" src="form_4457.png"/></picture>
+\end{eqnarray*}" src="form_4130.png"/></picture>
 </p>
-<p> Now note that the gravity force results from a gravity potential as <picture><source srcset="form_4458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf g=-\nabla \varphi$" src="form_4458.png"/></picture>, so that we can re-write this as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_4459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> Now note that the gravity force results from a gravity potential as <picture><source srcset="form_4131_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf g=-\nabla \varphi$" src="form_4131.png"/></picture>, so that we can re-write this as follows:  </p><p class="formulaDsp">
+<picture><source srcset="form_4132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   -\nabla \cdot (2 \eta \varepsilon ({\mathbf u})) + \nabla p &amp;=&amp;
   -\rho_{\text{ref}} \; \beta\; T\; \mathbf{g}
   -\rho_{\text{ref}} [1+\beta T_{\text{ref}}] \nabla\varphi.
-\end{eqnarray*}" src="form_4459.png"/></picture>
+\end{eqnarray*}" src="form_4132.png"/></picture>
 </p>
-<p> The second term on the right is time independent, and so we could introduce a new "dynamic" pressure <picture><source srcset="form_4460_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_{\text{dyn}}=p+\rho_{\text{ref}}
-[1+\beta T_{\text{ref}}] \varphi=p_{\text{total}}-p_{\text{static}}$" src="form_4460.png"/></picture> with which the Stokes equations would read:  </p><p class="formulaDsp">
-<picture><source srcset="form_4461_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> The second term on the right is time independent, and so we could introduce a new "dynamic" pressure <picture><source srcset="form_4133_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_{\text{dyn}}=p+\rho_{\text{ref}}
+[1+\beta T_{\text{ref}}] \varphi=p_{\text{total}}-p_{\text{static}}$" src="form_4133.png"/></picture> with which the Stokes equations would read:  </p><p class="formulaDsp">
+<picture><source srcset="form_4134_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   -\nabla \cdot (2 \eta \varepsilon ({\mathbf u})) + \nabla p_{\text{dyn}} &amp;=&amp;
   -\rho_{\text{ref}} \; \beta \; T \; \mathbf{g},
   \\
   \nabla \cdot {\mathbf u} &amp;=&amp; 0.
-\end{eqnarray*}" src="form_4461.png"/></picture>
+\end{eqnarray*}" src="form_4134.png"/></picture>
 </p>
 <p> This is exactly the form we used in <a class="el" href="step_31.html">step-31</a>, and it was appropriate to do so because all changes in the fluid flow are only driven by the dynamic pressure that results from temperature differences. (In other words: Any contribution to the right hand side that results from taking the gradient of a scalar field have no effect on the velocity field.)</p>
 <p>On the other hand, we will here use the form of the Stokes equations that considers the total pressure instead:  </p><p class="formulaDsp">
-<picture><source srcset="form_4462_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_4135_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   -\nabla \cdot (2 \eta \varepsilon ({\mathbf u})) + \nabla p &amp;=&amp;
   \rho(T)\; \mathbf{g},
   \\
   \nabla \cdot {\mathbf u} &amp;=&amp; 0.
-\end{eqnarray*}" src="form_4462.png"/></picture>
+\end{eqnarray*}" src="form_4135.png"/></picture>
 </p>
 <p> There are several advantages to this:</p>
 <ul>
 <li>This way we can plot the pressure in our program in such a way that it actually shows the total pressure that includes the effects of temperature differences as well as the static pressure of the overlying rocks. Since the pressure does not appear any further in any of the other equations, whether to use one or the other is more a matter of taste than of correctness. The flow field is exactly the same, but we get a pressure that we can now compare with values that are given in geophysical books as those that hold at the bottom of the earth mantle, for example.</li>
 <li>If we wanted to make the model even more realistic, we would have to take into account that many of the material parameters (e.g. the viscosity, the density, etc) not only depend on the temperature but also the <em>total</em> pressure.</li>
-<li>The model above assumed a linear dependence <picture><source srcset="form_4463_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho(T) = \rho_{\text{ref}}
-  [1-\beta(T-T_{\text{ref}})]$" src="form_4463.png"/></picture> and assumed that <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> is small. In practice, this may not be so. In fact, realistic models are certainly not linear, and <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> may also not be small for at least part of the temperature range because the density's behavior is substantially dependent not only on thermal expansion but by phase changes.</li>
+<li>The model above assumed a linear dependence <picture><source srcset="form_4136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho(T) = \rho_{\text{ref}}
+  [1-\beta(T-T_{\text{ref}})]$" src="form_4136.png"/></picture> and assumed that <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> is small. In practice, this may not be so. In fact, realistic models are certainly not linear, and <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> may also not be small for at least part of the temperature range because the density's behavior is substantially dependent not only on thermal expansion but by phase changes.</li>
 <li>A final reason to do this is discussed in the results section and concerns possible extensions to the model we use here. It has to do with the fact that the temperature equation (see below) we use here does not include a term that contains the pressure. It should, however: rock, like gas, heats up as you compress it. Consequently, material that rises up cools adiabatically, and cold material that sinks down heats adiabatically. We discuss this further below.</li>
 </ul>
-<dl class="section note"><dt>Note</dt><dd>There is, however, a downside to this procedure. In the earth, the dynamic pressure is several orders of magnitude smaller than the total pressure. If we use the equations above and solve all variables to, say, 4 digits of accuracy, then we may be able to get the velocity and the total pressure right, but we will have no accuracy at all if we compute the dynamic pressure by subtracting from the total pressure the static part <picture><source srcset="form_4464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_\text{static}=\rho_{\text{ref}}
-[1+\beta T_{\text{ref}}] \varphi$" src="form_4464.png"/></picture>. If, for example, the dynamic pressure is six orders of magnitude smaller than the static pressure, then we need to solve the overall pressure to at least seven digits of accuracy to get anything remotely accurate. That said, in practice this turns out not to be a limiting factor.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>There is, however, a downside to this procedure. In the earth, the dynamic pressure is several orders of magnitude smaller than the total pressure. If we use the equations above and solve all variables to, say, 4 digits of accuracy, then we may be able to get the velocity and the total pressure right, but we will have no accuracy at all if we compute the dynamic pressure by subtracting from the total pressure the static part <picture><source srcset="form_4137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_\text{static}=\rho_{\text{ref}}
+[1+\beta T_{\text{ref}}] \varphi$" src="form_4137.png"/></picture>. If, for example, the dynamic pressure is six orders of magnitude smaller than the static pressure, then we need to solve the overall pressure to at least seven digits of accuracy to get anything remotely accurate. That said, in practice this turns out not to be a limiting factor.</dd></dl>
 <p><a class="anchor" id="Thescalingofdiscretizedequations"></a></p><h3>The scaling of discretized equations </h3>
 <p>Remember that we want to solve the following set of equations:  </p><p class="formulaDsp">
-<picture><source srcset="form_4465_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_4138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   -\nabla \cdot (2 \eta \varepsilon ({\mathbf u})) + \nabla p &amp;=&amp;
   \rho(T) \mathbf{g},
   \\
@@ -228,11 +228,11 @@
   {\mathbf u} \cdot \nabla T
   -
   \nabla \cdot \kappa \nabla T &amp;=&amp; \gamma,
-\end{eqnarray*}" src="form_4465.png"/></picture>
+\end{eqnarray*}" src="form_4138.png"/></picture>
 </p>
 <p> augmented by appropriate boundary and initial conditions. As discussed in <a class="el" href="step_31.html">step-31</a>, we will solve this set of equations by solving for a Stokes problem first in each time step, and then moving the temperature equation forward by one time interval.</p>
 <p>The problem under consideration in this current section is with the Stokes problem: if we discretize it as usual, we get a linear system  </p><p class="formulaDsp">
-<picture><source srcset="form_4466_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_4139_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   M \; X
   =
   \left(\begin{array}{cc}
@@ -247,10 +247,10 @@
   \end{array}\right)
   =
   F
-\end{eqnarray*}" src="form_4466.png"/></picture>
+\end{eqnarray*}" src="form_4139.png"/></picture>
 </p>
 <p> which in this program we will solve with a FGMRES solver. This solver iterates until the residual of these linear equations is below a certain tolerance, i.e., until  </p><p class="formulaDsp">
-<picture><source srcset="form_4467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \left\|
   \left(\begin{array}{c}
     F_U - A U^{(k)} - B P^{(k)}
@@ -259,35 +259,35 @@
   \end{array}\right)
   \right\|
   &lt; \text{Tol}.
-\]" src="form_4467.png"/></picture>
+\]" src="form_4140.png"/></picture>
 </p>
-<p> This does not make any sense from the viewpoint of physical units: the quantities involved here have physical units so that the first part of the residual has units <picture><source srcset="form_4468_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\text{Pa}}{\text{m}}
-\text{m}^{\text{dim}}$" src="form_4468.png"/></picture> (most easily established by considering the term <picture><source srcset="form_4469_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\nabla \cdot \mathbf v, p)_{\Omega}$" src="form_4469.png"/></picture> and considering that the pressure has units <picture><source srcset="form_4470_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{Pa}=\frac{\text{kg}}{\text{m}\;\text{s}^2}$" src="form_4470.png"/></picture> and the integration yields a factor of <picture><source srcset="form_4471_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{m}^{\text{dim}}$" src="form_4471.png"/></picture>), whereas the second part of the residual has units <picture><source srcset="form_4472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\text{m}^{\text{dim}}}{\text{s}}$" src="form_4472.png"/></picture>. Taking the norm of this residual vector would yield a quantity with units  <picture><source srcset="form_4473_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{m}^{\text{dim}-1} \sqrt{\left(\text{Pa}\right)^2 +
-       \left(\frac{\text{m}}{\text{s}}\right)^2}$" src="form_4473.png"/></picture>. This, quite obviously, does not make sense, and we should not be surprised that doing so is eventually going to come back hurting us.</p>
-<p>So why is this an issue here, but not in <a class="el" href="step_31.html">step-31</a>? The reason back there is that everything was nicely balanced: velocities were on the order of one, the pressure likewise, the viscosity was one, and the domain had a diameter of <picture><source srcset="form_4474_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{2}$" src="form_4474.png"/></picture>. As a result, while nonsensical, nothing bad happened. On the other hand, as we will explain below, things here will not be that simply scaled: <picture><source srcset="form_2182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2182.png"/></picture> will be around <picture><source srcset="form_4475_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{21}$" src="form_4475.png"/></picture>, velocities on the order of <picture><source srcset="form_4476_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-8}$" src="form_4476.png"/></picture>, pressure around <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^8$" src="form_200.png"/></picture>, and the diameter of the domain is <picture><source srcset="form_4477_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^7$" src="form_4477.png"/></picture>. In other words, the order of magnitude for the first equation is going to be  <picture><source srcset="form_4478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta\text{div}\varepsilon(\mathbf u) \approx 10^{21} \frac{10^{-8}}{(10^7)^2}
-\approx 10^{-1}$" src="form_4478.png"/></picture>, whereas the second equation will be around <picture><source srcset="form_4479_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{div}{\mathbf u}\approx \frac{10^{-8}}{10^7} \approx 10^{-15}$" src="form_4479.png"/></picture>. Well, so what this will lead to is this: if the solver wants to make the residual small, it will almost entirely focus on the first set of equations because they are so much bigger, and ignore the divergence equation that describes mass conservation. That's exactly what happens: unless we set the tolerance to extremely small values, the resulting flow field is definitely not divergence free. As an auxiliary problem, it turns out that it is difficult to find a tolerance that always works; in practice, one often ends up with a tolerance that requires 30 or 40 iterations for most time steps, and 10,000 for some others.</p>
-<p>So what's a numerical analyst to do in a case like this? The answer is to start at the root and first make sure that everything is mathematically consistent first. In our case, this means that if we want to solve the system of Stokes equations jointly, we have to scale them so that they all have the same physical dimensions. In our case, this means multiplying the second equation by something that has units <picture><source srcset="form_4480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\text{Pa}\;\text{s}}{\text{m}}$" src="form_4480.png"/></picture>; one choice is to multiply with <picture><source srcset="form_4481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\eta}{L}$" src="form_4481.png"/></picture> where <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture> is a typical lengthscale in our domain (which experiments show is best chosen to be the diameter of plumes &mdash; around 10 km &mdash; rather than the diameter of the domain). Using these numbers for <picture><source srcset="form_2182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2182.png"/></picture> and <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>, this factor is around <picture><source srcset="form_4482_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{17}$" src="form_4482.png"/></picture>. So, we now get this for the Stokes system:  </p><p class="formulaDsp">
-<picture><source srcset="form_4483_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> This does not make any sense from the viewpoint of physical units: the quantities involved here have physical units so that the first part of the residual has units <picture><source srcset="form_4141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\text{Pa}}{\text{m}}
+\text{m}^{\text{dim}}$" src="form_4141.png"/></picture> (most easily established by considering the term <picture><source srcset="form_4142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\nabla \cdot \mathbf v, p)_{\Omega}$" src="form_4142.png"/></picture> and considering that the pressure has units <picture><source srcset="form_4143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{Pa}=\frac{\text{kg}}{\text{m}\;\text{s}^2}$" src="form_4143.png"/></picture> and the integration yields a factor of <picture><source srcset="form_4144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{m}^{\text{dim}}$" src="form_4144.png"/></picture>), whereas the second part of the residual has units <picture><source srcset="form_4145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\text{m}^{\text{dim}}}{\text{s}}$" src="form_4145.png"/></picture>. Taking the norm of this residual vector would yield a quantity with units  <picture><source srcset="form_4146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{m}^{\text{dim}-1} \sqrt{\left(\text{Pa}\right)^2 +
+       \left(\frac{\text{m}}{\text{s}}\right)^2}$" src="form_4146.png"/></picture>. This, quite obviously, does not make sense, and we should not be surprised that doing so is eventually going to come back hurting us.</p>
+<p>So why is this an issue here, but not in <a class="el" href="step_31.html">step-31</a>? The reason back there is that everything was nicely balanced: velocities were on the order of one, the pressure likewise, the viscosity was one, and the domain had a diameter of <picture><source srcset="form_4147_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{2}$" src="form_4147.png"/></picture>. As a result, while nonsensical, nothing bad happened. On the other hand, as we will explain below, things here will not be that simply scaled: <picture><source srcset="form_2162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2162.png"/></picture> will be around <picture><source srcset="form_4148_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{21}$" src="form_4148.png"/></picture>, velocities on the order of <picture><source srcset="form_4149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-8}$" src="form_4149.png"/></picture>, pressure around <picture><source srcset="form_174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^8$" src="form_174.png"/></picture>, and the diameter of the domain is <picture><source srcset="form_4150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^7$" src="form_4150.png"/></picture>. In other words, the order of magnitude for the first equation is going to be  <picture><source srcset="form_4151_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta\text{div}\varepsilon(\mathbf u) \approx 10^{21} \frac{10^{-8}}{(10^7)^2}
+\approx 10^{-1}$" src="form_4151.png"/></picture>, whereas the second equation will be around <picture><source srcset="form_4152_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{div}{\mathbf u}\approx \frac{10^{-8}}{10^7} \approx 10^{-15}$" src="form_4152.png"/></picture>. Well, so what this will lead to is this: if the solver wants to make the residual small, it will almost entirely focus on the first set of equations because they are so much bigger, and ignore the divergence equation that describes mass conservation. That's exactly what happens: unless we set the tolerance to extremely small values, the resulting flow field is definitely not divergence free. As an auxiliary problem, it turns out that it is difficult to find a tolerance that always works; in practice, one often ends up with a tolerance that requires 30 or 40 iterations for most time steps, and 10,000 for some others.</p>
+<p>So what's a numerical analyst to do in a case like this? The answer is to start at the root and first make sure that everything is mathematically consistent first. In our case, this means that if we want to solve the system of Stokes equations jointly, we have to scale them so that they all have the same physical dimensions. In our case, this means multiplying the second equation by something that has units <picture><source srcset="form_4153_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\text{Pa}\;\text{s}}{\text{m}}$" src="form_4153.png"/></picture>; one choice is to multiply with <picture><source srcset="form_4154_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\eta}{L}$" src="form_4154.png"/></picture> where <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture> is a typical lengthscale in our domain (which experiments show is best chosen to be the diameter of plumes &mdash; around 10 km &mdash; rather than the diameter of the domain). Using these numbers for <picture><source srcset="form_2162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2162.png"/></picture> and <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>, this factor is around <picture><source srcset="form_4155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{17}$" src="form_4155.png"/></picture>. So, we now get this for the Stokes system:  </p><p class="formulaDsp">
+<picture><source srcset="form_4156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   -\nabla \cdot (2 \eta \varepsilon ({\mathbf u})) + \nabla p &amp;=&amp;
   \rho(T) \; \mathbf{g},
   \\
   \frac{\eta}{L} \nabla \cdot {\mathbf u} &amp;=&amp; 0.
-\end{eqnarray*}" src="form_4483.png"/></picture>
+\end{eqnarray*}" src="form_4156.png"/></picture>
 </p>
-<p> The trouble with this is that the result is not symmetric any more (we have <picture><source srcset="form_4484_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\eta}{L} \nabla \cdot$" src="form_4484.png"/></picture> at the bottom left, but not its transpose operator at the top right). This, however, can be cured by introducing a scaled pressure <picture><source srcset="form_4485_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat p = \frac{L}{\eta}p$" src="form_4485.png"/></picture>, and we get the scaled equations  </p><p class="formulaDsp">
-<picture><source srcset="form_4486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> The trouble with this is that the result is not symmetric any more (we have <picture><source srcset="form_4157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\eta}{L} \nabla \cdot$" src="form_4157.png"/></picture> at the bottom left, but not its transpose operator at the top right). This, however, can be cured by introducing a scaled pressure <picture><source srcset="form_4158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat p = \frac{L}{\eta}p$" src="form_4158.png"/></picture>, and we get the scaled equations  </p><p class="formulaDsp">
+<picture><source srcset="form_4159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   -\nabla \cdot (2 \eta \varepsilon ({\mathbf u})) +
   \nabla \left(\frac{\eta}{L} \hat p\right) &amp;=&amp;
   \rho(T) \; \mathbf{g},
   \\
   \frac{\eta}{L} \nabla \cdot {\mathbf u} &amp;=&amp; 0.
-\end{eqnarray*}" src="form_4486.png"/></picture>
+\end{eqnarray*}" src="form_4159.png"/></picture>
 </p>
-<p> This is now symmetric. Obviously, we can easily recover the original pressure <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> from the scaled pressure <picture><source srcset="form_4487_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat p$" src="form_4487.png"/></picture> that we compute as a result of this procedure.</p>
-<p>In the program below, we will introduce a factor <code>EquationData::pressure_scaling</code> that corresponds to <picture><source srcset="form_4481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\eta}{L}$" src="form_4481.png"/></picture>, and we will use this factor in the assembly of the system matrix and preconditioner. Because it is annoying and error prone, we will recover the unscaled pressure immediately following the solution of the linear system, i.e., the solution vector's pressure component will immediately be unscaled to retrieve the physical pressure. Since the solver uses the fact that we can use a good initial guess by extrapolating the previous solutions, we also have to scale the pressure immediately <em>before</em> solving.</p>
+<p> This is now symmetric. Obviously, we can easily recover the original pressure <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> from the scaled pressure <picture><source srcset="form_4160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat p$" src="form_4160.png"/></picture> that we compute as a result of this procedure.</p>
+<p>In the program below, we will introduce a factor <code>EquationData::pressure_scaling</code> that corresponds to <picture><source srcset="form_4154_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\eta}{L}$" src="form_4154.png"/></picture>, and we will use this factor in the assembly of the system matrix and preconditioner. Because it is annoying and error prone, we will recover the unscaled pressure immediately following the solution of the linear system, i.e., the solution vector's pressure component will immediately be unscaled to retrieve the physical pressure. Since the solver uses the fact that we can use a good initial guess by extrapolating the previous solutions, we also have to scale the pressure immediately <em>before</em> solving.</p>
 <p><a class="anchor" id="ChangestotheStokespreconditionerandsolver"></a></p><h3>Changes to the Stokes preconditioner and solver </h3>
-<p>In this tutorial program, we apply a variant of the preconditioner used in <a class="el" href="step_31.html">step-31</a>. That preconditioner was built to operate on the system matrix <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> in block form such that the product matrix  </p><p class="formulaDsp">
-<picture><source srcset="form_4488_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>In this tutorial program, we apply a variant of the preconditioner used in <a class="el" href="step_31.html">step-31</a>. That preconditioner was built to operate on the system matrix <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> in block form such that the product matrix  </p><p class="formulaDsp">
+<picture><source srcset="form_4161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   P^{-1} M
   =
   \left(\begin{array}{cc}
@@ -296,24 +296,24 @@
   \left(\begin{array}{cc}
     A &amp; B^T \\ B &amp; 0
   \end{array}\right)
-\end{eqnarray*}" src="form_4488.png"/></picture>
+\end{eqnarray*}" src="form_4161.png"/></picture>
 </p>
-<p> is of a form that Krylov-based iterative solvers like GMRES can solve in a few iterations. We then replaced the exact inverse of <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> by the action of an AMG preconditioner <picture><source srcset="form_4489_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{A}$" src="form_4489.png"/></picture> based on a vector Laplace matrix, approximated the Schur complement <picture><source srcset="form_3461_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S = B A^{-1} B^T$" src="form_3461.png"/></picture> by a <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> <picture><source srcset="form_3487_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_p$" src="form_3487.png"/></picture> on the pressure space and wrote an <code>InverseMatrix</code> class for implementing the action of <picture><source srcset="form_4490_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_p^{-1}\approx S^{-1}$" src="form_4490.png"/></picture> on vectors. In the InverseMatrix class, we used a CG solve with an incomplete Cholesky (IC) preconditioner for performing the inner solves.</p>
-<p>An observation one can make is that we use just the action of a preconditioner for approximating the velocity inverse <picture><source srcset="form_1914_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^{-1}$" src="form_1914.png"/></picture> (and the outer GMRES iteration takes care of the approximate character of the inverse), whereas we use a more or less <em>exact</em> inverse for <picture><source srcset="form_4491_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_p^{-1}$" src="form_4491.png"/></picture>, realized by a fully converged CG solve. This appears unbalanced, but there's system to this madness: almost all the effort goes into the upper left block to which we apply the AMG preconditioner, whereas even an exact inversion of the pressure mass matrix costs basically nothing. Consequently, if it helps us reduce the overall number of iterations somewhat, then this effort is well spent.</p>
+<p> is of a form that Krylov-based iterative solvers like GMRES can solve in a few iterations. We then replaced the exact inverse of <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> by the action of an AMG preconditioner <picture><source srcset="form_4162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{A}$" src="form_4162.png"/></picture> based on a vector Laplace matrix, approximated the Schur complement <picture><source srcset="form_3325_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S = B A^{-1} B^T$" src="form_3325.png"/></picture> by a <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> <picture><source srcset="form_3348_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_p$" src="form_3348.png"/></picture> on the pressure space and wrote an <code>InverseMatrix</code> class for implementing the action of <picture><source srcset="form_4163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_p^{-1}\approx S^{-1}$" src="form_4163.png"/></picture> on vectors. In the InverseMatrix class, we used a CG solve with an incomplete Cholesky (IC) preconditioner for performing the inner solves.</p>
+<p>An observation one can make is that we use just the action of a preconditioner for approximating the velocity inverse <picture><source srcset="form_1914_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^{-1}$" src="form_1914.png"/></picture> (and the outer GMRES iteration takes care of the approximate character of the inverse), whereas we use a more or less <em>exact</em> inverse for <picture><source srcset="form_4164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_p^{-1}$" src="form_4164.png"/></picture>, realized by a fully converged CG solve. This appears unbalanced, but there's system to this madness: almost all the effort goes into the upper left block to which we apply the AMG preconditioner, whereas even an exact inversion of the pressure mass matrix costs basically nothing. Consequently, if it helps us reduce the overall number of iterations somewhat, then this effort is well spent.</p>
 <p>That said, even though the solver worked well for <a class="el" href="step_31.html">step-31</a>, we have a problem here that is a bit more complicated (cells are deformed, the pressure varies by orders of magnitude, and we want to plan ahead for more complicated physics), and so we'll change a few things slightly:</p>
 <ul>
 <li>For more complex problems, it turns out that using just a single AMG V-cycle as preconditioner is not always sufficient. The outer solver converges just fine most of the time in a reasonable number of iterations (say, less than 50) but there are the occasional time step where it suddenly takes 700 or so. What exactly is going on there is hard to determine, but the problem can be avoided by using a more accurate solver for the top left block. Consequently, we'll want to use a CG iteration to invert the top left block of the preconditioner matrix, and use the AMG as a preconditioner for the CG solver.</li>
 <li>The downside of this is that, of course, the Stokes preconditioner becomes much more expensive (approximately 10 times more expensive than when we just use a single V-cycle). Our strategy then is this: let's do up to 30 GMRES iterations with just the V-cycle as a preconditioner and if that doesn't yield convergence, then take the best approximation of the Stokes solution obtained after this first round of iterations and use that as the starting guess for iterations where we use the full inner solver with a rather lenient tolerance as preconditioner. In all our experiments this leads to convergence in only a few additional iterations.</li>
-<li>One thing we need to pay attention to is that when using a CG with a lenient tolerance in the preconditioner, then <picture><source srcset="form_4492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = \tilde A^{-1} r$" src="form_4492.png"/></picture> is no longer a linear function of <picture><source srcset="form_414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_414.png"/></picture> (it is, of course, if we have a very stringent tolerance in our solver, or if we only apply a single V-cycle). This is a problem since now our preconditioner is no longer a linear operator; in other words, every time GMRES uses it the preconditioner looks different. The standard GMRES solver can't deal with this, leading to slow convergence or even breakdown, but the F-GMRES variant is designed to deal with exactly this kind of situation and we consequently use it.</li>
-<li>On the other hand, once we have settled on using F-GMRES we can relax the tolerance used in inverting the preconditioner for <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>. In <a class="el" href="step_31.html">step-31</a>, we ran a preconditioned CG method on <picture><source srcset="form_3283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde S$" src="form_3283.png"/></picture> until the residual had been reduced by 7 orders of magnitude. Here, we can again be more lenient because we know that the outer preconditioner doesn't suffer.</li>
+<li>One thing we need to pay attention to is that when using a CG with a lenient tolerance in the preconditioner, then <picture><source srcset="form_4165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = \tilde A^{-1} r$" src="form_4165.png"/></picture> is no longer a linear function of <picture><source srcset="form_378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_378.png"/></picture> (it is, of course, if we have a very stringent tolerance in our solver, or if we only apply a single V-cycle). This is a problem since now our preconditioner is no longer a linear operator; in other words, every time GMRES uses it the preconditioner looks different. The standard GMRES solver can't deal with this, leading to slow convergence or even breakdown, but the F-GMRES variant is designed to deal with exactly this kind of situation and we consequently use it.</li>
+<li>On the other hand, once we have settled on using F-GMRES we can relax the tolerance used in inverting the preconditioner for <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>. In <a class="el" href="step_31.html">step-31</a>, we ran a preconditioned CG method on <picture><source srcset="form_3140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde S$" src="form_3140.png"/></picture> until the residual had been reduced by 7 orders of magnitude. Here, we can again be more lenient because we know that the outer preconditioner doesn't suffer.</li>
 <li>In <a class="el" href="step_31.html">step-31</a>, we used a left preconditioner in which we first invert the top left block of the preconditioner matrix, then apply the bottom left (divergence) one, and then invert the bottom right. In other words, the application of the preconditioner acts as a lower left block triangular matrix. Another option is to use a right preconditioner that here would be upper right block triangulation, i.e., we first invert the bottom right Schur complement, apply the top right (gradient) operator and then invert the elliptic top left block. To a degree, which one to choose is a matter of taste. That said, there is one significant advantage to a right preconditioner in GMRES-type solvers: the residual with which we determine whether we should stop the iteration is the true residual, not the norm of the preconditioned equations. Consequently, it is much simpler to compare it to the stopping criterion we typically use, namely the norm of the right hand side vector. In writing this code we found that the scaling issues we discussed above also made it difficult to determine suitable stopping criteria for left-preconditioned linear systems, and consequently this program uses a right preconditioner.</li>
 <li>In <a class="el" href="step_31.html">step-31</a>, we used an IC (incomplete Cholesky) preconditioner for the pressure mass matrix in the Schur complement preconditioner and for the solution of the temperature system. Here, we could in principle do the same, but we do choose an even simpler preconditioner, namely a Jacobi preconditioner for both systems. This is because here we target at massively parallel computations, where the decompositions for IC/ILU would have to be performed block-wise for the locally owned degrees of freedom on each processor. This means, that the preconditioner gets more like a Jacobi preconditioner anyway, so we rather start from that variant straight away. Note that we only use the Jacobi preconditioners for CG solvers with mass matrices, where they give optimal (<em>h</em>-independent) convergence anyway, even though they usually require about twice as many iterations as an IC preconditioner.</li>
 </ul>
-<p>As a final note, let us remark that in <a class="el" href="step_31.html">step-31</a> we computed the Schur complement <picture><source srcset="form_3456_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S=B A^{-1} B^T$" src="form_3456.png"/></picture> by approximating <picture><source srcset="form_4493_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\text{div}(-\eta\Delta)^{-1}\nabla \approx \frac 1{\eta} \mathbf{1}$" src="form_4493.png"/></picture>. Now, however, we have re-scaled the <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> and <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B^T$" src="form_103.png"/></picture> operators. So <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> should now approximate  <picture><source srcset="form_4494_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\frac{\eta}{L}\text{div}(-\eta\Delta)^{-1}\nabla \frac{\eta}{L} \approx
-\left(\frac{\eta}{L}\right)^2 \frac 1{\eta} \mathbf{1}$" src="form_4494.png"/></picture>. We use the discrete form of the right hand side of this as our approximation <picture><source srcset="form_3283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde S$" src="form_3283.png"/></picture> to <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>.</p>
+<p>As a final note, let us remark that in <a class="el" href="step_31.html">step-31</a> we computed the Schur complement <picture><source srcset="form_3320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S=B A^{-1} B^T$" src="form_3320.png"/></picture> by approximating <picture><source srcset="form_4166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\text{div}(-\eta\Delta)^{-1}\nabla \approx \frac 1{\eta} \mathbf{1}$" src="form_4166.png"/></picture>. Now, however, we have re-scaled the <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> and <picture><source srcset="form_96_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B^T$" src="form_96.png"/></picture> operators. So <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> should now approximate  <picture><source srcset="form_4167_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\frac{\eta}{L}\text{div}(-\eta\Delta)^{-1}\nabla \frac{\eta}{L} \approx
+\left(\frac{\eta}{L}\right)^2 \frac 1{\eta} \mathbf{1}$" src="form_4167.png"/></picture>. We use the discrete form of the right hand side of this as our approximation <picture><source srcset="form_3140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde S$" src="form_3140.png"/></picture> to <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>.</p>
 <p><a class="anchor" id="Changestotheartificialviscositystabilization"></a></p><h3>Changes to the artificial viscosity stabilization </h3>
-<p>Similarly to <a class="el" href="step_31.html">step-31</a>, we will use an artificial viscosity for stabilization based on a residual of the equation. As a difference to <a class="el" href="step_31.html">step-31</a>, we will provide two slightly different definitions of the stabilization parameter. For <picture><source srcset="form_2862_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha=1$" src="form_2862.png"/></picture>, we use the same definition as in <a class="el" href="step_31.html">step-31</a>:  </p><p class="formulaDsp">
-<picture><source srcset="form_4495_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>Similarly to <a class="el" href="step_31.html">step-31</a>, we will use an artificial viscosity for stabilization based on a residual of the equation. As a difference to <a class="el" href="step_31.html">step-31</a>, we will provide two slightly different definitions of the stabilization parameter. For <picture><source srcset="form_2903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha=1$" src="form_2903.png"/></picture>, we use the same definition as in <a class="el" href="step_31.html">step-31</a>:  </p><p class="formulaDsp">
+<picture><source srcset="form_4168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \nu_\alpha(T)|_K
   =
   \nu_1(T)|_K
@@ -325,76 +325,76 @@
     1,
     \frac{\|R_1(T)\|_{L^\infty(K)}}{c(\mathbf{u},T)}
   \right\}
-\end{eqnarray*}" src="form_4495.png"/></picture>
+\end{eqnarray*}" src="form_4168.png"/></picture>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_33.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_33.html	2024-03-17 21:57:45.599247614 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_33.html	2024-03-17 21:57:45.611247689 +0000
@@ -166,16 +166,16 @@
 <p><a class="anchor" id="Introduction"></a><a class="anchor" id="Intro"></a> </p><h1>Introduction</h1>
 <p><a class="anchor" id="Eulerflow"></a></p><h3>Euler flow</h3>
 <p>The equations that describe the movement of a compressible, inviscid gas (the so-called Euler equations of gas dynamics) are a basic system of conservation laws. In spatial dimension <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> they read  </p><p class="formulaDsp">
-<picture><source srcset="form_4158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \partial_t \mathbf{w} + \nabla \cdot \mathbf{F}(\mathbf{w}) =
 \mathbf{G}(\mathbf w),
-\]" src="form_4158.png"/></picture>
+\]" src="form_4265.png"/></picture>
 </p>
-<p> with the solution <picture><source srcset="form_4159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}=(\rho v_1,\ldots,\rho v_d,\rho,
-E)^{\top}$" src="form_4159.png"/></picture> consisting of <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture> the fluid density, <picture><source srcset="form_4160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}=(v_1,\ldots v_d)^T$" src="form_4160.png"/></picture> the flow velocity (and thus <picture><source srcset="form_4161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho\mathbf v$" src="form_4161.png"/></picture> being the linear momentum density), and <picture><source srcset="form_1117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E$" src="form_1117.png"/></picture> the energy density of the gas. We interpret the equations above as  <picture><source srcset="form_4162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_t \mathbf{w}_i + \nabla \cdot \mathbf{F}_i(\mathbf{w}) = \mathbf
-G_i(\mathbf w)$" src="form_4162.png"/></picture>, <picture><source srcset="form_4163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i=1,\ldots,dim+2$" src="form_4163.png"/></picture>.</p>
-<p>For the Euler equations, the flux matrix <picture><source srcset="form_224_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F$" src="form_224.png"/></picture> (or system of flux functions) is defined as (shown here for the case <picture><source srcset="form_4164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=3$" src="form_4164.png"/></picture>)  </p><p class="formulaDsp">
-<picture><source srcset="form_4165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> with the solution <picture><source srcset="form_4266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}=(\rho v_1,\ldots,\rho v_d,\rho,
+E)^{\top}$" src="form_4266.png"/></picture> consisting of <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture> the fluid density, <picture><source srcset="form_4267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}=(v_1,\ldots v_d)^T$" src="form_4267.png"/></picture> the flow velocity (and thus <picture><source srcset="form_4268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho\mathbf v$" src="form_4268.png"/></picture> being the linear momentum density), and <picture><source srcset="form_1123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E$" src="form_1123.png"/></picture> the energy density of the gas. We interpret the equations above as  <picture><source srcset="form_4269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_t \mathbf{w}_i + \nabla \cdot \mathbf{F}_i(\mathbf{w}) = \mathbf
+G_i(\mathbf w)$" src="form_4269.png"/></picture>, <picture><source srcset="form_4270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i=1,\ldots,dim+2$" src="form_4270.png"/></picture>.</p>
+<p>For the Euler equations, the flux matrix <picture><source srcset="form_198_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F$" src="form_198.png"/></picture> (or system of flux functions) is defined as (shown here for the case <picture><source srcset="form_4271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=3$" src="form_4271.png"/></picture>)  </p><p class="formulaDsp">
+<picture><source srcset="form_4272_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \mathbf F(\mathbf w)
   =
   \left(
@@ -187,10 +187,10 @@
     (E+p) v_1 &amp; (E+p) v_2 &amp; (E+p) v_3
   \end{array}
   \right),
-\end{eqnarray*}" src="form_4165.png"/></picture>
+\end{eqnarray*}" src="form_4272.png"/></picture>
 </p>
 <p> and we will choose as particular right hand side forcing only the effects of gravity, described by  </p><p class="formulaDsp">
-<picture><source srcset="form_4169_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_4273_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \mathbf G(\mathbf w)
   =
   \left(
@@ -202,43 +202,43 @@
     \rho \mathbf g \cdot \mathbf v
   \end{array}
   \right),
-\end{eqnarray*}" src="form_4169.png"/></picture>
+\end{eqnarray*}" src="form_4273.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_4170_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf g=(g_1,g_2,g_3)^T$" src="form_4170.png"/></picture> denotes the gravity vector. With this, the entire system of equations reads:  </p><p class="formulaDsp">
-<picture><source srcset="form_4172_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> where <picture><source srcset="form_4274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf g=(g_1,g_2,g_3)^T$" src="form_4274.png"/></picture> denotes the gravity vector. With this, the entire system of equations reads:  </p><p class="formulaDsp">
+<picture><source srcset="form_4275_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \partial_t (\rho v_i) + \sum_{s=1}^d \frac{\partial(\rho v_i v_s +
   \delta_{is} p)}{\partial x_s} &amp;=&amp; g_i \rho, \qquad i=1,\dots,d, \\
   \partial_t \rho + \sum_{s=1}^d \frac{\partial(\rho v_s)}{\partial x_s} &amp;=&amp; 0,  \\
   \partial_t E + \sum_{s=1}^d \frac{\partial((E+p)v_s)}{\partial x_s} &amp;=&amp;
   \rho \mathbf g \cdot \mathbf v.
-\end{eqnarray*}" src="form_4172.png"/></picture>
+\end{eqnarray*}" src="form_4275.png"/></picture>
 </p>
-<p> These equations describe, respectively, the conservation of momentum, mass, and energy. The system is closed by a relation that defines the pressure: <picture><source srcset="form_4173_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p =
-(\gamma -1)(E-\frac{1}{2} \rho |\mathbf v|^2)$" src="form_4173.png"/></picture>. For the constituents of air (mainly nitrogen and oxygen) and other diatomic gases, the ratio of specific heats is <picture><source srcset="form_4174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma=1.4$" src="form_4174.png"/></picture>.</p>
+<p> These equations describe, respectively, the conservation of momentum, mass, and energy. The system is closed by a relation that defines the pressure: <picture><source srcset="form_4276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p =
+(\gamma -1)(E-\frac{1}{2} \rho |\mathbf v|^2)$" src="form_4276.png"/></picture>. For the constituents of air (mainly nitrogen and oxygen) and other diatomic gases, the ratio of specific heats is <picture><source srcset="form_4277_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma=1.4$" src="form_4277.png"/></picture>.</p>
 <p>This problem obviously falls into the class of vector-valued problems. A general overview of how to deal with these problems in deal.II can be found in the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> module.</p>
 <p><a class="anchor" id="Discretization"></a></p><h3>Discretization</h3>
-<p>Discretization happens in the usual way, taking into account that this is a hyperbolic problem in the same style as the simple one discussed in <a class="el" href="step_12.html">step-12</a>: We choose a finite element space <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture>, and integrate our conservation law against our (vector-valued) test function <picture><source srcset="form_4175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{z} \in V_h$" src="form_4175.png"/></picture>. We then integrate by parts and approximate the boundary flux with a <em> numerical </em> flux <picture><source srcset="form_4176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}$" src="form_4176.png"/></picture>,  </p><p class="formulaDsp">
-<picture><source srcset="form_4177_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>Discretization happens in the usual way, taking into account that this is a hyperbolic problem in the same style as the simple one discussed in <a class="el" href="step_12.html">step-12</a>: We choose a finite element space <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture>, and integrate our conservation law against our (vector-valued) test function <picture><source srcset="form_4278_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{z} \in V_h$" src="form_4278.png"/></picture>. We then integrate by parts and approximate the boundary flux with a <em> numerical </em> flux <picture><source srcset="form_4279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}$" src="form_4279.png"/></picture>,  </p><p class="formulaDsp">
+<picture><source srcset="form_4280_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 &amp;&amp;\int_{\Omega} (\partial_t \mathbf{w}, \mathbf{z}) + (\nabla \cdot \mathbf{F}(\mathbf{w}), \mathbf{z}) \\
 &amp;\approx &amp;\int_{\Omega} (\partial_t \mathbf{w}, \mathbf{z}) - (\mathbf{F}(\mathbf{w}), \nabla \mathbf{z}) + h^{\eta}(\nabla \mathbf{w} , \nabla \mathbf{z}) + \int_{\partial \Omega} (\mathbf{H}(\mathbf{w}^+, \mathbf{w}^-, \mathbf{n}), \mathbf{z}^+),
-\end{eqnarray*}" src="form_4177.png"/></picture>
+\end{eqnarray*}" src="form_4280.png"/></picture>
 </p>
-<p> where a superscript <picture><source srcset="form_4178_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$+$" src="form_4178.png"/></picture> denotes the interior trace of a function, and <picture><source srcset="form_4179_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-$" src="form_4179.png"/></picture> represents the outer trace. The diffusion term <picture><source srcset="form_4180_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{\eta}(\nabla \mathbf{w} , \nabla \mathbf{z})$" src="form_4180.png"/></picture> is introduced strictly for stability, where <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> is the mesh size and <picture><source srcset="form_2182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2182.png"/></picture> is a parameter prescribing how much diffusion to add.</p>
-<p>On the boundary, we have to say what the outer trace <picture><source srcset="form_4181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}^-$" src="form_4181.png"/></picture> is. Depending on the boundary condition, we prescribe either of the following: </p><ul>
+<p> where a superscript <picture><source srcset="form_4281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$+$" src="form_4281.png"/></picture> denotes the interior trace of a function, and <picture><source srcset="form_4282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-$" src="form_4282.png"/></picture> represents the outer trace. The diffusion term <picture><source srcset="form_4283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^{\eta}(\nabla \mathbf{w} , \nabla \mathbf{z})$" src="form_4283.png"/></picture> is introduced strictly for stability, where <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> is the mesh size and <picture><source srcset="form_2162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2162.png"/></picture> is a parameter prescribing how much diffusion to add.</p>
+<p>On the boundary, we have to say what the outer trace <picture><source srcset="form_4284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}^-$" src="form_4284.png"/></picture> is. Depending on the boundary condition, we prescribe either of the following: </p><ul>
 <li>
-Inflow boundary: <picture><source srcset="form_4181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}^-$" src="form_4181.png"/></picture> is prescribed to be the desired value. </li>
+Inflow boundary: <picture><source srcset="form_4284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}^-$" src="form_4284.png"/></picture> is prescribed to be the desired value. </li>
 <li>
-Supersonic outflow boundary: <picture><source srcset="form_4182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}^- = \mathbf{w}^+$" src="form_4182.png"/></picture> </li>
+Supersonic outflow boundary: <picture><source srcset="form_4285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}^- = \mathbf{w}^+$" src="form_4285.png"/></picture> </li>
 <li>
-Subsonic outflow boundary: <picture><source srcset="form_4182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}^- = \mathbf{w}^+$" src="form_4182.png"/></picture> except that the energy variable is modified to support a prescribed pressure <picture><source srcset="form_4183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_o$" src="form_4183.png"/></picture>, i.e. <picture><source srcset="form_4184_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}^- =(\rho^+, \rho v_1^+, \dots, \rho v_d^+, p_o/(\gamma -1) + 0.5 \rho |\mathbf{v}^+|^2)$" src="form_4184.png"/></picture> </li>
+Subsonic outflow boundary: <picture><source srcset="form_4285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}^- = \mathbf{w}^+$" src="form_4285.png"/></picture> except that the energy variable is modified to support a prescribed pressure <picture><source srcset="form_4286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_o$" src="form_4286.png"/></picture>, i.e. <picture><source srcset="form_4287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}^- =(\rho^+, \rho v_1^+, \dots, \rho v_d^+, p_o/(\gamma -1) + 0.5 \rho |\mathbf{v}^+|^2)$" src="form_4287.png"/></picture> </li>
 <li>
-Reflective boundary: we set <picture><source srcset="form_4181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}^-$" src="form_4181.png"/></picture> so that <picture><source srcset="form_4185_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{v}^+ + \mathbf{v}^-) \cdot \mathbf{n} = 0$" src="form_4185.png"/></picture> and <picture><source srcset="form_4186_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho^- = \rho^+,E^-=E^+$" src="form_4186.png"/></picture>. </li>
+Reflective boundary: we set <picture><source srcset="form_4284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}^-$" src="form_4284.png"/></picture> so that <picture><source srcset="form_4288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{v}^+ + \mathbf{v}^-) \cdot \mathbf{n} = 0$" src="form_4288.png"/></picture> and <picture><source srcset="form_4289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho^- = \rho^+,E^-=E^+$" src="form_4289.png"/></picture>. </li>
 </ul>
 <p>More information on these issues can be found, for example, in Ralf Hartmann's PhD thesis ("Adaptive Finite Element Methods for the
 Compressible Euler Equations", PhD thesis, University of Heidelberg, 2002).</p>
-<p>We use a time stepping scheme to substitute the time derivative in the above equations. For simplicity, we define <picture><source srcset="form_4188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf{B}({\mathbf{w}_{n}})(\mathbf z) $" src="form_4188.png"/></picture> as the spatial residual at time step <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> :</p>
+<p>We use a time stepping scheme to substitute the time derivative in the above equations. For simplicity, we define <picture><source srcset="form_4290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf{B}({\mathbf{w}_{n}})(\mathbf z) $" src="form_4290.png"/></picture> as the spatial residual at time step <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> :</p>
 <p class="formulaDsp">
-<picture><source srcset="form_4190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_4291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
  \mathbf{B}(\mathbf{w}_{n})(\mathbf z)  &amp;=&amp;
 - \int_{\Omega} \left(\mathbf{F}(\mathbf{w}_n),
 \nabla\mathbf{z}\right) +  h^{\eta}(\nabla \mathbf{w}_n , \nabla \mathbf{z}) \\
@@ -248,43 +248,43 @@
 -
 \int_{\Omega} \left(\mathbf{G}(\mathbf{w}_n),
 \mathbf{z}\right) .
-\end{eqnarray*}" src="form_4190.png"/></picture>
+\end{eqnarray*}" src="form_4291.png"/></picture>
 </p>
-<p>At each time step, our full discretization is thus that the residual applied to any test function <picture><source srcset="form_4191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf z$" src="form_4191.png"/></picture> equals zero:  </p><p class="formulaDsp">
-<picture><source srcset="form_4192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>At each time step, our full discretization is thus that the residual applied to any test function <picture><source srcset="form_4292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf z$" src="form_4292.png"/></picture> equals zero:  </p><p class="formulaDsp">
+<picture><source srcset="form_4293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 R(\mathbf{W}_{n+1})(\mathbf z) &amp;=&amp;
 \int_{\Omega} \left(\frac{{\mathbf w}_{n+1} - \mathbf{w}_n}{\delta t},
 \mathbf{z}\right)+
 \theta \mathbf{B}({\mathbf{w}}_{n+1}) +  (1-\theta) \mathbf{B}({\mathbf w}_{n}) \\
 &amp;=&amp; 0
-\end{eqnarray*}" src="form_4192.png"/></picture>
+\end{eqnarray*}" src="form_4293.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_4193_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \theta \in [0,1] $" src="form_4193.png"/></picture> and <picture><source srcset="form_4194_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}_i = \sum_k \mathbf{W}_i^k \mathbf{\phi}_k$" src="form_4194.png"/></picture>. Choosing <picture><source srcset="form_3202_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=0$" src="form_3202.png"/></picture> results in the explicit (forward) Euler scheme, <picture><source srcset="form_3205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=1$" src="form_3205.png"/></picture> in the stable implicit (backward) Euler scheme, and <picture><source srcset="form_3208_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=\frac 12$" src="form_3208.png"/></picture> in the Crank-Nicolson scheme.</p>
-<p>In the implementation below, we choose the Lax-Friedrichs flux for the function <picture><source srcset="form_4196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf H$" src="form_4196.png"/></picture>, i.e. <picture><source srcset="form_4197_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}(\mathbf{a},\mathbf{b},\mathbf{n}) =
+<p> where <picture><source srcset="form_4294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \theta \in [0,1] $" src="form_4294.png"/></picture> and <picture><source srcset="form_4295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}_i = \sum_k \mathbf{W}_i^k \mathbf{\phi}_k$" src="form_4295.png"/></picture>. Choosing <picture><source srcset="form_3365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=0$" src="form_3365.png"/></picture> results in the explicit (forward) Euler scheme, <picture><source srcset="form_3367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=1$" src="form_3367.png"/></picture> in the stable implicit (backward) Euler scheme, and <picture><source srcset="form_3369_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=\frac 12$" src="form_3369.png"/></picture> in the Crank-Nicolson scheme.</p>
+<p>In the implementation below, we choose the Lax-Friedrichs flux for the function <picture><source srcset="form_4296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf H$" src="form_4296.png"/></picture>, i.e. <picture><source srcset="form_4297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}(\mathbf{a},\mathbf{b},\mathbf{n}) =
 \frac{1}{2}(\mathbf{F}(\mathbf{a})\cdot \mathbf{n} +
-\mathbf{F}(\mathbf{b})\cdot \mathbf{n} + \alpha (\mathbf{a} - \mathbf{b}))$" src="form_4197.png"/></picture>, where <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> is either a fixed number specified in the input file, or where <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> is a mesh dependent value. In the latter case, it is chosen as <picture><source srcset="form_4198_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{h}{2\delta T}$" src="form_4198.png"/></picture> with <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> the diameter of the face to which the flux is applied, and <picture><source srcset="form_4060_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta T$" src="form_4060.png"/></picture> the current time step.</p>
-<p>With these choices, equating the residual to zero results in a nonlinear system of equations <picture><source srcset="form_4200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R(\mathbf{W}_{n+1})=0$" src="form_4200.png"/></picture>. We solve this nonlinear system by a Newton iteration (in the same way as explained in <a class="el" href="step_15.html">step-15</a>), i.e. by iterating  </p><p class="formulaDsp">
-<picture><source srcset="form_4201_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+\mathbf{F}(\mathbf{b})\cdot \mathbf{n} + \alpha (\mathbf{a} - \mathbf{b}))$" src="form_4297.png"/></picture>, where <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> is either a fixed number specified in the input file, or where <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> is a mesh dependent value. In the latter case, it is chosen as <picture><source srcset="form_4298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{h}{2\delta T}$" src="form_4298.png"/></picture> with <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> the diameter of the face to which the flux is applied, and <picture><source srcset="form_3949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta T$" src="form_3949.png"/></picture> the current time step.</p>
+<p>With these choices, equating the residual to zero results in a nonlinear system of equations <picture><source srcset="form_4299_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R(\mathbf{W}_{n+1})=0$" src="form_4299.png"/></picture>. We solve this nonlinear system by a Newton iteration (in the same way as explained in <a class="el" href="step_15.html">step-15</a>), i.e. by iterating  </p><p class="formulaDsp">
+<picture><source srcset="form_4300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 R'(\mathbf{W}^k_{n+1},\delta \mathbf{W}_{n+1}^k)(\mathbf z) &amp; = &amp; -
 R(\mathbf{W}^{k}_{n+1})(\mathbf z) \qquad \qquad \forall \mathbf z\in V_h \\
 \mathbf{W}^{k+1}_{n+1} &amp;=&amp; \mathbf{W}^k_{n+1} + \delta \mathbf{W}^k_{n+1},
-\end{eqnarray*}" src="form_4201.png"/></picture>
+\end{eqnarray*}" src="form_4300.png"/></picture>
 </p>
-<p> until <picture><source srcset="form_4202_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|R(\mathbf{W}^k_{n+1})|$" src="form_4202.png"/></picture> (the residual) is sufficiently small. By testing with the nodal basis of a finite element space instead of all <picture><source srcset="form_4191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf z$" src="form_4191.png"/></picture>, we arrive at a linear system for <picture><source srcset="form_4203_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta \mathbf W$" src="form_4203.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_4204_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> until <picture><source srcset="form_4301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|R(\mathbf{W}^k_{n+1})|$" src="form_4301.png"/></picture> (the residual) is sufficiently small. By testing with the nodal basis of a finite element space instead of all <picture><source srcset="form_4292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf z$" src="form_4292.png"/></picture>, we arrive at a linear system for <picture><source srcset="form_4302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta \mathbf W$" src="form_4302.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_4303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \mathbf R'(\mathbf{W}^k_{n+1})\delta \mathbf{W}^k_{n+1} &amp; = &amp; -
 \mathbf R(\mathbf{W}^{k}_{n+1}).
-\end{eqnarray*}" src="form_4204.png"/></picture>
+\end{eqnarray*}" src="form_4303.png"/></picture>
 </p>
 <p> This linear system is, in general, neither symmetric nor has any particular definiteness properties. We will either use a direct solver or Trilinos' GMRES implementation to solve it. As will become apparent from the <a href="#href_anchor">results shown below</a>, this fully implicit iteration converges very rapidly (typically in 3 steps) and with the quadratic convergence order expected from a Newton method.</p>
 <p><a class="anchor" id="Automaticdifferentiation"></a></p><h3>Automatic differentiation </h3>
-<p>Since computing the Jacobian matrix <picture><source srcset="form_4205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf R'(\mathbf W^k)$" src="form_4205.png"/></picture> is a terrible beast, we use an automatic differentiation package, Sacado, to do this. Sacado is a package within the <a href="http://trilinos.org" target="_top">Trilinos</a> framework and offers a C++ template class <code>Sacado::Fad::DFad</code> (<code>Fad</code> standing for "forward automatic
+<p>Since computing the Jacobian matrix <picture><source srcset="form_4304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf R'(\mathbf W^k)$" src="form_4304.png"/></picture> is a terrible beast, we use an automatic differentiation package, Sacado, to do this. Sacado is a package within the <a href="http://trilinos.org" target="_top">Trilinos</a> framework and offers a C++ template class <code>Sacado::Fad::DFad</code> (<code>Fad</code> standing for "forward automatic
 differentiation") that supports basic arithmetic operators and functions such as <code> sqrt, sin, cos, pow, </code> etc. In order to use this feature, one declares a collection of variables of this type and then denotes some of this collection as degrees of freedom, the rest of the variables being functions of the independent variables. These variables are used in an algorithm, and as the variables are used, their sensitivities with respect to the degrees of freedom are continuously updated.</p>
-<p>One can imagine that for the full Jacobian matrix as a whole, this could be prohibitively expensive: the number of independent variables are the <picture><source srcset="form_4206_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf W^k$" src="form_4206.png"/></picture>, the dependent variables the elements of the vector <picture><source srcset="form_4207_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf
-R(\mathbf W^k)$" src="form_4207.png"/></picture>. Both of these vectors can easily have tens of thousands of elements or more. However, it is important to note that not all elements of <picture><source srcset="form_4208_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf R$" src="form_4208.png"/></picture> depend on all elements of <picture><source srcset="form_4206_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf W^k$" src="form_4206.png"/></picture>: in fact, an entry in <picture><source srcset="form_4208_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf R$" src="form_4208.png"/></picture> only depends on an element of <picture><source srcset="form_4206_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf W^k$" src="form_4206.png"/></picture> if the two corresponding shape functions overlap and couple in the weak form.</p>
-<p>Specifically, it is wise to define a minimum set of independent AD variables that the residual on the current cell may possibly depend on: on every element, we define those variables as independent that correspond to the degrees of freedom defined on this cell (or, if we have to compute jump terms between cells, that correspond to degrees of freedom defined on either of the two adjacent cells), and the dependent variables are the elements of the local residual vector. Not doing this, i.e. defining <em>all</em> elements of <picture><source srcset="form_4206_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf W^k$" src="form_4206.png"/></picture> as independent, will result a very expensive computation of a lot of zeros: the elements of the local residual vector are independent of almost all elements of the solution vector, and consequently their derivatives are zero; however, trying to compute these zeros can easily take 90% or more of the compute time of the entire program, as shown in an experiment inadvertently made by a student a few years after this program was first written.</p>
-<p>Coming back to the question of computing the Jacobian automatically: The author has used this approach side by side with a hand coded Jacobian for the incompressible Navier-Stokes problem and found the Sacado approach to be just as fast as using a hand coded Jacobian, but infinitely simpler and less error prone: Since using the auto-differentiation requires only that one code the residual <picture><source srcset="form_4209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R(\mathbf{W})$" src="form_4209.png"/></picture>, ensuring code correctness and maintaining code becomes tremendously more simple &ndash; the Jacobian matrix <picture><source srcset="form_4210_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf R'$" src="form_4210.png"/></picture> is computed by essentially the same code that also computes the residual <picture><source srcset="form_4211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf
-R$" src="form_4211.png"/></picture>.</p>
+<p>One can imagine that for the full Jacobian matrix as a whole, this could be prohibitively expensive: the number of independent variables are the <picture><source srcset="form_4305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf W^k$" src="form_4305.png"/></picture>, the dependent variables the elements of the vector <picture><source srcset="form_4306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf
+R(\mathbf W^k)$" src="form_4306.png"/></picture>. Both of these vectors can easily have tens of thousands of elements or more. However, it is important to note that not all elements of <picture><source srcset="form_4307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf R$" src="form_4307.png"/></picture> depend on all elements of <picture><source srcset="form_4305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf W^k$" src="form_4305.png"/></picture>: in fact, an entry in <picture><source srcset="form_4307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf R$" src="form_4307.png"/></picture> only depends on an element of <picture><source srcset="form_4305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf W^k$" src="form_4305.png"/></picture> if the two corresponding shape functions overlap and couple in the weak form.</p>
+<p>Specifically, it is wise to define a minimum set of independent AD variables that the residual on the current cell may possibly depend on: on every element, we define those variables as independent that correspond to the degrees of freedom defined on this cell (or, if we have to compute jump terms between cells, that correspond to degrees of freedom defined on either of the two adjacent cells), and the dependent variables are the elements of the local residual vector. Not doing this, i.e. defining <em>all</em> elements of <picture><source srcset="form_4305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf W^k$" src="form_4305.png"/></picture> as independent, will result a very expensive computation of a lot of zeros: the elements of the local residual vector are independent of almost all elements of the solution vector, and consequently their derivatives are zero; however, trying to compute these zeros can easily take 90% or more of the compute time of the entire program, as shown in an experiment inadvertently made by a student a few years after this program was first written.</p>
+<p>Coming back to the question of computing the Jacobian automatically: The author has used this approach side by side with a hand coded Jacobian for the incompressible Navier-Stokes problem and found the Sacado approach to be just as fast as using a hand coded Jacobian, but infinitely simpler and less error prone: Since using the auto-differentiation requires only that one code the residual <picture><source srcset="form_4308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R(\mathbf{W})$" src="form_4308.png"/></picture>, ensuring code correctness and maintaining code becomes tremendously more simple &ndash; the Jacobian matrix <picture><source srcset="form_4309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf R'$" src="form_4309.png"/></picture> is computed by essentially the same code that also computes the residual <picture><source srcset="form_4310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf
+R$" src="form_4310.png"/></picture>.</p>
 <p>All this said, here's a very simple example showing how Sacado can be used:</p>
 <div class="fragment"><div class="line"><span class="preprocessor">#href_anchor"line"><span class="preprocessor">#include &lt;iostream&gt;</span></div>
 <div class="line"> </div>
@@ -307,8 +307,8 @@
 <div class="line">  std::cout &lt;&lt; <span class="stringliteral">&quot;dc/da = &quot;</span> &lt;&lt; derivs[0] &lt;&lt; <span class="stringliteral">&quot;, dc/db=&quot;</span> &lt;&lt; derivs[1] &lt;&lt; std::endl;</div>
 <div class="line"> </div>
 <div class="line">}</div>
-</div><!-- fragment --><p>The output are the derivatives <picture><source srcset="form_4212_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial c(a,b)}{\partial a},
-\frac{\partial c(a,b)}{\partial b}$" src="form_4212.png"/></picture> of <picture><source srcset="form_4213_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(a,b)=2a+\cos(ab)$" src="form_4213.png"/></picture> at <picture><source srcset="form_4214_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a=1,b=2$" src="form_4214.png"/></picture>.</p>
+</div><!-- fragment --><p>The output are the derivatives <picture><source srcset="form_4311_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{\partial c(a,b)}{\partial a},
+\frac{\partial c(a,b)}{\partial b}$" src="form_4311.png"/></picture> of <picture><source srcset="form_4312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(a,b)=2a+\cos(ab)$" src="form_4312.png"/></picture> at <picture><source srcset="form_4313_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a=1,b=2$" src="form_4313.png"/></picture>.</p>
 <p>It should be noted that Sacado provides more auto-differentiation capabilities than the small subset used in this program. However, understanding the example above is enough to understand the use of Sacado in this Euler flow program.</p>
 <p><a class="anchor" id="Trilinossolvers"></a></p><h3>Trilinos solvers </h3>
 <p>The program uses either the Aztec iterative solvers, or the Amesos sparse direct solver, both provided by the Trilinos package. This package is inherently designed to be used in a parallel program, however, it may be used in serial just as easily, as is done here. The Epetra package is the basic vector/matrix library upon which the solvers are built. This very powerful package can be used to describe the parallel distribution of a vector, and to define sparse matrices that operate on these vectors. Please view the commented code for more details on how these solvers are used within the example.</p>
@@ -325,8 +325,8 @@
 <p><a class="anchor" id="Implementation"></a></p><h3>Implementation</h3>
 <p>The implementation of this program is split into three essential parts: </p><ul>
 <li>
-<p class="startli">The <code>EulerEquations</code> class that encapsulates everything that completely describes the specifics of the Euler equations. This includes the flux matrix <picture><source srcset="form_4220_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F(\mathbf W)$" src="form_4220.png"/></picture>, the numerical flux <picture><source srcset="form_4221_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F(\mathbf
-  W^+,\mathbf W^-,\mathbf n)$" src="form_4221.png"/></picture>, the right hand side <picture><source srcset="form_4222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf G(\mathbf W)$" src="form_4222.png"/></picture>, boundary conditions, refinement indicators, postprocessing the output, and similar things that require knowledge of the meaning of the individual components of the solution vectors and the equations.</p>
+<p class="startli">The <code>EulerEquations</code> class that encapsulates everything that completely describes the specifics of the Euler equations. This includes the flux matrix <picture><source srcset="form_4314_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F(\mathbf W)$" src="form_4314.png"/></picture>, the numerical flux <picture><source srcset="form_4315_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F(\mathbf
+  W^+,\mathbf W^-,\mathbf n)$" src="form_4315.png"/></picture>, the right hand side <picture><source srcset="form_4316_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf G(\mathbf W)$" src="form_4316.png"/></picture>, boundary conditions, refinement indicators, postprocessing the output, and similar things that require knowledge of the meaning of the individual components of the solution vectors and the equations.</p>
 <p class="endli"></p>
 </li>
 <li>
@@ -435,12 +435,12 @@
 <div class="ttc" id="anamespaceDataComponentInterpretation_html_a0cd2da3afe902f9004c23a73dbcc8ab0a1f3cd50135818a6458f1d3ff7ea4bb51"><div class="ttname"><a href="namespaceDataComponentInterpretation.html#href_anchor">DataComponentInterpretation::component_is_scalar</a></div><div class="ttdeci">@ component_is_scalar</div><div class="ttdef"><b>Definition</b> <a href="data__component__interpretation_8h_source.html#href_anchor">data_component_interpretation.h:53</a></div></div>
 <div class="ttc" id="anamespaceDataComponentInterpretation_html_a0cd2da3afe902f9004c23a73dbcc8ab0aa783915dbc182d5a49e111815fd23fe0"><div class="ttname"><a href="namespaceDataComponentInterpretation.html#href_anchor">DataComponentInterpretation::component_is_part_of_vector</a></div><div class="ttdeci">@ component_is_part_of_vector</div><div class="ttdef"><b>Definition</b> <a href="data__component__interpretation_8h_source.html#href_anchor">data_component_interpretation.h:59</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="Transformationsbetweenvariables"></a> </p><h4>Transformations between variables</h4>
-<p>Next, we define the gas constant. We will set it to 1.4 in its definition immediately following the declaration of this class (unlike integer variables, like the ones above, static const floating point member variables cannot be initialized within the class declaration in C++). This value of 1.4 is representative of a gas that consists of molecules composed of two atoms, such as air which consists up to small traces almost entirely of <picture><source srcset="form_4227_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N_2$" src="form_4227.png"/></picture> and <picture><source srcset="form_4228_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O_2$" src="form_4228.png"/></picture>.</p>
+<p>Next, we define the gas constant. We will set it to 1.4 in its definition immediately following the declaration of this class (unlike integer variables, like the ones above, static const floating point member variables cannot be initialized within the class declaration in C++). This value of 1.4 is representative of a gas that consists of molecules composed of two atoms, such as air which consists up to small traces almost entirely of <picture><source srcset="form_4317_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N_2$" src="form_4317.png"/></picture> and <picture><source srcset="form_4318_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O_2$" src="form_4318.png"/></picture>.</p>
 <div class="fragment"><div class="line">      <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">double</span> gas_gamma;</div>
 <div class="line">  </div>
 <div class="line">  </div>
-</div><!-- fragment --><p>In the following, we will need to compute the kinetic energy and the pressure from a vector of conserved variables. This we can do based on the energy density and the kinetic energy <picture><source srcset="form_4229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 12 \rho |\mathbf v|^2
-   = \frac{|\rho \mathbf v|^2}{2\rho}$" src="form_4229.png"/></picture> (note that the independent variables contain the momentum components <picture><source srcset="form_4230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho v_i$" src="form_4230.png"/></picture>, not the velocities <picture><source srcset="form_1644_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_i$" src="form_1644.png"/></picture>).</p>
+</div><!-- fragment --><p>In the following, we will need to compute the kinetic energy and the pressure from a vector of conserved variables. This we can do based on the energy density and the kinetic energy <picture><source srcset="form_4319_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 12 \rho |\mathbf v|^2
+   = \frac{|\rho \mathbf v|^2}{2\rho}$" src="form_4319.png"/></picture> (note that the independent variables contain the momentum components <picture><source srcset="form_4320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho v_i$" src="form_4320.png"/></picture>, not the velocities <picture><source srcset="form_1647_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_i$" src="form_1647.png"/></picture>).</p>
 <div class="fragment"><div class="line">      <span class="keyword">template</span> &lt;<span class="keyword">typename</span> InputVector&gt;</div>
 <div class="line">      <span class="keyword">static</span> <span class="keyword">typename</span> InputVector::value_type</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_34.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_34.html	2024-03-17 21:57:45.699248232 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_34.html	2024-03-17 21:57:45.707248281 +0000
@@ -139,7 +139,7 @@
 <p><a class="anchor" id="Irrotationalflow"></a></p><h3>Irrotational flow </h3>
 <p>The incompressible motion of an inviscid fluid past a body (for example air past an airplane wing, or air or water past a propeller) is usually modeled by the Euler equations of fluid dynamics:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_3945_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4379_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \frac{\partial }{\partial t}\mathbf{v} + (\mathbf{v}\cdot\nabla)\mathbf{v}
   &amp;=
   -\frac{1}{\rho}\nabla p + \mathbf{g}
@@ -147,12 +147,12 @@
   \\
   \nabla \cdot \mathbf{v}&amp;=0
   &amp;\text{in } \mathbb{R}^n\backslash\Omega
-\end{align*}" src="form_3945.png"/></picture>
+\end{align*}" src="form_4379.png"/></picture>
 </p>
-<p> where the fluid density <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture> and the acceleration <picture><source srcset="form_3946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{g}$" src="form_3946.png"/></picture> due to external forces are given and the velocity <picture><source srcset="form_2461_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}$" src="form_2461.png"/></picture> and the pressure <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> are the unknowns. Here <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> is a closed bounded region representing the body around which the fluid moves.</p>
+<p> where the fluid density <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture> and the acceleration <picture><source srcset="form_3947_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{g}$" src="form_3947.png"/></picture> due to external forces are given and the velocity <picture><source srcset="form_2468_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}$" src="form_2468.png"/></picture> and the pressure <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> are the unknowns. Here <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> is a closed bounded region representing the body around which the fluid moves.</p>
 <p>The above equations can be derived from Navier-Stokes equations assuming that the effects due to viscosity are negligible compared to those due to the pressure gradient, inertial forces and the external forces. This is the opposite case of the Stokes equations discussed in <a class="el" href="step_22.html">step-22</a> which are the limit case of dominant viscosity, i.e. where the velocity is so small that inertia forces can be neglected. On the other hand, owing to the assumed incompressibility, the equations are not suited for very high speed gas flows where compressibility and the equation of state of the gas have to be taken into account, leading to the Euler equations of gas dynamics, a hyperbolic system.</p>
 <p>For the purpose of this tutorial program, we will consider only stationary flow without external forces:  </p><p class="formulaDsp">
-<picture><source srcset="form_3947_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4380_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   (\mathbf{v}\cdot\nabla)\mathbf{v}
   &amp;=
   -\frac{1}{\rho}\nabla p
@@ -160,159 +160,159 @@
   \\
   \nabla \cdot \mathbf{v}&amp;=0
   &amp;\text{in } \mathbb{R}^n\backslash\Omega
-\end{align*}" src="form_3947.png"/></picture>
+\end{align*}" src="form_4380.png"/></picture>
 </p>
 <p>Uniqueness of the solution of the Euler equations is ensured by adding the boundary conditions  </p><p class="formulaDsp">
-<picture><source srcset="form_3948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4381_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \label{eq:boundary-conditions}
   \begin{aligned}
     \mathbf{n}\cdot\mathbf{v}&amp; = 0 \qquad &amp;&amp; \text{ on } \partial\Omega \\
     \mathbf{v}&amp; = \mathbf{v}_\infty &amp;&amp; \text{ when } |\mathbf{x}| \to \infty,
   \end{aligned}
-\]" src="form_3948.png"/></picture>
+\]" src="form_4381.png"/></picture>
 </p>
-<p>which is to say that the body is at rest in our coordinate systems and is not permeable, and that the fluid has (constant) velocity <picture><source srcset="form_3949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}_\infty$" src="form_3949.png"/></picture> at infinity. An alternative viewpoint is that our coordinate system moves along with the body whereas the background fluid is at rest at infinity. Notice that we define the normal <picture><source srcset="form_2492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}$" src="form_2492.png"/></picture> as the <em>outer</em> normal to the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, which is the opposite of the outer normal to the integration domain.</p>
+<p>which is to say that the body is at rest in our coordinate systems and is not permeable, and that the fluid has (constant) velocity <picture><source srcset="form_4382_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}_\infty$" src="form_4382.png"/></picture> at infinity. An alternative viewpoint is that our coordinate system moves along with the body whereas the background fluid is at rest at infinity. Notice that we define the normal <picture><source srcset="form_2492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}$" src="form_2492.png"/></picture> as the <em>outer</em> normal to the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, which is the opposite of the outer normal to the integration domain.</p>
 <p>For both stationary and non stationary flow, the solution process starts by solving for the velocity in the second equation and substituting in the first equation in order to find the pressure. The solution of the stationary Euler equations is typically performed in order to understand the behavior of the given (possibly complex) geometry when a prescribed motion is enforced on the system.</p>
-<p>The first step in this process is to change the frame of reference from a coordinate system moving along with the body to one in which the body moves through a fluid that is at rest at infinity. This can be expressed by introducing a new velocity <picture><source srcset="form_3950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\tilde{v}}=\mathbf{v}-\mathbf{v}_\infty$" src="form_3950.png"/></picture> for which we find that the same equations hold (because <picture><source srcset="form_3951_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\cdot
-\mathbf{v}_\infty=0$" src="form_3951.png"/></picture>) and we have boundary conditions  </p><p class="formulaDsp">
-<picture><source srcset="form_3952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>The first step in this process is to change the frame of reference from a coordinate system moving along with the body to one in which the body moves through a fluid that is at rest at infinity. This can be expressed by introducing a new velocity <picture><source srcset="form_4383_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\tilde{v}}=\mathbf{v}-\mathbf{v}_\infty$" src="form_4383.png"/></picture> for which we find that the same equations hold (because <picture><source srcset="form_4384_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\cdot
+\mathbf{v}_\infty=0$" src="form_4384.png"/></picture>) and we have boundary conditions  </p><p class="formulaDsp">
+<picture><source srcset="form_4385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \label{eq:boundary-conditions-tilde}
   \begin{aligned}
     \mathbf{n}\cdot\mathbf{\tilde{v}}&amp; = -\mathbf{n}\cdot\mathbf{v}_\infty \qquad &amp;&amp; \text{ on } \partial\Omega \\
     \mathbf{\tilde{v}}&amp; = 0 &amp;&amp; \text{ when } |\mathbf{x}| \to \infty,
   \end{aligned}
-\]" src="form_3952.png"/></picture>
+\]" src="form_4385.png"/></picture>
 </p>
-<p>If we assume that the fluid is irrotational, i.e., <picture><source srcset="form_3953_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \times
-\mathbf{v}=0$" src="form_3953.png"/></picture> in <picture><source srcset="form_3954_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^n\backslash\Omega$" src="form_3954.png"/></picture>, we can represent the velocity, and consequently also the perturbation velocity, as the gradient of a scalar function:  </p><p class="formulaDsp">
-<picture><source srcset="form_3955_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>If we assume that the fluid is irrotational, i.e., <picture><source srcset="form_4386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \times
+\mathbf{v}=0$" src="form_4386.png"/></picture> in <picture><source srcset="form_4387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^n\backslash\Omega$" src="form_4387.png"/></picture>, we can represent the velocity, and consequently also the perturbation velocity, as the gradient of a scalar function:  </p><p class="formulaDsp">
+<picture><source srcset="form_4388_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf{\tilde{v}}=\nabla\phi,
-\]" src="form_3955.png"/></picture>
+\]" src="form_4388.png"/></picture>
 </p>
 <p> and so the second part of Euler equations above can be rewritten as the homogeneous Laplace equation for the unknown <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_3956_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 \label{laplace}
 \Delta\phi &amp;= 0 \qquad &amp;&amp;\text{in}\ \mathbb{R}^n\backslash\Omega,
            \\
            \mathbf{n}\cdot\nabla\phi &amp;= -\mathbf{n}\cdot\mathbf{v}_\infty
            &amp;&amp; \text{on}\ \partial\Omega
-\end{align*}" src="form_3956.png"/></picture>
+\end{align*}" src="form_4389.png"/></picture>
 </p>
-<p> while the momentum equation reduces to Bernoulli's equation that expresses the pressure <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> as a function of the potential <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_3957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> while the momentum equation reduces to Bernoulli's equation that expresses the pressure <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> as a function of the potential <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_4390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{p}{\rho} +\frac{1}{2} | \nabla \phi |^2 = 0 \in \Omega.
-\]" src="form_3957.png"/></picture>
+\]" src="form_4390.png"/></picture>
 </p>
 <p>So we can solve the problem by solving the Laplace equation for the potential. We recall that the following functions, called fundamental solutions of the Laplace equation,</p>
 <p class="formulaDsp">
-<picture><source srcset="form_3958_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \begin{aligned}
+<picture><source srcset="form_4391_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \begin{aligned}
 \label{eq:3} G(\mathbf{y}-\mathbf{x}) = &amp;
 -\frac{1}{2\pi}\ln|\mathbf{y}-\mathbf{x}| \qquad &amp;&amp; \text{for } n=2 \\
 G(\mathbf{y}-\mathbf{x}) = &amp;
 \frac{1}{4\pi}\frac{1}{|\mathbf{y}-\mathbf{x}|}&amp;&amp; \text{for } n=3,
 \end{aligned}
-\]" src="form_3958.png"/></picture>
+\]" src="form_4391.png"/></picture>
 </p>
 <p>satisfy in a distributional sense the equation:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_3959_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4392_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 -\Delta_y G(\mathbf{y}-\mathbf{x}) = \delta(\mathbf{y}-\mathbf{x}),
-\]" src="form_3959.png"/></picture>
+\]" src="form_4392.png"/></picture>
 </p>
-<p>where the derivative is done in the variable <picture><source srcset="form_3960_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{y}$" src="form_3960.png"/></picture>. By using the usual Green identities, our problem can be written on the boundary <picture><source srcset="form_3961_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega = \Gamma$" src="form_3961.png"/></picture> only. We recall the general definition of the second Green identity:</p>
+<p>where the derivative is done in the variable <picture><source srcset="form_4393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{y}$" src="form_4393.png"/></picture>. By using the usual Green identities, our problem can be written on the boundary <picture><source srcset="form_4394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega = \Gamma$" src="form_4394.png"/></picture> only. We recall the general definition of the second Green identity:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_3962_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[\label{green}
+<picture><source srcset="form_4395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[\label{green}
   \int_{\omega}
   (-\Delta u)v\,dx + \int_{\partial\omega} \frac{\partial u}{\partial \tilde{\mathbf{n}} }v \,ds
   =
   \int_{\omega}
   (-\Delta v)u\,dx + \int_{\partial\omega} u\frac{\partial v}{\partial \tilde{\mathbf{n}}} \,ds,
-\]" src="form_3962.png"/></picture>
+\]" src="form_4395.png"/></picture>
 </p>
-<p>where <picture><source srcset="form_3963_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\mathbf{n}}$" src="form_3963.png"/></picture> is the normal to the surface of <picture><source srcset="form_3735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega$" src="form_3735.png"/></picture> pointing outwards from the domain of integration <picture><source srcset="form_3735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega$" src="form_3735.png"/></picture>.</p>
-<p>In our case the domain of integration is the domain <picture><source srcset="form_3954_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^n\backslash\Omega$" src="form_3954.png"/></picture>, whose boundary is <picture><source srcset="form_3964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \Gamma_\infty \cup
-\Gamma$" src="form_3964.png"/></picture>, where the "boundary" at infinity is defined as</p>
+<p>where <picture><source srcset="form_4396_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\mathbf{n}}$" src="form_4396.png"/></picture> is the normal to the surface of <picture><source srcset="form_3839_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega$" src="form_3839.png"/></picture> pointing outwards from the domain of integration <picture><source srcset="form_3839_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega$" src="form_3839.png"/></picture>.</p>
+<p>In our case the domain of integration is the domain <picture><source srcset="form_4387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^n\backslash\Omega$" src="form_4387.png"/></picture>, whose boundary is <picture><source srcset="form_4397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \Gamma_\infty \cup
+\Gamma$" src="form_4397.png"/></picture>, where the "boundary" at infinity is defined as</p>
 <p class="formulaDsp">
-<picture><source srcset="form_3965_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \Gamma_\infty \dealcoloneq \lim_{r\to\infty} \partial B_r(0).
-\]" src="form_3965.png"/></picture>
+\]" src="form_4398.png"/></picture>
 </p>
-<p>In our program the normals are defined as <em>outer</em> to the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, that is, they are in fact <em>inner</em> to the integration domain, and some care is required in defining the various integrals with the correct signs for the normals, i.e. replacing <picture><source srcset="form_3963_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\mathbf{n}}$" src="form_3963.png"/></picture> by <picture><source srcset="form_3966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\mathbf{n}$" src="form_3966.png"/></picture>.</p>
-<p>If we substitute <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> and <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> in the Green identity with the solution <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> and with the fundamental solution of the Laplace equation respectively, as long as <picture><source srcset="form_247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}$" src="form_247.png"/></picture> is chosen in the region <picture><source srcset="form_3954_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^n\backslash\Omega$" src="form_3954.png"/></picture>, we obtain:  </p><p class="formulaDsp">
-<picture><source srcset="form_3967_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>In our program the normals are defined as <em>outer</em> to the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, that is, they are in fact <em>inner</em> to the integration domain, and some care is required in defining the various integrals with the correct signs for the normals, i.e. replacing <picture><source srcset="form_4396_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\mathbf{n}}$" src="form_4396.png"/></picture> by <picture><source srcset="form_4399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\mathbf{n}$" src="form_4399.png"/></picture>.</p>
+<p>If we substitute <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> and <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> in the Green identity with the solution <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> and with the fundamental solution of the Laplace equation respectively, as long as <picture><source srcset="form_247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}$" src="form_247.png"/></picture> is chosen in the region <picture><source srcset="form_4387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^n\backslash\Omega$" src="form_4387.png"/></picture>, we obtain:  </p><p class="formulaDsp">
+<picture><source srcset="form_4400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \phi(\mathbf{x}) -
   \int_{\Gamma\cup\Gamma_\infty}\frac{\partial G(\mathbf{y}-\mathbf{x})}{\partial \mathbf{n}_y}\phi(\mathbf{y})\,ds_y
   =
   -\int_{\Gamma\cup\Gamma_\infty}G(\mathbf{y}-\mathbf{x})\frac{\partial \phi}{\partial \mathbf{n}_y}(\mathbf{y})\,ds_y
   \qquad \forall\mathbf{x}\in \mathbb{R}^n\backslash\Omega
-\]" src="form_3967.png"/></picture>
+\]" src="form_4400.png"/></picture>
 </p>
 <p>where the normals are now pointing <em>inward</em> the domain of integration.</p>
-<p>Notice that in the above equation, we also have the integrals on the portion of the boundary at <picture><source srcset="form_3968_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_\infty$" src="form_3968.png"/></picture>. Using the boundary conditions of our problem, we have that <picture><source srcset="form_3969_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \phi$" src="form_3969.png"/></picture> is zero at infinity (which simplifies the integral on <picture><source srcset="form_3968_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_\infty$" src="form_3968.png"/></picture> on the right hand side).</p>
-<p>The integral on <picture><source srcset="form_3968_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_\infty$" src="form_3968.png"/></picture> that appears on the left hand side can be treated by observing that <picture><source srcset="form_3970_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\phi=0$" src="form_3970.png"/></picture> implies that <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> at infinity is necessarily constant. We define its value to be <picture><source srcset="form_3971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_\infty$" src="form_3971.png"/></picture>. It is an easy exercise to prove that</p>
+<p>Notice that in the above equation, we also have the integrals on the portion of the boundary at <picture><source srcset="form_4401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_\infty$" src="form_4401.png"/></picture>. Using the boundary conditions of our problem, we have that <picture><source srcset="form_4402_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \phi$" src="form_4402.png"/></picture> is zero at infinity (which simplifies the integral on <picture><source srcset="form_4401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_\infty$" src="form_4401.png"/></picture> on the right hand side).</p>
+<p>The integral on <picture><source srcset="form_4401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_\infty$" src="form_4401.png"/></picture> that appears on the left hand side can be treated by observing that <picture><source srcset="form_4403_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\phi=0$" src="form_4403.png"/></picture> implies that <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> at infinity is necessarily constant. We define its value to be <picture><source srcset="form_4404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_\infty$" src="form_4404.png"/></picture>. It is an easy exercise to prove that</p>
 <p class="formulaDsp">
-<picture><source srcset="form_3972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4405_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 -\int_{\Gamma_\infty} \frac{\partial G(\mathbf{y}-\mathbf{x})}
 {\partial \mathbf{n}_y}\phi_\infty \,ds_y =
 \lim_{r\to\infty} \int_{\partial B_r(0)} \frac{\mathbf{r}}{r} \cdot \nabla G(\mathbf{y}-\mathbf{x})
 \phi_\infty \,ds_y = -\phi_\infty.
-\]" src="form_3972.png"/></picture>
+\]" src="form_4405.png"/></picture>
 </p>
 <p>Using this result, we can reduce the above equation only on the boundary <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> using the so-called Single and Double Layer Potential operators:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_3973_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[\label{integral}
+<picture><source srcset="form_4406_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[\label{integral}
   \phi(\mathbf{x}) - (D\phi)(\mathbf{x}) = \phi_\infty
   -\left(S \frac{\partial \phi}{\partial n_y}\right)(\mathbf{x})
   \qquad \forall\mathbf{x}\in \mathbb{R}^n\backslash\Omega.
-\]" src="form_3973.png"/></picture>
+\]" src="form_4406.png"/></picture>
 </p>
-<p>(The name of these operators comes from the fact that they describe the electric potential in <picture><source srcset="form_2592_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^n$" src="form_2592.png"/></picture> due to a single thin sheet of charges along a surface, and due to a double sheet of charges and anti-charges along the surface, respectively.)</p>
-<p>In our case, we know the Neumann values of <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> on the boundary: <picture><source srcset="form_3974_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}\cdot\nabla\phi = -\mathbf{n}\cdot\mathbf{v}_\infty$" src="form_3974.png"/></picture>. Consequently,  </p><p class="formulaDsp">
-<picture><source srcset="form_3975_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>(The name of these operators comes from the fact that they describe the electric potential in <picture><source srcset="form_2613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^n$" src="form_2613.png"/></picture> due to a single thin sheet of charges along a surface, and due to a double sheet of charges and anti-charges along the surface, respectively.)</p>
+<p>In our case, we know the Neumann values of <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> on the boundary: <picture><source srcset="form_4407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}\cdot\nabla\phi = -\mathbf{n}\cdot\mathbf{v}_\infty$" src="form_4407.png"/></picture>. Consequently,  </p><p class="formulaDsp">
+<picture><source srcset="form_4408_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \phi(\mathbf{x}) - (D\phi)(\mathbf{x}) = \phi_\infty +
    \left(S[\mathbf{n}\cdot\mathbf{v}_\infty]\right)(\mathbf{x})
    \qquad \forall\mathbf{x} \in \mathbb{R}^n\backslash\Omega.
-\]" src="form_3975.png"/></picture>
+\]" src="form_4408.png"/></picture>
 </p>
-<p> If we take the limit for <picture><source srcset="form_247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}$" src="form_247.png"/></picture> tending to <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> of the above equation, using well known properties of the single and double layer operators, we obtain an equation for <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> just on the boundary <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> of <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>:</p>
+<p> If we take the limit for <picture><source srcset="form_247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}$" src="form_247.png"/></picture> tending to <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> of the above equation, using well known properties of the single and double layer operators, we obtain an equation for <picture><source srcset="form_467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi$" src="form_467.png"/></picture> just on the boundary <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> of <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_3976_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[\label{SD}
+<picture><source srcset="form_4409_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[\label{SD}
   \alpha(\mathbf{x})\phi(\mathbf{x}) - (D\phi)(\mathbf{x}) = \phi_\infty +
   \left(S [\mathbf{n}\cdot\mathbf{v}_\infty]\right)(\mathbf{x})
   \quad \mathbf{x}\in \partial\Omega,
-\]" src="form_3976.png"/></picture>
+\]" src="form_4409.png"/></picture>
 </p>
-<p>which is the Boundary Integral Equation (BIE) we were looking for, where the quantity <picture><source srcset="form_3977_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha(\mathbf{x})$" src="form_3977.png"/></picture> is the fraction of angle or solid angle by which the point <picture><source srcset="form_247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}$" src="form_247.png"/></picture> sees the domain of integration <picture><source srcset="form_3954_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^n\backslash\Omega$" src="form_3954.png"/></picture>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_35.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_35.html	2024-03-17 21:57:45.795248825 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_35.html	2024-03-17 21:57:45.799248850 +0000
@@ -139,57 +139,57 @@
 <p><a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction </h1>
 <p><a class="anchor" id="Motivation"></a> <a class="anchor" id="Motivation"></a></p><h3>Motivation </h3>
 <p>The purpose of this program is to show how to effectively solve the incompressible time-dependent Navier-Stokes equations. These equations describe the flow of a viscous incompressible fluid and read  </p><p class="formulaDsp">
-<picture><source srcset="form_4350_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4489_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   u_t + u \cdot \nabla u - \nu \Delta u + \nabla p = f, \\
   \nabla \cdot u = 0,
-\end{align*}" src="form_4350.png"/></picture>
+\end{align*}" src="form_4489.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> represents the velocity of the flow and <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> the pressure. This system of equations is supplemented by the initial condition  </p><p class="formulaDsp">
-<picture><source srcset="form_4351_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> represents the velocity of the flow and <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> the pressure. This system of equations is supplemented by the initial condition  </p><p class="formulaDsp">
+<picture><source srcset="form_4490_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   u |_{t=0} = u_0,
-\]" src="form_4351.png"/></picture>
+\]" src="form_4490.png"/></picture>
 </p>
-<p> with <picture><source srcset="form_2560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0$" src="form_2560.png"/></picture> sufficiently smooth and solenoidal, and suitable boundary conditions. For instance, an admissible boundary condition, is  </p><p class="formulaDsp">
-<picture><source srcset="form_4352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> with <picture><source srcset="form_2649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0$" src="form_2649.png"/></picture> sufficiently smooth and solenoidal, and suitable boundary conditions. For instance, an admissible boundary condition, is  </p><p class="formulaDsp">
+<picture><source srcset="form_4491_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   u|_{\partial\Omega} = u_b.
-\]" src="form_4352.png"/></picture>
+\]" src="form_4491.png"/></picture>
 </p>
-<p> It is possible to prescribe other boundary conditions as well. In the test case that we solve here the boundary is partitioned into two disjoint subsets <picture><source srcset="form_4353_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega = \Gamma_1 \cup \Gamma_2$" src="form_4353.png"/></picture> and we have  </p><p class="formulaDsp">
-<picture><source srcset="form_4354_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> It is possible to prescribe other boundary conditions as well. In the test case that we solve here the boundary is partitioned into two disjoint subsets <picture><source srcset="form_4492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega = \Gamma_1 \cup \Gamma_2$" src="form_4492.png"/></picture> and we have  </p><p class="formulaDsp">
+<picture><source srcset="form_4493_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   u|_{\Gamma_1} = u_b,
-\]" src="form_4354.png"/></picture>
+\]" src="form_4493.png"/></picture>
 </p>
 <p> and  </p><p class="formulaDsp">
-<picture><source srcset="form_4355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4494_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
  u\times n|_{\Gamma_2} = 0, \quad p|_{\Gamma_2} = 0
-\]" src="form_4355.png"/></picture>
+\]" src="form_4494.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> is the outer unit normal. The boundary conditions on <picture><source srcset="form_3732_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3732.png"/></picture> are often used to model outflow conditions.</p>
+<p> where <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> is the outer unit normal. The boundary conditions on <picture><source srcset="form_3836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3836.png"/></picture> are often used to model outflow conditions.</p>
 <p>In previous tutorial programs (see for instance <a class="el" href="step_20.html">step-20</a> and <a class="el" href="step_22.html">step-22</a>) we have seen how to solve the time-independent Stokes equations using a Schur complement approach. For the time-dependent case, after time discretization, we would arrive at a system like  </p><p class="formulaDsp">
-<picture><source srcset="form_4356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4495_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \frac1\tau u^k - \nu \Delta u^k + \nabla p^k = F^k, \\
   \nabla \cdot u^k = 0,
-\end{align*}" src="form_4356.png"/></picture>
+\end{align*}" src="form_4495.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture> is the time-step. Although the structure of this system is similar to the Stokes system and thus it could be solved using a Schur complement approach, it turns out that the condition number of the Schur complement is proportional to <picture><source srcset="form_4357_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau^{-2}$" src="form_4357.png"/></picture>. This makes the system very difficult to solve, and means that for the Navier-Stokes equations, this is not a useful avenue to the solution.</p>
+<p> where <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture> is the time-step. Although the structure of this system is similar to the Stokes system and thus it could be solved using a Schur complement approach, it turns out that the condition number of the Schur complement is proportional to <picture><source srcset="form_4496_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau^{-2}$" src="form_4496.png"/></picture>. This makes the system very difficult to solve, and means that for the Navier-Stokes equations, this is not a useful avenue to the solution.</p>
 <p><a class="anchor" id="Projection"></a> <a class="anchor" id="Projectionmethods"></a></p><h3>Projection methods </h3>
 <p>Rather, we need to come up with a different approach to solve the time-dependent Navier-Stokes equations. The difficulty in their solution comes from the fact that the velocity and the pressure are coupled through the constraint  </p><p class="formulaDsp">
-<picture><source srcset="form_4358_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4497_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \nabla \cdot u = 0,
-\]" src="form_4358.png"/></picture>
+\]" src="form_4497.png"/></picture>
 </p>
 <p> for which the pressure is the Lagrange multiplier. Projection methods aim at decoupling this constraint from the diffusion (Laplace) operator.</p>
-<p>Let us shortly describe how the projection methods look like in a semi-discrete setting. The objective is to obtain a sequence of velocities <picture><source srcset="form_4359_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{u^k\}$" src="form_4359.png"/></picture> and pressures <picture><source srcset="form_4360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{p^k\}$" src="form_4360.png"/></picture>. We will also obtain a sequence <picture><source srcset="form_4361_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\phi^k\}$" src="form_4361.png"/></picture> of auxiliary variables. Suppose that from the initial conditions, and an application of a first order method we have found <picture><source srcset="form_4362_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u^0,p^0,\phi^0=0)$" src="form_4362.png"/></picture> and <picture><source srcset="form_4363_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u^1,p^1,\phi^1=p^1-p^0)$" src="form_4363.png"/></picture>. Then the projection method consists of the following steps: </p><ul>
+<p>Let us shortly describe how the projection methods look like in a semi-discrete setting. The objective is to obtain a sequence of velocities <picture><source srcset="form_4498_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{u^k\}$" src="form_4498.png"/></picture> and pressures <picture><source srcset="form_4499_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{p^k\}$" src="form_4499.png"/></picture>. We will also obtain a sequence <picture><source srcset="form_4500_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\phi^k\}$" src="form_4500.png"/></picture> of auxiliary variables. Suppose that from the initial conditions, and an application of a first order method we have found <picture><source srcset="form_4501_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u^0,p^0,\phi^0=0)$" src="form_4501.png"/></picture> and <picture><source srcset="form_4502_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u^1,p^1,\phi^1=p^1-p^0)$" src="form_4502.png"/></picture>. Then the projection method consists of the following steps: </p><ul>
 <li>
 <b>Step 0</b>: Extrapolation. Define:  <p class="formulaDsp">
-<picture><source srcset="form_4364_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4503_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     u^\star = 2u^k - u^{k-1}, \quad p^\sharp = p^k + \frac43 \phi^k - \frac13 \phi^{k-1}.
-  \]" src="form_4364.png"/></picture>
+  \]" src="form_4503.png"/></picture>
 </p>
  </li>
 <li>
-<p class="startli"><b>Step 1</b>: Diffusion step. We find <picture><source srcset="form_4365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{k+1}$" src="form_4365.png"/></picture> that solves the single linear equation  </p><p class="formulaDsp">
-<picture><source srcset="form_4366_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p class="startli"><b>Step 1</b>: Diffusion step. We find <picture><source srcset="form_4504_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{k+1}$" src="form_4504.png"/></picture> that solves the single linear equation  </p><p class="formulaDsp">
+<picture><source srcset="form_4505_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     \frac1{2\tau}\left( 3u^{k+1} - 4u^k + u^{k-1} \right)
     + u^\star \cdot\nabla u^{k+1} + \frac12 \left( \nabla \cdot u^\star \right) u^{k+1}
     -\nu \Delta u^{k+1} + \nabla p^\sharp
@@ -198,35 +198,35 @@
     u^{k+1}|_{\Gamma_1} = u_b,
     \quad
     u^{k+1} \times n|_{\Gamma_2} = 0.
-  \]" src="form_4366.png"/></picture>
+  \]" src="form_4505.png"/></picture>
 </p>
 <p class="endli"></p>
 </li>
 <li>
-<b>Step 2</b>: Projection. Find <picture><source srcset="form_4367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi^{k+1}$" src="form_4367.png"/></picture> that solves  <p class="formulaDsp">
-<picture><source srcset="form_4368_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<b>Step 2</b>: Projection. Find <picture><source srcset="form_4506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi^{k+1}$" src="form_4506.png"/></picture> that solves  <p class="formulaDsp">
+<picture><source srcset="form_4507_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     \Delta \phi^{k+1} = \frac3{2\tau} \nabla \cdot u^{k+1},
     \quad
     \partial_n \phi^{k+1}|_{\Gamma_1} = 0,
     \quad
     \phi^{k+1}|_{\Gamma_2} = 0
-  \]" src="form_4368.png"/></picture>
+  \]" src="form_4507.png"/></picture>
 </p>
  </li>
 <li>
 <b>Step 3</b>: Pressure correction. Here we have two options: <ul>
 <li>
 <em>Incremental Method in Standard Form</em>. The pressure is updated by:  <p class="formulaDsp">
-<picture><source srcset="form_4369_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         p^{k+1} = p^k + \phi^{k+1}.
-      \]" src="form_4369.png"/></picture>
+      \]" src="form_4508.png"/></picture>
 </p>
  </li>
 <li>
 <em>Incremental Method in Rotational Form</em>. In this case  <p class="formulaDsp">
-<picture><source srcset="form_4370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4509_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         p^{k+1} = p^k + \phi^{k+1} - \nu \nabla \cdot u^{k+1}.
-      \]" src="form_4370.png"/></picture>
+      \]" src="form_4509.png"/></picture>
 </p>
  </li>
 </ul>
@@ -234,36 +234,36 @@
 </ul>
 <p>Without going into details, let us remark a few things about the projection methods that we have just described: </p><ul>
 <li>
-The advection term <picture><source srcset="form_4371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\cdot\nabla u$" src="form_4371.png"/></picture> is replaced by its <em>skew symmetric form</em>  <p class="formulaDsp">
-<picture><source srcset="form_4372_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+The advection term <picture><source srcset="form_4510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\cdot\nabla u$" src="form_4510.png"/></picture> is replaced by its <em>skew symmetric form</em>  <p class="formulaDsp">
+<picture><source srcset="form_4511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     u \cdot \nabla u + \frac12 \left( \nabla\cdot u \right) u.
-  \]" src="form_4372.png"/></picture>
+  \]" src="form_4511.png"/></picture>
 </p>
- This is consistent with the continuous equation (because <picture><source srcset="form_4373_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\cdot u = 0$" src="form_4373.png"/></picture>, though this is not true pointwise for the discrete solution) and it is needed to guarantee unconditional stability of the time-stepping scheme. Moreover, to linearize the term we use the second order extrapolation <picture><source srcset="form_4374_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^\star$" src="form_4374.png"/></picture> of <picture><source srcset="form_4365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{k+1}$" src="form_4365.png"/></picture>. </li>
+ This is consistent with the continuous equation (because <picture><source srcset="form_4512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\cdot u = 0$" src="form_4512.png"/></picture>, though this is not true pointwise for the discrete solution) and it is needed to guarantee unconditional stability of the time-stepping scheme. Moreover, to linearize the term we use the second order extrapolation <picture><source srcset="form_4513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^\star$" src="form_4513.png"/></picture> of <picture><source srcset="form_4504_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{k+1}$" src="form_4504.png"/></picture>. </li>
 <li>
 The projection step is a realization of the Helmholtz decomposition  <p class="formulaDsp">
-<picture><source srcset="form_4375_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4514_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     L^2(\Omega)^d = H \oplus \nabla H^1_{\Gamma_2}(\Omega),
-  \]" src="form_4375.png"/></picture>
+  \]" src="form_4514.png"/></picture>
 </p>
  where  <p class="formulaDsp">
-<picture><source srcset="form_4376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     H = \left\{ v \in L^2(\Omega)^d:\  \nabla\cdot v =0, \  v\cdot n|_{\Gamma_1} = 0 \right\},
-  \]" src="form_4376.png"/></picture>
+  \]" src="form_4515.png"/></picture>
 </p>
  and  <p class="formulaDsp">
-<picture><source srcset="form_4377_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4516_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     H^1_{\Gamma_2}(\Omega) = \left\{ q \in H^1(\Omega):\ q|_{\Gamma_2} = 0 \right\}.
-  \]" src="form_4377.png"/></picture>
+  \]" src="form_4516.png"/></picture>
 </p>
- Indeed, if we use this decomposition on <picture><source srcset="form_4365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{k+1}$" src="form_4365.png"/></picture> we obtain  <p class="formulaDsp">
-<picture><source srcset="form_4378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+ Indeed, if we use this decomposition on <picture><source srcset="form_4504_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^{k+1}$" src="form_4504.png"/></picture> we obtain  <p class="formulaDsp">
+<picture><source srcset="form_4517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     u^{k+1} = v^{k+1} + \nabla \left( \frac{2\tau}{3}  \phi^{k+1} \right),
-  \]" src="form_4378.png"/></picture>
+  \]" src="form_4517.png"/></picture>
 </p>
- with <picture><source srcset="form_4379_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^{k+1}\in H$" src="form_4379.png"/></picture>. Taking the divergence of this equation we arrive at the projection equation. </li>
+ with <picture><source srcset="form_4518_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^{k+1}\in H$" src="form_4518.png"/></picture>. Taking the divergence of this equation we arrive at the projection equation. </li>
 <li>
-The more accurate of the two variants outlined above is the rotational one. However, the program below implements both variants. Moreover, in the author's experience, the standard form is the one that should be used if, for instance, the viscosity <picture><source srcset="form_3078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3078.png"/></picture> is variable. </li>
+The more accurate of the two variants outlined above is the rotational one. However, the program below implements both variants. Moreover, in the author's experience, the standard form is the one that should be used if, for instance, the viscosity <picture><source srcset="form_3006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3006.png"/></picture> is variable. </li>
 </ul>
 <p>The standard incremental scheme and the rotational incremental scheme were first considered by van Kan in </p><ul>
 <li>
@@ -274,7 +274,7 @@
 J.-L. Guermond, "Un résultat de convergence d’ordre deux en temps pour
                         l’approximation des équations de Navier–Stokes par une technique de projection incrémentale", ESAIM: Mathematical Modelling and Numerical Analysis, vol. 33, no. 1, pp. 169–189, 1999 </li>
 </ul>
-<p>for the case <picture><source srcset="form_4380_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu = 1$" src="form_4380.png"/></picture>. It turns out that this technique suffers from unphysical boundary conditions for the kinematic pressure that lead to reduced rates of convergence. To prevent this, Timmermans et al. proposed in </p><ul>
+<p>for the case <picture><source srcset="form_4519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu = 1$" src="form_4519.png"/></picture>. It turns out that this technique suffers from unphysical boundary conditions for the kinematic pressure that lead to reduced rates of convergence. To prevent this, Timmermans et al. proposed in </p><ul>
 <li>
 L. Timmermans, P. Minev, and F. Van De Vosse, "An approximate projection scheme for incompressible flow using spectral elements", International Journal for Numerical Methods in Fluids, vol. 22, no. 7, pp. 673–688, 1996 </li>
 </ul>
@@ -285,42 +285,42 @@
 <p>for the Stokes problem. </p>
 <p><a class="anchor" id="fullydiscrete"></a> <a class="anchor" id="TheFullyDiscreteSetting"></a></p><h3>The Fully Discrete Setting </h3>
 <p>To obtain a fully discrete setting of the method we, as always, need a variational formulation. There is one subtle issue here given the nature of the boundary conditions. When we multiply the equation by a suitable test function one of the term that arises is  </p><p class="formulaDsp">
-<picture><source srcset="form_4381_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   -\nu \int_\Omega \Delta u \cdot v.
-\]" src="form_4381.png"/></picture>
+\]" src="form_4520.png"/></picture>
 </p>
 <p> If we, say, had Dirichlet boundary conditions on the whole boundary then after integration by parts we would obtain  </p><p class="formulaDsp">
/usr/share/doc/packages/dealii/doxygen/deal.II/step_36.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_36.html	2024-03-17 21:57:45.855249195 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_36.html	2024-03-17 21:57:45.855249195 +0000
@@ -130,39 +130,39 @@
 <p><a class="anchor" id="Preamble"></a> <a class="anchor" id="Preamble"></a></p><h1>Preamble</h1>
 <p>The problem we want to solve in this example is an eigenspectrum problem. Eigenvalue problems appear in a wide context of problems, for example in the computation of electromagnetic standing waves in cavities, vibration modes of drum membranes, or oscillations of lakes and estuaries. One of the most enigmatic applications is probably the computation of stationary or quasi-static wave functions in quantum mechanics. The latter application is what we would like to investigate here, though the general techniques outlined in this program are of course equally applicable to the other applications above.</p>
 <p>Eigenspectrum problems have the general form  </p><p class="formulaDsp">
-<picture><source srcset="form_4394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     L \Psi &amp;= \varepsilon \Psi \qquad &amp;&amp;\text{in}\ \Omega, \\
     \Psi   &amp;= 0 &amp;&amp;\text{on}\ \partial\Omega,
-\end{align*}" src="form_4394.png"/></picture>
+\end{align*}" src="form_4537.png"/></picture>
 </p>
-<p> where the Dirichlet boundary condition on <picture><source srcset="form_4395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi=\Psi(\mathbf x)$" src="form_4395.png"/></picture> could also be replaced by Neumann or Robin conditions; <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture> is an operator that generally also contains differential operators.</p>
-<p>Under suitable conditions, the above equations have a set of solutions <picture><source srcset="form_4396_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_\ell,\varepsilon_\ell$" src="form_4396.png"/></picture>, <picture><source srcset="form_4397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ell\in {\cal I}$" src="form_4397.png"/></picture>, where <picture><source srcset="form_4398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cal I$" src="form_4398.png"/></picture> can be a finite or infinite set (and in the latter case it may be a discrete or sometimes at least in part a continuous set). In either case, let us note that there is no longer just a single solution, but a set of solutions (the various eigenfunctions and corresponding eigenvalues) that we want to compute. The problem of numerically finding all eigenvalues (eigenfunctions) of such eigenvalue problems is a formidable challenge. In fact, if the set <picture><source srcset="form_4398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cal I$" src="form_4398.png"/></picture> is infinite, the challenge is of course intractable. Most of the time however we are really only interested in a small subset of these values (functions); and fortunately, the interface to the SLEPc library that we will use for this tutorial program allows us to select which portion of the eigenspectrum and how many solutions we want to solve for.</p>
+<p> where the Dirichlet boundary condition on <picture><source srcset="form_4538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi=\Psi(\mathbf x)$" src="form_4538.png"/></picture> could also be replaced by Neumann or Robin conditions; <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture> is an operator that generally also contains differential operators.</p>
+<p>Under suitable conditions, the above equations have a set of solutions <picture><source srcset="form_4539_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_\ell,\varepsilon_\ell$" src="form_4539.png"/></picture>, <picture><source srcset="form_4540_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ell\in {\cal I}$" src="form_4540.png"/></picture>, where <picture><source srcset="form_4541_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cal I$" src="form_4541.png"/></picture> can be a finite or infinite set (and in the latter case it may be a discrete or sometimes at least in part a continuous set). In either case, let us note that there is no longer just a single solution, but a set of solutions (the various eigenfunctions and corresponding eigenvalues) that we want to compute. The problem of numerically finding all eigenvalues (eigenfunctions) of such eigenvalue problems is a formidable challenge. In fact, if the set <picture><source srcset="form_4541_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cal I$" src="form_4541.png"/></picture> is infinite, the challenge is of course intractable. Most of the time however we are really only interested in a small subset of these values (functions); and fortunately, the interface to the SLEPc library that we will use for this tutorial program allows us to select which portion of the eigenspectrum and how many solutions we want to solve for.</p>
 <p>In this program, the eigenspectrum solvers we use are classes provided by deal.II that wrap around the linear algebra implementation of the <a href="https://slepc.upv.es/" target="_top">SLEPc</a> library; SLEPc itself builds on the <a href="http://www.mcs.anl.gov/petsc/" target="_top">PETSc</a> library for linear algebra contents.</p>
 <p><a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
-<p>The basic equation of stationary quantum mechanics is the Schrödinger equation which models the motion of particles in an external potential <picture><source srcset="form_4399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\mathbf x)$" src="form_4399.png"/></picture>. The particle is described by a wave function <picture><source srcset="form_4400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi(\mathbf x)$" src="form_4400.png"/></picture> that satisfies a relation of the (nondimensionalized) form  </p><p class="formulaDsp">
-<picture><source srcset="form_4401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*} [-\Delta + V(\mathbf x)]
+<p>The basic equation of stationary quantum mechanics is the Schrödinger equation which models the motion of particles in an external potential <picture><source srcset="form_4542_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\mathbf x)$" src="form_4542.png"/></picture>. The particle is described by a wave function <picture><source srcset="form_4543_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi(\mathbf x)$" src="form_4543.png"/></picture> that satisfies a relation of the (nondimensionalized) form  </p><p class="formulaDsp">
+<picture><source srcset="form_4544_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*} [-\Delta + V(\mathbf x)]
 \Psi(\mathbf x) &amp;= \varepsilon \Psi(\mathbf x) \qquad &amp;&amp;\text{in}\
 \Omega\quad, \\ \Psi &amp;= 0 &amp;&amp;\text{on}\ \partial\Omega\quad.
-\end{align*}" src="form_4401.png"/></picture>
+\end{align*}" src="form_4544.png"/></picture>
 </p>
-<p> As a consequence, this particle can only exist in a certain number of eigenstates that correspond to the energy eigenvalues <picture><source srcset="form_4402_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon_\ell$" src="form_4402.png"/></picture> admitted as solutions of this equation. The orthodox (Copenhagen) interpretation of quantum mechanics posits that, if a particle has energy <picture><source srcset="form_4402_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon_\ell$" src="form_4402.png"/></picture> then the probability of finding it at location <picture><source srcset="form_216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_216.png"/></picture> is proportional to <picture><source srcset="form_4404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\Psi_\ell(\mathbf
-x)|^2$" src="form_4404.png"/></picture> where <picture><source srcset="form_4405_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_\ell$" src="form_4405.png"/></picture> is the eigenfunction that corresponds to this eigenvalue.</p>
-<p>In order to numerically find solutions to this equation, i.e. a set of pairs of eigenvalues/eigenfunctions, we use the usual finite element approach of multiplying the equation from the left with test functions, integrating by parts, and searching for solutions in finite dimensional spaces by approximating <picture><source srcset="form_4406_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi(\mathbf
-x)\approx\Psi_h(\mathbf x)=\sum_{j}\phi_j(\mathbf x)\tilde\psi_j$" src="form_4406.png"/></picture>, where <picture><source srcset="form_4407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde\psi$" src="form_4407.png"/></picture> is a vector of expansion coefficients. We then immediately arrive at the following equation that discretizes the continuous eigenvalue problem: </p><p class="formulaDsp">
-<picture><source srcset="form_4408_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \sum_j [(\nabla\phi_i,
+<p> As a consequence, this particle can only exist in a certain number of eigenstates that correspond to the energy eigenvalues <picture><source srcset="form_4545_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon_\ell$" src="form_4545.png"/></picture> admitted as solutions of this equation. The orthodox (Copenhagen) interpretation of quantum mechanics posits that, if a particle has energy <picture><source srcset="form_4545_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon_\ell$" src="form_4545.png"/></picture> then the probability of finding it at location <picture><source srcset="form_190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_190.png"/></picture> is proportional to <picture><source srcset="form_4546_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\Psi_\ell(\mathbf
+x)|^2$" src="form_4546.png"/></picture> where <picture><source srcset="form_4547_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_\ell$" src="form_4547.png"/></picture> is the eigenfunction that corresponds to this eigenvalue.</p>
+<p>In order to numerically find solutions to this equation, i.e. a set of pairs of eigenvalues/eigenfunctions, we use the usual finite element approach of multiplying the equation from the left with test functions, integrating by parts, and searching for solutions in finite dimensional spaces by approximating <picture><source srcset="form_4548_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi(\mathbf
+x)\approx\Psi_h(\mathbf x)=\sum_{j}\phi_j(\mathbf x)\tilde\psi_j$" src="form_4548.png"/></picture>, where <picture><source srcset="form_4549_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde\psi$" src="form_4549.png"/></picture> is a vector of expansion coefficients. We then immediately arrive at the following equation that discretizes the continuous eigenvalue problem: </p><p class="formulaDsp">
+<picture><source srcset="form_4550_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \sum_j [(\nabla\phi_i,
 \nabla\phi_j)+(V(\mathbf x)\phi_i,\phi_j)] \tilde{\psi}_j =
-\varepsilon_h \sum_j (\phi_i, \phi_j) \tilde{\psi}_j\quad.  \]" src="form_4408.png"/></picture>
+\varepsilon_h \sum_j (\phi_i, \phi_j) \tilde{\psi}_j\quad.  \]" src="form_4550.png"/></picture>
 </p>
 <p> In matrix and vector notation, this equation then reads: </p><p class="formulaDsp">
-<picture><source srcset="form_4409_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ A
-\tilde{\Psi} = \varepsilon_h M \tilde{\Psi} \quad, \]" src="form_4409.png"/></picture>
+<picture><source srcset="form_4551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ A
+\tilde{\Psi} = \varepsilon_h M \tilde{\Psi} \quad, \]" src="form_4551.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is the <a class="el" href="DEALGlossary.html#href_anchor">stiffness matrix</a> arising from the differential operator <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>, and <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> is the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>. The solution to the eigenvalue problem is an eigenspectrum <picture><source srcset="form_4410_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon_{h,\ell}$" src="form_4410.png"/></picture>, with associated eigenfunctions <picture><source srcset="form_4411_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_\ell=\sum_j \phi_j\tilde{\psi}_j$" src="form_4411.png"/></picture>.</p>
+<p> where <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is the <a class="el" href="DEALGlossary.html#href_anchor">stiffness matrix</a> arising from the differential operator <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>, and <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> is the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>. The solution to the eigenvalue problem is an eigenspectrum <picture><source srcset="form_4552_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon_{h,\ell}$" src="form_4552.png"/></picture>, with associated eigenfunctions <picture><source srcset="form_4553_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi_\ell=\sum_j \phi_j\tilde{\psi}_j$" src="form_4553.png"/></picture>.</p>
 <p><a class="anchor" id="EigenvaluesandDirichletboundaryconditions"></a></p><h3>Eigenvalues and Dirichlet boundary conditions</h3>
-<p>In this program, we use Dirichlet boundary conditions for the wave function <picture><source srcset="form_176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi$" src="form_176.png"/></picture>. What this means, from the perspective of a finite element code, is that only the interior degrees of freedom are real degrees of <em>freedom</em>: the ones on the boundary are not free but are forced to have a zero value, after all. On the other hand, the finite element method gains much of its power and simplicity from the fact that we just do the same thing on every cell, without having to think too much about where a cell is, whether it bounds on a less refined cell and consequently has a hanging node, or is adjacent to the boundary. All such checks would make the assembly of finite element linear systems unbearably difficult to write and even more so to read.</p>
+<p>In this program, we use Dirichlet boundary conditions for the wave function <picture><source srcset="form_150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi$" src="form_150.png"/></picture>. What this means, from the perspective of a finite element code, is that only the interior degrees of freedom are real degrees of <em>freedom</em>: the ones on the boundary are not free but are forced to have a zero value, after all. On the other hand, the finite element method gains much of its power and simplicity from the fact that we just do the same thing on every cell, without having to think too much about where a cell is, whether it bounds on a less refined cell and consequently has a hanging node, or is adjacent to the boundary. All such checks would make the assembly of finite element linear systems unbearably difficult to write and even more so to read.</p>
 <p>Consequently, of course, when you distribute degrees of freedom with your <a class="el" href="classDoFHandler.html">DoFHandler</a> object, you don't care whether some of the degrees of freedom you enumerate are at a Dirichlet boundary. They all get numbers. We just have to take care of these degrees of freedom at a later time when we apply boundary values. There are two basic ways of doing this (either using <a class="el" href="namespaceMatrixTools.html#href_anchor">MatrixTools::apply_boundary_values()</a> <em>after</em> assembling the linear system, or using <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::distribute_local_to_global()</a> <em>during</em> assembly; see the <a class="el" href="group__constraints.html">constraints module</a> for more information), but both result in the same: a linear system that has a total number of rows equal to the number of <em>all</em> degrees of freedom, including those that lie on the boundary. However, degrees of freedom that are constrained by Dirichlet conditions are separated from the rest of the linear system by zeroing out the corresponding row and column, putting a single positive entry on the diagonal, and the corresponding Dirichlet value on the right hand side.</p>
 <p>If you assume for a moment that we had renumbered degrees of freedom in such a way that all of those on the Dirichlet boundary come last, then the linear system we would get when solving a regular PDE with a right hand side would look like this:  </p><p class="formulaDsp">
-<picture><source srcset="form_4415_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4554_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \begin{pmatrix}
     A_i &amp; 0 \\ 0 &amp; D_b
   \end{pmatrix}
@@ -173,11 +173,11 @@
   \begin{pmatrix}
     F_i \\ F_b
   \end{pmatrix}.
-\end{align*}" src="form_4415.png"/></picture>
+\end{align*}" src="form_4554.png"/></picture>
 </p>
-<p> Here, subscripts <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> and <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> correspond to interior and boundary degrees of freedom, respectively. The interior degrees of freedom satisfy the linear system <picture><source srcset="form_4416_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_i U_i=F_i$" src="form_4416.png"/></picture> which yields the correct solution in the interior, and boundary values are determined by <picture><source srcset="form_4417_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_b = D_b^{-1} F_b$" src="form_4417.png"/></picture> where <picture><source srcset="form_4418_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_b$" src="form_4418.png"/></picture> is a diagonal matrix that results from the process of eliminating boundary degrees of freedom, and <picture><source srcset="form_4419_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_b$" src="form_4419.png"/></picture> is chosen in such a way that <picture><source srcset="form_4420_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_{b,j}=D_{b,jj}^{-1} F_{b,j}$" src="form_4420.png"/></picture> has the correct boundary values for every boundary degree of freedom <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>. (For the curious, the entries of the matrix <picture><source srcset="form_4418_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_b$" src="form_4418.png"/></picture> result from adding modified local contributions to the global matrix where for the local matrices the diagonal elements, if non-zero, are set to their absolute value; otherwise, they are set to the average of absolute values of the diagonal. This process guarantees that the entries of <picture><source srcset="form_4418_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_b$" src="form_4418.png"/></picture> are positive and of a size comparable to the rest of the diagonal entries, ensuring that the resulting matrix does not incur unreasonable losses of accuracy due to roundoff involving matrix entries of drastically different size. The actual values that end up on the diagonal are difficult to predict and you should treat them as arbitrary and unpredictable, but positive.)</p>
-<p>For "regular" linear systems, this all leads to the correct solution. On the other hand, for eigenvalue problems, this is not so trivial. There, eliminating boundary values affects both matrices <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> and <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> that we will solve with in the current tutorial program. After elimination of boundary values, we then receive an eigenvalue problem that can be partitioned like this:  </p><p class="formulaDsp">
-<picture><source srcset="form_4421_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> Here, subscripts <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> and <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> correspond to interior and boundary degrees of freedom, respectively. The interior degrees of freedom satisfy the linear system <picture><source srcset="form_4555_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_i U_i=F_i$" src="form_4555.png"/></picture> which yields the correct solution in the interior, and boundary values are determined by <picture><source srcset="form_4556_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_b = D_b^{-1} F_b$" src="form_4556.png"/></picture> where <picture><source srcset="form_4557_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_b$" src="form_4557.png"/></picture> is a diagonal matrix that results from the process of eliminating boundary degrees of freedom, and <picture><source srcset="form_4558_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_b$" src="form_4558.png"/></picture> is chosen in such a way that <picture><source srcset="form_4559_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_{b,j}=D_{b,jj}^{-1} F_{b,j}$" src="form_4559.png"/></picture> has the correct boundary values for every boundary degree of freedom <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>. (For the curious, the entries of the matrix <picture><source srcset="form_4557_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_b$" src="form_4557.png"/></picture> result from adding modified local contributions to the global matrix where for the local matrices the diagonal elements, if non-zero, are set to their absolute value; otherwise, they are set to the average of absolute values of the diagonal. This process guarantees that the entries of <picture><source srcset="form_4557_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_b$" src="form_4557.png"/></picture> are positive and of a size comparable to the rest of the diagonal entries, ensuring that the resulting matrix does not incur unreasonable losses of accuracy due to roundoff involving matrix entries of drastically different size. The actual values that end up on the diagonal are difficult to predict and you should treat them as arbitrary and unpredictable, but positive.)</p>
+<p>For "regular" linear systems, this all leads to the correct solution. On the other hand, for eigenvalue problems, this is not so trivial. There, eliminating boundary values affects both matrices <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> and <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> that we will solve with in the current tutorial program. After elimination of boundary values, we then receive an eigenvalue problem that can be partitioned like this:  </p><p class="formulaDsp">
+<picture><source srcset="form_4560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \begin{pmatrix}
     A_i &amp; 0 \\ 0 &amp; D_A
   \end{pmatrix}
@@ -192,16 +192,16 @@
   \begin{pmatrix}
     \tilde\Psi_i \\ \tilde\Psi_b
   \end{pmatrix}.
-\end{align*}" src="form_4421.png"/></picture>
+\end{align*}" src="form_4560.png"/></picture>
 </p>
 <p> This form makes it clear that there are two sets of eigenvalues: the ones we care about, and spurious eigenvalues from the separated problem  </p><p class="formulaDsp">
-<picture><source srcset="form_4422_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   D_A \tilde \Psi_b = \epsilon_h D_M \Psi_b.
-\]" src="form_4422.png"/></picture>
+\]" src="form_4561.png"/></picture>
 </p>
-<p> These eigenvalues are spurious since they result from an eigenvalue system that operates only on boundary nodes &ndash; nodes that are not real degrees of <em>freedom</em>. Of course, since the two matrices <picture><source srcset="form_4423_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_A,D_M$" src="form_4423.png"/></picture> are diagonal, we can exactly quantify these spurious eigenvalues: they are <picture><source srcset="form_4424_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon_{h,j}=D_{A,jj}/D_{M,jj}$" src="form_4424.png"/></picture> (where the indices <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> corresponds exactly to the degrees of freedom that are constrained by Dirichlet boundary values).</p>
-<p>So how does one deal with them? The fist part is to recognize when our eigenvalue solver finds one of them. To this end, the program computes and prints an interval within which these eigenvalues lie, by computing the minimum and maximum of the expression <picture><source srcset="form_4424_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon_{h,j}=D_{A,jj}/D_{M,jj}$" src="form_4424.png"/></picture> over all constrained degrees of freedom. In the program below, this already suffices: we find that this interval lies outside the set of smallest eigenvalues and corresponding eigenfunctions we are interested in and compute, so there is nothing we need to do here.</p>
-<p>On the other hand, it may happen that we find that one of the eigenvalues we compute in this program happens to be in this interval, and in that case we would not know immediately whether it is a spurious or a true eigenvalue. In that case, one could simply scale the diagonal elements of either matrix after computing the two matrices, thus shifting them away from the frequency of interest in the eigen-spectrum. This can be done by using the following code, making sure that all spurious eigenvalues are exactly equal to <picture><source srcset="form_4425_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1.234\cdot 10^5$" src="form_4425.png"/></picture>: </p><div class="fragment"><div class="line"><span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; dof_handler.n_dofs(); ++i)</div>
+<p> These eigenvalues are spurious since they result from an eigenvalue system that operates only on boundary nodes &ndash; nodes that are not real degrees of <em>freedom</em>. Of course, since the two matrices <picture><source srcset="form_4562_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_A,D_M$" src="form_4562.png"/></picture> are diagonal, we can exactly quantify these spurious eigenvalues: they are <picture><source srcset="form_4563_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon_{h,j}=D_{A,jj}/D_{M,jj}$" src="form_4563.png"/></picture> (where the indices <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> corresponds exactly to the degrees of freedom that are constrained by Dirichlet boundary values).</p>
+<p>So how does one deal with them? The fist part is to recognize when our eigenvalue solver finds one of them. To this end, the program computes and prints an interval within which these eigenvalues lie, by computing the minimum and maximum of the expression <picture><source srcset="form_4563_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon_{h,j}=D_{A,jj}/D_{M,jj}$" src="form_4563.png"/></picture> over all constrained degrees of freedom. In the program below, this already suffices: we find that this interval lies outside the set of smallest eigenvalues and corresponding eigenfunctions we are interested in and compute, so there is nothing we need to do here.</p>
+<p>On the other hand, it may happen that we find that one of the eigenvalues we compute in this program happens to be in this interval, and in that case we would not know immediately whether it is a spurious or a true eigenvalue. In that case, one could simply scale the diagonal elements of either matrix after computing the two matrices, thus shifting them away from the frequency of interest in the eigen-spectrum. This can be done by using the following code, making sure that all spurious eigenvalues are exactly equal to <picture><source srcset="form_4564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1.234\cdot 10^5$" src="form_4564.png"/></picture>: </p><div class="fragment"><div class="line"><span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; dof_handler.n_dofs(); ++i)</div>
 <div class="line">  <span class="keywordflow">if</span> (constraints.is_constrained(i))</div>
 <div class="line">    {</div>
 <div class="line">      stiffness_matrix.set(i, i, 1.234e5);</div>
@@ -224,13 +224,13 @@
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">We use the <a class="el" href="classParameterHandler.html">ParameterHandler</a> class to describe a few input parameters, such as the exact form of the potential <picture><source srcset="form_4426_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V({\mathbf
-x})$" src="form_4426.png"/></picture>, the number of global refinement steps of the mesh, or the number of eigenvalues we want to solve for. We could go much further with this but stop at making only a few of the things that one could select at run time actual input file parameters. In order to see what could be done in this regard, take a look at <a class="el" href="step_29.html">step-29</a> and <a class="el" href="step_33.html">step-33</a>.</p>
+<p class="startli">We use the <a class="el" href="classParameterHandler.html">ParameterHandler</a> class to describe a few input parameters, such as the exact form of the potential <picture><source srcset="form_4565_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V({\mathbf
+x})$" src="form_4565.png"/></picture>, the number of global refinement steps of the mesh, or the number of eigenvalues we want to solve for. We could go much further with this but stop at making only a few of the things that one could select at run time actual input file parameters. In order to see what could be done in this regard, take a look at <a class="el" href="step_29.html">step-29</a> and <a class="el" href="step_33.html">step-33</a>.</p>
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">We use the <a class="el" href="classFunctionParser.html">FunctionParser</a> class to make the potential <picture><source srcset="form_4427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\mathbf
-x)$" src="form_4427.png"/></picture> a run-time parameter that can be specified in the input file as a formula.</p>
+<p class="startli">We use the <a class="el" href="classFunctionParser.html">FunctionParser</a> class to make the potential <picture><source srcset="form_4566_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\mathbf
+x)$" src="form_4566.png"/></picture> a run-time parameter that can be specified in the input file as a formula.</p>
 <p class="endli"></p>
 </li>
 </ul>
@@ -309,7 +309,7 @@
 <div class="fragment"><div class="line">      <a class="code hl_class" href="classParameterHandler.html">ParameterHandler</a> parameters;</div>
 <div class="line">  </div>
 <div class="ttc" id="aclassParameterHandler_html"><div class="ttname"><a href="classParameterHandler.html">ParameterHandler</a></div><div class="ttdef"><b>Definition</b> <a href="parameter__handler_8h_source.html#href_anchor">parameter_handler.h:856</a></div></div>
-</div><!-- fragment --><p>Finally, we will have an object that contains "constraints" on our degrees of freedom. This could include hanging node constraints if we had adaptively refined meshes (which we don't have in the current program). Here, we will store the constraints for boundary nodes <picture><source srcset="form_4428_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i=0$" src="form_4428.png"/></picture>.</p>
+</div><!-- fragment --><p>Finally, we will have an object that contains "constraints" on our degrees of freedom. This could include hanging node constraints if we had adaptively refined meshes (which we don't have in the current program). Here, we will store the constraints for boundary nodes <picture><source srcset="form_4567_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i=0$" src="form_4567.png"/></picture>.</p>
 <div class="fragment"><div class="line">      <a class="code hl_class" href="classAffineConstraints.html">AffineConstraints&lt;double&gt;</a> constraints;</div>
 <div class="line">    };</div>
 <div class="line">  </div>
@@ -346,7 +346,7 @@
 <div class="ttc" id="aclassPatterns_1_1Anything_html"><div class="ttname"><a href="classPatterns_1_1Anything.html">Patterns::Anything</a></div><div class="ttdef"><b>Definition</b> <a href="patterns_8h_source.html#href_anchor">patterns.h:1022</a></div></div>
 <div class="ttc" id="aclassPatterns_1_1Integer_html"><div class="ttname"><a href="classPatterns_1_1Integer.html">Patterns::Integer</a></div><div class="ttdef"><b>Definition</b> <a href="patterns_8h_source.html#href_anchor">patterns.h:189</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="EigenvalueProblemmake_grid_and_dofs"></a> </p><h4>EigenvalueProblem::make_grid_and_dofs</h4>
-<p>The next function creates a mesh on the domain <picture><source srcset="form_464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^d$" src="form_464.png"/></picture>, refines it as many times as the input file calls for, and then attaches a <a class="el" href="classDoFHandler.html">DoFHandler</a> to it and initializes the matrices and vectors to their correct sizes. We also build the constraints that correspond to the boundary values <picture><source srcset="form_4429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u|_{\partial\Omega}=0$" src="form_4429.png"/></picture>.</p>
+<p>The next function creates a mesh on the domain <picture><source srcset="form_464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^d$" src="form_464.png"/></picture>, refines it as many times as the input file calls for, and then attaches a <a class="el" href="classDoFHandler.html">DoFHandler</a> to it and initializes the matrices and vectors to their correct sizes. We also build the constraints that correspond to the boundary values <picture><source srcset="form_4568_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u|_{\partial\Omega}=0$" src="form_4568.png"/></picture>.</p>
 <p>For the matrices, we use the PETSc wrappers. These have the ability to allocate memory as necessary as non-zero entries are added. This seems inefficient: we could as well first compute the sparsity pattern, initialize the matrices with it, and as we then insert entries we can be sure that we do not need to re-allocate memory and free the one used previously. One way to do that would be to use code like this: </p><div class="CodeFragmentInTutorialComment"> <div class="fragment"><div class="line"><a class="code hl_class" href="classDynamicSparsityPattern.html">DynamicSparsityPattern</a></div>
 <div class="line">   dsp (dof_handler.n_dofs(),</div>
 <div class="line">        dof_handler.n_dofs());</div>
@@ -392,10 +392,10 @@
 <div class="line">  </div>
 <div class="ttc" id="aclassIndexSet_html"><div class="ttname"><a href="classIndexSet.html">IndexSet</a></div><div class="ttdef"><b>Definition</b> <a href="index__set_8h_source.html#href_anchor">index_set.h:67</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="EigenvalueProblemassemble_system"></a> </p><h4>EigenvalueProblem::assemble_system</h4>
-<p>Here, we assemble the global stiffness and mass matrices from local contributions <picture><source srcset="form_4430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^K_{ij} = \int_K \nabla\varphi_i(\mathbf x) \cdot
+<p>Here, we assemble the global stiffness and mass matrices from local contributions <picture><source srcset="form_4569_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^K_{ij} = \int_K \nabla\varphi_i(\mathbf x) \cdot
    \nabla\varphi_j(\mathbf x) + V(\mathbf x)\varphi_i(\mathbf
-   x)\varphi_j(\mathbf x)$" src="form_4430.png"/></picture> and <picture><source srcset="form_4431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^K_{ij} = \int_K \varphi_i(\mathbf
-   x)\varphi_j(\mathbf x)$" src="form_4431.png"/></picture> respectively. This function should be immediately familiar if you've seen previous tutorial programs. The only thing new would be setting up an object that described the potential <picture><source srcset="form_4399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\mathbf x)$" src="form_4399.png"/></picture> using the expression that we got from the input file. We then need to evaluate this object at the quadrature points on each cell. If you've seen how to evaluate function objects (see, for example the coefficient in <a class="el" href="step_5.html">step-5</a>), the code here will also look rather familiar.</p>
+   x)\varphi_j(\mathbf x)$" src="form_4569.png"/></picture> and <picture><source srcset="form_4570_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^K_{ij} = \int_K \varphi_i(\mathbf
+   x)\varphi_j(\mathbf x)$" src="form_4570.png"/></picture> respectively. This function should be immediately familiar if you've seen previous tutorial programs. The only thing new would be setting up an object that described the potential <picture><source srcset="form_4542_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\mathbf x)$" src="form_4542.png"/></picture> using the expression that we got from the input file. We then need to evaluate this object at the quadrature points on each cell. If you've seen how to evaluate function objects (see, for example the coefficient in <a class="el" href="step_5.html">step-5</a>), the code here will also look rather familiar.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> EigenvalueProblem&lt;dim&gt;::assemble_system()</div>
 <div class="line">    {</div>
@@ -519,9 +519,9 @@
 <div class="line">                        eigenfunctions,</div>
 <div class="line">                        eigenfunctions.size());</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>The output of the call above is a set of vectors and values. In eigenvalue problems, the eigenfunctions are only determined up to a constant that can be fixed pretty arbitrarily. Knowing nothing about the origin of the eigenvalue problem, SLEPc has no other choice than to normalize the eigenvectors to one in the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture> (vector) norm. Unfortunately this norm has little to do with any norm we may be interested from a eigenfunction perspective: the <picture><source srcset="form_4432_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2(\Omega)$" src="form_4432.png"/></picture> norm, or maybe the <picture><source srcset="form_4433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_\infty(\Omega)$" src="form_4433.png"/></picture> norm.</p>
-<p>Let us choose the latter and rescale eigenfunctions so that they have <picture><source srcset="form_4434_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\phi_i(\mathbf x)\|_{L^\infty(\Omega)}=1$" src="form_4434.png"/></picture> instead of <picture><source srcset="form_4435_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\Phi\|_{l_2}=1$" src="form_4435.png"/></picture> (where <picture><source srcset="form_1012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i$" src="form_1012.png"/></picture> is the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th eigen<em>function</em> and <picture><source srcset="form_2332_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_i$" src="form_2332.png"/></picture> the corresponding vector of nodal values). For the <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements chosen here, we know that the maximum of the function <picture><source srcset="form_4436_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i(\mathbf x)$" src="form_4436.png"/></picture> is attained at one of the nodes, so <picture><source srcset="form_4437_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\max_{\mathbf
-   x}\phi_i(\mathbf x)=\max_j (\Phi_i)_j$" src="form_4437.png"/></picture>, making the normalization in the <picture><source srcset="form_1691_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_\infty$" src="form_1691.png"/></picture> norm trivial. Note that this doesn't work as easily if we had chosen <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_k$" src="form_165.png"/></picture> elements with <picture><source srcset="form_4438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k&gt;1$" src="form_4438.png"/></picture>: there, the maximum of a function does not necessarily have to be attained at a node, and so <picture><source srcset="form_4439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\max_{\mathbf x}\phi_i(\mathbf x)\ge\max_j (\Phi_i)_j$" src="form_4439.png"/></picture> (although the equality is usually nearly true).</p>
+</div><!-- fragment --><p>The output of the call above is a set of vectors and values. In eigenvalue problems, the eigenfunctions are only determined up to a constant that can be fixed pretty arbitrarily. Knowing nothing about the origin of the eigenvalue problem, SLEPc has no other choice than to normalize the eigenvectors to one in the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture> (vector) norm. Unfortunately this norm has little to do with any norm we may be interested from a eigenfunction perspective: the <picture><source srcset="form_4571_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2(\Omega)$" src="form_4571.png"/></picture> norm, or maybe the <picture><source srcset="form_4572_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_\infty(\Omega)$" src="form_4572.png"/></picture> norm.</p>
+<p>Let us choose the latter and rescale eigenfunctions so that they have <picture><source srcset="form_4573_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\phi_i(\mathbf x)\|_{L^\infty(\Omega)}=1$" src="form_4573.png"/></picture> instead of <picture><source srcset="form_4574_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\Phi\|_{l_2}=1$" src="form_4574.png"/></picture> (where <picture><source srcset="form_966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i$" src="form_966.png"/></picture> is the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th eigen<em>function</em> and <picture><source srcset="form_2397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_i$" src="form_2397.png"/></picture> the corresponding vector of nodal values). For the <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements chosen here, we know that the maximum of the function <picture><source srcset="form_4575_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i(\mathbf x)$" src="form_4575.png"/></picture> is attained at one of the nodes, so <picture><source srcset="form_4576_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\max_{\mathbf
+   x}\phi_i(\mathbf x)=\max_j (\Phi_i)_j$" src="form_4576.png"/></picture>, making the normalization in the <picture><source srcset="form_1694_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_\infty$" src="form_1694.png"/></picture> norm trivial. Note that this doesn't work as easily if we had chosen <picture><source srcset="form_139_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_k$" src="form_139.png"/></picture> elements with <picture><source srcset="form_4577_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k&gt;1$" src="form_4577.png"/></picture>: there, the maximum of a function does not necessarily have to be attained at a node, and so <picture><source srcset="form_4578_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\max_{\mathbf x}\phi_i(\mathbf x)\ge\max_j (\Phi_i)_j$" src="form_4578.png"/></picture> (although the equality is usually nearly true).</p>
 <div class="fragment"><div class="line">      <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;eigenfunction : eigenfunctions)</div>
 <div class="line">        eigenfunction /= eigenfunction.<a class="code hl_function" href="tensor_8h.html#href_anchor">linfty_norm</a>();</div>
 <div class="line">  </div>
@@ -549,7 +549,7 @@
 <div class="ttc" id="aclassDataOut__DoFData_html_a6ed7c846331069f406b8c9933c37fda4"><div class="ttname"><a href="classDataOut__DoFData.html#href_anchor">DataOut_DoFData::attach_dof_handler</a></div><div class="ttdeci">void attach_dof_handler(const DoFHandler&lt; dim, spacedim &gt; &amp;)</div></div>
 <div class="ttc" id="aclassDataOut_html"><div class="ttname"><a href="classDataOut.html">DataOut</a></div><div class="ttdef"><b>Definition</b> <a href="numerics_2data__out_8h_source.html#href_anchor">data_out.h:148</a></div></div>
 <div class="ttc" id="anamespaceUtilities_html_a6195c5f009ea8c7c536c6ffdf108c32f"><div class="ttname"><a href="namespaceUtilities.html#href_anchor">Utilities::int_to_string</a></div><div class="ttdeci">std::string int_to_string(const unsigned int value, const unsigned int digits=numbers::invalid_unsigned_int)</div><div class="ttdef"><b>Definition</b> <a href="base_2utilities_8cc_source.html#href_anchor">utilities.cc:471</a></div></div>
-</div><!-- fragment --><p>The only thing worth discussing may be that because the potential is specified as a function expression in the input file, it would be nice to also have it as a graphical representation along with the eigenfunctions. The process to achieve this is relatively straightforward: we build an object that represents <picture><source srcset="form_4399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\mathbf x)$" src="form_4399.png"/></picture> and then we interpolate this continuous function onto the finite element space. The result we also attach to the <a class="el" href="classDataOut.html">DataOut</a> object for visualization.</p>
+</div><!-- fragment --><p>The only thing worth discussing may be that because the potential is specified as a function expression in the input file, it would be nice to also have it as a graphical representation along with the eigenfunctions. The process to achieve this is relatively straightforward: we build an object that represents <picture><source srcset="form_4542_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\mathbf x)$" src="form_4542.png"/></picture> and then we interpolate this continuous function onto the finite element space. The result we also attach to the <a class="el" href="classDataOut.html">DataOut</a> object for visualization.</p>
 <div class="fragment"><div class="line">      <a class="code hl_class" href="classVector.html">Vector&lt;double&gt;</a> projected_potential(dof_handler.n_dofs());</div>
 <div class="line">      {</div>
 <div class="line">        <a class="code hl_class" href="classFunctionParser.html">FunctionParser&lt;dim&gt;</a> potential;</div>
@@ -658,7 +658,7 @@
 <div class="fragment"><div class="line">set Global mesh refinement steps         = 5</div>
 <div class="line">set Number of <a class="code hl_function" href="symmetric__tensor_8h.html#href_anchor">eigenvalues</a>/eigenfunctions = 5</div>
 <div class="line">set Potential                            = 0</div>
-</div><!-- fragment --><p>Here, the potential is zero inside the domain, and we know that the eigenvalues are given by <picture><source srcset="form_4440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{(mn)}=\frac{\pi^2}{4}(m^2+n^2)$" src="form_4440.png"/></picture> where <picture><source srcset="form_4441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m,n\in{\mathbb N^+}$" src="form_4441.png"/></picture>. Eigenfunctions are sines and cosines with <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> and <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> periods in <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> and <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> directions. This matches the output our program generates: </p><div class="fragment"><div class="line">examples/step-36&gt; make run</div>
+</div><!-- fragment --><p>Here, the potential is zero inside the domain, and we know that the eigenvalues are given by <picture><source srcset="form_4579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{(mn)}=\frac{\pi^2}{4}(m^2+n^2)$" src="form_4579.png"/></picture> where <picture><source srcset="form_4580_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m,n\in{\mathbb N^+}$" src="form_4580.png"/></picture>. Eigenfunctions are sines and cosines with <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> and <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> periods in <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> and <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> directions. This matches the output our program generates: </p><div class="fragment"><div class="line">examples/step-36&gt; make run</div>
 <div class="line">============================ Running step-36</div>
 <div class="line">   Number of active cells:       1024</div>
 <div class="line">   Number of degrees of freedom: 1089</div>
@@ -671,7 +671,7 @@
 <div class="line">      Eigenvalue 4 : 24.837</div>
 <div class="line"> </div>
 <div class="line">   Job done.  </div>
-</div><!-- fragment --><p> These eigenvalues are exactly the ones that correspond to pairs <picture><source srcset="form_4442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(m,n)=(1,1)$" src="form_4442.png"/></picture>, <picture><source srcset="form_4443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1,2)$" src="form_4443.png"/></picture> and <picture><source srcset="form_4444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2,1)$" src="form_4444.png"/></picture>, <picture><source srcset="form_4445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2,2)$" src="form_4445.png"/></picture>, and <picture><source srcset="form_4446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(3,1)$" src="form_4446.png"/></picture>. A visualization of the corresponding eigenfunctions would look like this:</p>
+</div><!-- fragment --><p> These eigenvalues are exactly the ones that correspond to pairs <picture><source srcset="form_4581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(m,n)=(1,1)$" src="form_4581.png"/></picture>, <picture><source srcset="form_4582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1,2)$" src="form_4582.png"/></picture> and <picture><source srcset="form_4583_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2,1)$" src="form_4583.png"/></picture>, <picture><source srcset="form_4584_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(2,2)$" src="form_4584.png"/></picture>, and <picture><source srcset="form_4585_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(3,1)$" src="form_4585.png"/></picture>. A visualization of the corresponding eigenfunctions would look like this:</p>
 <table width="80%">
 <tr>
 <td><img src="https://www.dealii.org/images/steps/developer/step-36.default.eigenfunction.0.png" alt="" class="inline"/> </td><td><img src="https://www.dealii.org/images/steps/developer/step-36.default.eigenfunction.1.png" alt="" class="inline"/> </td><td><img src="https://www.dealii.org/images/steps/developer/step-36.default.eigenfunction.2.png" alt="" class="inline"/>  </td></tr>
@@ -683,7 +683,7 @@
 <ul>
 <li>
 <p class="startli">The potential used above (called the <em>infinite well</em> because it is a flat potential surrounded by infinitely high walls) is interesting because it allows for analytically known solutions. Apart from that, it is rather boring, however. That said, it is trivial to play around with the potential by just setting it to something different in the input file. For example, let us assume that we wanted to work with the following potential in 2d:  </p><p class="formulaDsp">
-<picture><source srcset="form_4447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4586_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   V(x,y) = \left\{
        \begin{array}{ll}
          -100 &amp; \text{if}\ \sqrt{x^2+y^2}&lt;\frac 34 \ \text{and}
@@ -694,7 +694,7 @@
          \\
/usr/share/doc/packages/dealii/doxygen/deal.II/step_37.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_37.html	2024-03-17 21:57:45.947249764 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_37.html	2024-03-17 21:57:45.951249788 +0000
@@ -153,23 +153,23 @@
 <p>The major motivation for matrix-free methods is the fact that on today's processors access to main memory (i.e., for objects that do not fit in the caches) has become the bottleneck in many solvers for partial differential equations: To perform a matrix-vector product based on matrices, modern CPUs spend far more time waiting for data to arrive from memory than on actually doing the floating point multiplications and additions. Thus, if we could substitute looking up matrix elements in memory by re-computing them &mdash; or rather, the operator represented by these entries &mdash;, we may win in terms of overall run-time even if this requires a significant number of additional floating point operations. That said, to realize this with a trivial implementation is not enough and one needs to really look at the details to gain in performance. This tutorial program and the papers referenced above show how one can implement such a scheme and demonstrates the speedup that can be obtained.</p>
 <p><a class="anchor" id="Thetestcase"></a></p><h3>The test case</h3>
 <p>In this example, we consider the Poisson problem </p><p class="formulaDsp">
-<picture><source srcset="form_4652_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*} -
+<picture><source srcset="form_4592_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*} -
 \nabla \cdot a(\mathbf x) \nabla u &amp;=&amp; 1, \\ u &amp;=&amp; 0 \quad \text{on}\
-\partial \Omega \end{eqnarray*}" src="form_4652.png"/></picture>
+\partial \Omega \end{eqnarray*}" src="form_4592.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2178_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)$" src="form_2178.png"/></picture> is a variable coefficient. Below, we explain how to implement a matrix-vector product for this problem without explicitly forming the matrix. The construction can, of course, be done in a similar way for other equations as well.</p>
-<p>We choose as domain <picture><source srcset="form_4653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega=[0,1]^3$" src="form_4653.png"/></picture> and <picture><source srcset="form_4654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)=\frac{1}{0.05 +
-2\|\mathbf x\|^2}$" src="form_4654.png"/></picture>. Since the coefficient is symmetric around the origin but the domain is not, we will end up with a non-symmetric solution.</p>
+<p> where <picture><source srcset="form_2158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)$" src="form_2158.png"/></picture> is a variable coefficient. Below, we explain how to implement a matrix-vector product for this problem without explicitly forming the matrix. The construction can, of course, be done in a similar way for other equations as well.</p>
+<p>We choose as domain <picture><source srcset="form_4593_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega=[0,1]^3$" src="form_4593.png"/></picture> and <picture><source srcset="form_4594_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)=\frac{1}{0.05 +
+2\|\mathbf x\|^2}$" src="form_4594.png"/></picture>. Since the coefficient is symmetric around the origin but the domain is not, we will end up with a non-symmetric solution.</p>
 <p><a class="anchor" id="Matrixvectorproductimplementation"></a></p><h3>Matrix-vector product implementation</h3>
 <p>In order to find out how we can write a code that performs a matrix-vector product, but does not need to store the matrix elements, let us start at looking how a finite element matrix <em>A</em> is assembled:  </p><p class="formulaDsp">
-<picture><source srcset="form_4655_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_4595_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 A = \sum_{\mathrm{cell}=1}^{\mathrm{n\_cells}}
 P_{\mathrm{cell,{loc-glob}}}^T A_{\mathrm{cell}} P_{\mathrm{cell,{loc-glob}}}.
-\end{eqnarray*}" src="form_4655.png"/></picture>
+\end{eqnarray*}" src="form_4595.png"/></picture>
 </p>
 <p> In this formula, the matrix <em>P</em><sub>cell,loc-glob</sub> is a rectangular matrix that defines the index mapping from local degrees of freedom in the current cell to the global degrees of freedom. The information from which this operator can be built is usually encoded in the <code>local_dof_indices</code> variable and is used in the assembly calls filling matrices in deal.II. Here, <em>A</em><sub>cell</sub> denotes the cell matrix associated with <em>A</em>.</p>
 <p>If we are to perform a matrix-vector product, we can hence use that  </p><p class="formulaDsp">
-<picture><source srcset="form_4656_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_4596_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 y &amp;=&amp; A\cdot u = \left(\sum_{\text{cell}=1}^{\mathrm{n\_cells}} P_\mathrm{cell,{loc-glob}}^T
 A_\mathrm{cell} P_\mathrm{cell,{loc-glob}}\right) \cdot u
 \\
@@ -178,7 +178,7 @@
 \\
 &amp;=&amp; \sum_{\mathrm{cell}=1}^{\mathrm{n\_cells}} P_\mathrm{cell,{loc-glob}}^T
 v_\mathrm{cell},
-\end{eqnarray*}" src="form_4656.png"/></picture>
+\end{eqnarray*}" src="form_4596.png"/></picture>
 </p>
 <p> where <em>u</em><sub>cell</sub> are the values of <em>u</em> at the degrees of freedom of the respective cell, and <em>v</em><sub>cell</sub>=<em>A</em><sub>cell</sub><em>u</em><sub>cell</sub> correspondingly for the result. A naive attempt to implement the local action of the Laplacian would hence be to use the following code: </p><div class="fragment"><div class="line">Matrixfree&lt;dim&gt;::vmult (<a class="code hl_class" href="classVector.html">Vector&lt;double&gt;</a>       &amp;dst,</div>
 <div class="line">                        <span class="keyword">const</span> <a class="code hl_class" href="classVector.html">Vector&lt;double&gt;</a> &amp;src)<span class="keyword"> const</span></div>
@@ -237,43 +237,43 @@
 </div><!-- fragment --><p>Here we neglected boundary conditions as well as any hanging nodes we may have, though neither would be very difficult to include using the <a class="el" href="classAffineConstraints.html">AffineConstraints</a> class. Note how we first generate the local matrix in the usual way as a sum over all quadrature points for each local matrix entry. To form the actual product as expressed in the above formula, we extract the values of <code>src</code> of the cell-related degrees of freedom (the action of <em>P</em><sub>cell,loc-glob</sub>), multiply by the local matrix (the action of <em>A</em><sub>cell</sub>), and finally add the result to the destination vector <code>dst</code> (the action of <em>P</em><sub>cell,loc-glob</sub><sup>T</sup>, added over all the elements). It is not more difficult than that, in principle.</p>
 <p>While this code is completely correct, it is very slow. For every cell, we generate a local matrix, which takes three nested loops with loop length equal to the number of local degrees of freedom to compute. The multiplication itself is then done by two nested loops, which means that it is much cheaper.</p>
 <p>One way to improve this is to realize that conceptually the local matrix can be thought of as the product of three matrices,  </p><p class="formulaDsp">
-<picture><source srcset="form_4658_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_4597_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 A_\mathrm{cell} = B_\mathrm{cell}^T D_\mathrm{cell} B_\mathrm{cell},
-\end{eqnarray*}" src="form_4658.png"/></picture>
+\end{eqnarray*}" src="form_4597.png"/></picture>
 </p>
 <p> where for the example of the Laplace operator the (<em>q</em>*dim+<em>d,i</em>)-th element of <em>B</em><sub>cell</sub> is given by <code>fe_values.shape_grad(i,q)[d]</code>. This matrix consists of <code>dim*n_q_points</code> rows and <code>dofs_per_cell</code> columns. The matrix <em>D</em><sub>cell</sub> is diagonal and contains the values <code>fe_values.JxW(q) * coefficient_values[q]</code> (or, rather, <code>dim</code> copies of each of these values). This kind of representation of finite element matrices can often be found in the engineering literature.</p>
 <p>When the cell matrix is applied to a vector,  </p><p class="formulaDsp">
-<picture><source srcset="form_4659_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_4598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 A_\mathrm{cell}\cdot u_\mathrm{cell} = B_\mathrm{cell}^T
 D_\mathrm{cell} B_\mathrm{cell} \cdot u_\mathrm{cell},
-\end{eqnarray*}" src="form_4659.png"/></picture>
+\end{eqnarray*}" src="form_4598.png"/></picture>
 </p>
-<p> one would then not form the matrix-matrix products, but rather multiply one matrix at a time with a vector from right to left so that only three successive matrix-vector products are formed. This approach removes the three nested loops in the calculation of the local matrix, which reduces the complexity of the work on one cell from something like <picture><source srcset="form_4660_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal
-{O}(\mathrm{dofs\_per\_cell}^3)$" src="form_4660.png"/></picture> to <picture><source srcset="form_4661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal
-{O}(\mathrm{dofs\_per\_cell}^2)$" src="form_4661.png"/></picture>. An interpretation of this algorithm is that we first transform the vector of values on the local DoFs to a vector of gradients on the quadrature points. In the second loop, we multiply these gradients by the integration weight and the coefficient. The third loop applies the second gradient (in transposed form), so that we get back to a vector of (Laplacian) values on the cell dofs.</p>
+<p> one would then not form the matrix-matrix products, but rather multiply one matrix at a time with a vector from right to left so that only three successive matrix-vector products are formed. This approach removes the three nested loops in the calculation of the local matrix, which reduces the complexity of the work on one cell from something like <picture><source srcset="form_4599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal
+{O}(\mathrm{dofs\_per\_cell}^3)$" src="form_4599.png"/></picture> to <picture><source srcset="form_4600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal
+{O}(\mathrm{dofs\_per\_cell}^2)$" src="form_4600.png"/></picture>. An interpretation of this algorithm is that we first transform the vector of values on the local DoFs to a vector of gradients on the quadrature points. In the second loop, we multiply these gradients by the integration weight and the coefficient. The third loop applies the second gradient (in transposed form), so that we get back to a vector of (Laplacian) values on the cell dofs.</p>
 <p>The bottleneck in the above code is the operations done by the call to <a class="el" href="classFEValues.html#href_anchor">FEValues::reinit</a> for every <code>cell</code>, which take about as much time as the other steps together (at least if the mesh is unstructured; deal.II can recognize that the gradients are often unchanged on structured meshes). That is certainly not ideal and we would like to do better than this. What the reinit function does is to calculate the gradient in real space by transforming the gradient on the reference cell using the Jacobian of the transformation from real to reference cell. This is done for each basis function on the cell, for each quadrature point. The Jacobian does not depend on the basis function, but it is different on different quadrature points in general. If you only build the matrix once as we've done in all previous tutorial programs, there is nothing to be optimized since <a class="el" href="classFEValues.html#href_anchor">FEValues::reinit</a> needs to be called on every cell. In this process, the transformation is applied while computing the local matrix elements.</p>
 <p>In a matrix-free implementation, however, we will compute those integrals very often because iterative solvers will apply the matrix many times during the solution process. Therefore, we need to think about whether we may be able to cache some data that gets reused in the operator applications, i.e., integral computations. On the other hand, we realize that we must not cache too much data since otherwise we get back to the situation where memory access becomes the dominating factor. Therefore, we will not store the transformed gradients in the matrix <em>B</em>, as they would in general be different for each basis function and each quadrature point on every element for curved meshes.</p>
 <p>The trick is to factor out the Jacobian transformation and first apply the gradient on the reference cell only. This operation interpolates the vector of values on the local dofs to a vector of (unit-coordinate) gradients on the quadrature points. There, we first apply the Jacobian that we factored out from the gradient, then apply the weights of the quadrature, and finally apply the transposed Jacobian for preparing the third loop which tests by the gradients on the unit cell and sums over quadrature points.</p>
 <p>Let us again write this in terms of matrices. Let the matrix <em>B</em><sub>cell</sub> denote the cell-related gradient matrix, with each row containing the values on the quadrature points. It is constructed by a matrix-matrix product as </p><p class="formulaDsp">
-<picture><source srcset="form_4662_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*} B_\mathrm{cell} =
-J_\mathrm{cell}^{-\mathrm T} B_\mathrm{ref\_cell}, \end{eqnarray*}" src="form_4662.png"/></picture>
+<picture><source srcset="form_4601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*} B_\mathrm{cell} =
+J_\mathrm{cell}^{-\mathrm T} B_\mathrm{ref\_cell}, \end{eqnarray*}" src="form_4601.png"/></picture>
 </p>
 <p> where <em>B</em><sub>ref_cell</sub> denotes the gradient on the reference cell and <em>J</em><sup>-T</sup><sub>cell</sub> denotes the inverse transpose Jacobian of the transformation from unit to real cell (in the language of transformations, the operation represented by <em>J</em><sup>-T</sup><sub>cell</sub> represents a covariant transformation). <em>J</em><sup>-T</sup><sub>cell</sub> is block-diagonal, and the blocks size is equal to the dimension of the problem. Each diagonal block is the Jacobian transformation that goes from the reference cell to the real cell.</p>
 <p>Putting things together, we find that  </p><p class="formulaDsp">
-<picture><source srcset="form_4663_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_4602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 A_\mathrm{cell} = B_\mathrm{cell}^T D B_\mathrm{cell}
                 = B_\mathrm{ref\_cell}^T J_\mathrm{cell}^{-1}
                   D_\mathrm{cell}
                   J_\mathrm{cell}^{-\mathrm T} B_\mathrm{ref\_cell},
-\end{eqnarray*}" src="form_4663.png"/></picture>
+\end{eqnarray*}" src="form_4602.png"/></picture>
 </p>
 <p> so we calculate the product (starting the local product from the right)  </p><p class="formulaDsp">
-<picture><source srcset="form_4664_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_4603_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 v_\mathrm{cell} = B_\mathrm{ref\_cell}^T J_\mathrm{cell}^{-1} D J_\mathrm{cell}^{-\mathrm T}
 B_\mathrm{ref\_cell} u_\mathrm{cell}, \quad
 v = \sum_{\mathrm{cell}=1}^{\mathrm{n\_cells}} P_\mathrm{cell,{loc-glob}}^T
 v_\mathrm{cell}.
-\end{eqnarray*}" src="form_4664.png"/></picture>
+\end{eqnarray*}" src="form_4603.png"/></picture>
 </p>
  <div class="fragment"><div class="line">  <a class="code hl_class" href="classFEValues.html">FEValues&lt;dim&gt;</a> fe_values_reference (fe, quadrature_formula,</div>
 <div class="line">                                     <a class="code hl_enumvalue" href="group__feaccess.html#href_anchor">update_gradients</a>);</div>
@@ -351,11 +351,11 @@
 <div class="ttc" id="agroup__feaccess_html_ggaa94b67d2fdcc390690c523f28019e52fac654119724aff0c394743170ae949d18"><div class="ttname"><a href="group__feaccess.html#href_anchor">update_inverse_jacobians</a></div><div class="ttdeci">@ update_inverse_jacobians</div><div class="ttdoc">Volume element.</div><div class="ttdef"><b>Definition</b> <a href="fe__update__flags_8h_source.html#href_anchor">fe_update_flags.h:159</a></div></div>
 <div class="ttc" id="anamespaceGridGenerator_html_acea0cbcd68e52ce8113d1134b87de403"><div class="ttname"><a href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_cube</a></div><div class="ttdeci">void hyper_cube(Triangulation&lt; dim, spacedim &gt; &amp;tria, const double left=0., const double right=1., const bool colorize=false)</div></div>
 <div class="ttc" id="anamespacePhysics_1_1Elasticity_1_1Kinematics_html_a93f65b0385560a34ec1d3c5ec5a882b8"><div class="ttname"><a href="namespacePhysics_1_1Elasticity_1_1Kinematics.html#href_anchor">Physics::Elasticity::Kinematics::d</a></div><div class="ttdeci">SymmetricTensor&lt; 2, dim, Number &gt; d(const Tensor&lt; 2, dim, Number &gt; &amp;F, const Tensor&lt; 2, dim, Number &gt; &amp;dF_dt)</div></div>
-</div><!-- fragment --><p>Note how we create an additional <a class="el" href="classFEValues.html">FEValues</a> object for the reference cell gradients and how we initialize it to the reference cell. The actual derivative data is then applied by the inverse, transposed Jacobians (deal.II calls the Jacobian matrix from real to unit cell inverse_jacobian, as the forward transformation is from unit to real cell). The factor <picture><source srcset="form_4665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_\mathrm{cell}^{-1} D_\mathrm{cell} J_\mathrm{cell}^{-\mathrm T}$" src="form_4665.png"/></picture> is block-diagonal over quadrature. In this form, one realizes that variable coefficients (possibly expressed through a tensor) and general grid topologies with Jacobian transformations have a similar effect on the coefficient transforming the unit-cell derivatives.</p>
-<p>At this point, one might wonder why we store the matrix <picture><source srcset="form_4666_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_\mathrm{cell}^{-\mathrm T}$" src="form_4666.png"/></picture> and the coefficient separately, rather than only the complete factor <picture><source srcset="form_4667_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_\mathrm{cell}^{-1} D_\mathrm{cell}
-J_\mathrm{cell}^{-\mathrm T}$" src="form_4667.png"/></picture>. The latter would use less memory because the tensor is symmetric with six independent values in 3D, whereas for the former we would need nine entries for the inverse transposed Jacobian, one for the quadrature weight and Jacobian determinant, and one for the coefficient, totaling to 11 doubles. The reason is that the former approach allows for implementing generic differential operators through a common framework of cached data, whereas the latter specifically stores the coefficient for the Laplacian. In case applications demand for it, this specialization could pay off and would be worthwhile to consider. Note that the implementation in deal.II is smart enough to detect Cartesian or affine geometries where the Jacobian is constant throughout the cell and needs not be stored for every cell (and indeed often is the same over different cells as well).</p>
-<p>The final optimization that is most crucial from an operation count point of view is to make use of the tensor product structure in the basis functions. This is possible because we have factored out the gradient from the reference cell operation described by <em>B</em><sub>ref_cell</sub>, i.e., an interpolation operation over the completely regular data fields of the reference cell. We illustrate the process of complexity reduction in two space dimensions, but the same technique can be used in higher dimensions. On the reference cell, the basis functions are of the tensor product form <picture><source srcset="form_4668_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi(x,y) = \varphi_i(x) \varphi_j(y)$" src="form_4668.png"/></picture>. The part of the matrix <em>B</em><sub>ref_cell</sub> that computes the first component has the form <picture><source srcset="form_4669_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B_\mathrm{sub\_cell}^x = B_\mathrm{grad,x} \otimes B_\mathrm{val,y}$" src="form_4669.png"/></picture>, where <em>B</em><sub>grad,x</sub> and <em>B</em><sub>val,y</sub> contain the evaluation of all the 1D basis functions on all the 1D quadrature points. Forming a matrix <em>U</em> with <em>U(j,i)</em> containing the coefficient belonging to basis function <picture><source srcset="form_4670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i(x) \varphi_j(y)$" src="form_4670.png"/></picture>, we get <picture><source srcset="form_4671_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(B_\mathrm{grad,x} \otimes
-B_\mathrm{val,y})u_\mathrm{cell} = B_\mathrm{val,y} U B_\mathrm{grad,x}$" src="form_4671.png"/></picture>. This reduces the complexity for computing this product from <picture><source srcset="form_4672_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p^4$" src="form_4672.png"/></picture> to <picture><source srcset="form_4673_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2 p^3$" src="form_4673.png"/></picture>, where <em>p</em>-1 is the degree of the finite element (i.e., equivalently, <em>p</em> is the number of shape functions in each coordinate direction), or <picture><source srcset="form_4674_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p^{2d}$" src="form_4674.png"/></picture> to <picture><source srcset="form_4675_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d p^{d+1}$" src="form_4675.png"/></picture> in general. The reason why we look at the complexity in terms of the polynomial degree is since we want to be able to go to high degrees and possibly increase the polynomial degree <em>p</em> instead of the grid resolution. Good algorithms for moderate degrees like the ones used here are linear in the polynomial degree independent on the dimension, as opposed to matrix-based schemes or naive evaluation through <a class="el" href="classFEValues.html">FEValues</a>. The techniques used in the implementations of deal.II have been established in the spectral element community since the 1980s.</p>
+</div><!-- fragment --><p>Note how we create an additional <a class="el" href="classFEValues.html">FEValues</a> object for the reference cell gradients and how we initialize it to the reference cell. The actual derivative data is then applied by the inverse, transposed Jacobians (deal.II calls the Jacobian matrix from real to unit cell inverse_jacobian, as the forward transformation is from unit to real cell). The factor <picture><source srcset="form_4604_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_\mathrm{cell}^{-1} D_\mathrm{cell} J_\mathrm{cell}^{-\mathrm T}$" src="form_4604.png"/></picture> is block-diagonal over quadrature. In this form, one realizes that variable coefficients (possibly expressed through a tensor) and general grid topologies with Jacobian transformations have a similar effect on the coefficient transforming the unit-cell derivatives.</p>
+<p>At this point, one might wonder why we store the matrix <picture><source srcset="form_4605_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_\mathrm{cell}^{-\mathrm T}$" src="form_4605.png"/></picture> and the coefficient separately, rather than only the complete factor <picture><source srcset="form_4606_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_\mathrm{cell}^{-1} D_\mathrm{cell}
+J_\mathrm{cell}^{-\mathrm T}$" src="form_4606.png"/></picture>. The latter would use less memory because the tensor is symmetric with six independent values in 3D, whereas for the former we would need nine entries for the inverse transposed Jacobian, one for the quadrature weight and Jacobian determinant, and one for the coefficient, totaling to 11 doubles. The reason is that the former approach allows for implementing generic differential operators through a common framework of cached data, whereas the latter specifically stores the coefficient for the Laplacian. In case applications demand for it, this specialization could pay off and would be worthwhile to consider. Note that the implementation in deal.II is smart enough to detect Cartesian or affine geometries where the Jacobian is constant throughout the cell and needs not be stored for every cell (and indeed often is the same over different cells as well).</p>
+<p>The final optimization that is most crucial from an operation count point of view is to make use of the tensor product structure in the basis functions. This is possible because we have factored out the gradient from the reference cell operation described by <em>B</em><sub>ref_cell</sub>, i.e., an interpolation operation over the completely regular data fields of the reference cell. We illustrate the process of complexity reduction in two space dimensions, but the same technique can be used in higher dimensions. On the reference cell, the basis functions are of the tensor product form <picture><source srcset="form_4607_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi(x,y) = \varphi_i(x) \varphi_j(y)$" src="form_4607.png"/></picture>. The part of the matrix <em>B</em><sub>ref_cell</sub> that computes the first component has the form <picture><source srcset="form_4608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B_\mathrm{sub\_cell}^x = B_\mathrm{grad,x} \otimes B_\mathrm{val,y}$" src="form_4608.png"/></picture>, where <em>B</em><sub>grad,x</sub> and <em>B</em><sub>val,y</sub> contain the evaluation of all the 1D basis functions on all the 1D quadrature points. Forming a matrix <em>U</em> with <em>U(j,i)</em> containing the coefficient belonging to basis function <picture><source srcset="form_4609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i(x) \varphi_j(y)$" src="form_4609.png"/></picture>, we get <picture><source srcset="form_4610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(B_\mathrm{grad,x} \otimes
+B_\mathrm{val,y})u_\mathrm{cell} = B_\mathrm{val,y} U B_\mathrm{grad,x}$" src="form_4610.png"/></picture>. This reduces the complexity for computing this product from <picture><source srcset="form_4611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p^4$" src="form_4611.png"/></picture> to <picture><source srcset="form_4612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2 p^3$" src="form_4612.png"/></picture>, where <em>p</em>-1 is the degree of the finite element (i.e., equivalently, <em>p</em> is the number of shape functions in each coordinate direction), or <picture><source srcset="form_4613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p^{2d}$" src="form_4613.png"/></picture> to <picture><source srcset="form_4614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d p^{d+1}$" src="form_4614.png"/></picture> in general. The reason why we look at the complexity in terms of the polynomial degree is since we want to be able to go to high degrees and possibly increase the polynomial degree <em>p</em> instead of the grid resolution. Good algorithms for moderate degrees like the ones used here are linear in the polynomial degree independent on the dimension, as opposed to matrix-based schemes or naive evaluation through <a class="el" href="classFEValues.html">FEValues</a>. The techniques used in the implementations of deal.II have been established in the spectral element community since the 1980s.</p>
 <p>Implementing a matrix-free and cell-based finite element operator requires a somewhat different program design as compared to the usual matrix assembly codes shown in previous tutorial programs. The data structures for doing this are the <a class="el" href="classMatrixFree.html">MatrixFree</a> class that collects all data and issues a (parallel) loop over all cells and the <a class="el" href="classFEEvaluation.html">FEEvaluation</a> class that evaluates finite element basis functions by making use of the tensor product structure.</p>
 <p>The implementation of the matrix-free matrix-vector product shown in this tutorial is slower than a matrix-vector product using a sparse matrix for linear elements, but faster for all higher order elements thanks to the reduced complexity due to the tensor product structure and due to less memory transfer during computations. The impact of reduced memory transfer is particularly beneficial when working on a multicore processor where several processing units share access to memory. In that case, an algorithm which is computation bound will show almost perfect parallel speedup (apart from possible changes of the processor's clock frequency through turbo modes depending on how many cores are active), whereas an algorithm that is bound by memory transfer might not achieve similar speedup (even when the work is perfectly parallel and one could expect perfect scaling like in sparse matrix-vector products). An additional gain with this implementation is that we do not have to build the sparse matrix itself, which can also be quite expensive depending on the underlying differential equation. Moreover, the above framework is simple to generalize to nonlinear operations, as we demonstrate in <a class="el" href="step_48.html">step-48</a>.</p>
 <p><a class="anchor" id="Combinationwithmultigrid"></a></p><h3>Combination with multigrid</h3>
@@ -412,14 +412,14 @@
 <div class="line">  </div>
 <div class="line">  </div>
 <div class="ttc" id="anamespacedealii_html"><div class="ttname"><a href="namespacedealii.html">dealii</a></div><div class="ttdef"><b>Definition</b> <a href="namespace__dealii_8h_source.html#href_anchor">namespace_dealii.h:26</a></div></div>
-</div><!-- fragment --><p>To be efficient, the operations performed in the matrix-free implementation require knowledge of loop lengths at compile time, which are given by the degree of the finite element. Hence, we collect the values of the two template parameters that can be changed at one place in the code. Of course, one could make the degree of the finite element a run-time parameter by compiling the computational kernels for all degrees that are likely (say, between 1 and 6) and selecting the appropriate kernel at run time. Here, we simply choose second order <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements and choose dimension 3 as standard.</p>
+</div><!-- fragment --><p>To be efficient, the operations performed in the matrix-free implementation require knowledge of loop lengths at compile time, which are given by the degree of the finite element. Hence, we collect the values of the two template parameters that can be changed at one place in the code. Of course, one could make the degree of the finite element a run-time parameter by compiling the computational kernels for all degrees that are likely (say, between 1 and 6) and selecting the appropriate kernel at run time. Here, we simply choose second order <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements and choose dimension 3 as standard.</p>
 <div class="fragment"><div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> degree_finite_element = 2;</div>
 <div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimension             = 3;</div>
 <div class="line">  </div>
 <div class="line">  </div>
 </div><!-- fragment --><p><a class="anchor" id="Equationdata"></a> </p><h3>Equation data</h3>
-<p>We define a variable coefficient function for the Poisson problem. It is similar to the function in <a class="el" href="step_5.html">step-5</a> but we use the form <picture><source srcset="form_4676_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf
-   x)=\frac{1}{0.05 + 2\|\bf x\|^2}$" src="form_4676.png"/></picture> instead of a discontinuous one. It is merely to demonstrate the possibilities of this implementation, rather than making much sense physically. We define the coefficient in the same way as functions in earlier tutorial programs. There is one new function, namely a <code>value</code> method with template argument <code>number</code>.</p>
+<p>We define a variable coefficient function for the Poisson problem. It is similar to the function in <a class="el" href="step_5.html">step-5</a> but we use the form <picture><source srcset="form_4615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf
+   x)=\frac{1}{0.05 + 2\|\bf x\|^2}$" src="form_4615.png"/></picture> instead of a discontinuous one. It is merely to demonstrate the possibilities of this implementation, rather than making much sense physically. We define the coefficient in the same way as functions in earlier tutorial programs. There is one new function, namely a <code>value</code> method with template argument <code>number</code>.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keyword">class </span>Coefficient : <span class="keyword">public</span> <a class="code hl_class" href="classFunction.html">Function</a>&lt;dim&gt;</div>
 <div class="line">    {</div>
@@ -558,15 +558,15 @@
 <li>
 Tell the <a class="el" href="classFEEvaluation.html">FEEvaluation</a> object the (macro) cell we want to work on. </li>
 <li>
-Read in the values of the source vectors (<code>read_dof_values</code>), including the resolution of constraints. This stores <picture><source srcset="form_4677_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_\mathrm{cell}$" src="form_4677.png"/></picture> as described in the introduction. </li>
+Read in the values of the source vectors (<code>read_dof_values</code>), including the resolution of constraints. This stores <picture><source srcset="form_4616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_\mathrm{cell}$" src="form_4616.png"/></picture> as described in the introduction. </li>
 <li>
-Compute the unit-cell gradient (the evaluation of finite element functions). Since <a class="el" href="classFEEvaluation.html">FEEvaluation</a> can combine value computations with gradient computations, it uses a unified interface to all kinds of derivatives of order between zero and two. We only want gradients, no values and no second derivatives, so we set the function arguments to true in the gradient slot (second slot), and to false in the values slot (first slot). There is also a third slot for the Hessian which is false by default, so it needs not be given. Note that the <a class="el" href="classFEEvaluation.html">FEEvaluation</a> class internally evaluates shape functions in an efficient way where one dimension is worked on at a time (using the tensor product form of shape functions and quadrature points as mentioned in the introduction). This gives complexity equal to <picture><source srcset="form_4678_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O(d^2 (p+1)^{d+1})$" src="form_4678.png"/></picture> for polynomial degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> in <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> dimensions, compared to the naive approach with loops over all local degrees of freedom and quadrature points that is used in <a class="el" href="classFEValues.html">FEValues</a> and costs <picture><source srcset="form_4679_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O(d (p+1)^{2d})$" src="form_4679.png"/></picture>. </li>
+Compute the unit-cell gradient (the evaluation of finite element functions). Since <a class="el" href="classFEEvaluation.html">FEEvaluation</a> can combine value computations with gradient computations, it uses a unified interface to all kinds of derivatives of order between zero and two. We only want gradients, no values and no second derivatives, so we set the function arguments to true in the gradient slot (second slot), and to false in the values slot (first slot). There is also a third slot for the Hessian which is false by default, so it needs not be given. Note that the <a class="el" href="classFEEvaluation.html">FEEvaluation</a> class internally evaluates shape functions in an efficient way where one dimension is worked on at a time (using the tensor product form of shape functions and quadrature points as mentioned in the introduction). This gives complexity equal to <picture><source srcset="form_4617_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O(d^2 (p+1)^{d+1})$" src="form_4617.png"/></picture> for polynomial degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> in <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> dimensions, compared to the naive approach with loops over all local degrees of freedom and quadrature points that is used in <a class="el" href="classFEValues.html">FEValues</a> and costs <picture><source srcset="form_4618_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O(d (p+1)^{2d})$" src="form_4618.png"/></picture>. </li>
 <li>
 Next comes the application of the Jacobian transformation, the multiplication by the variable coefficient and the quadrature weight. <a class="el" href="classFEEvaluation.html">FEEvaluation</a> has an access function <code>get_gradient</code> that applies the Jacobian and returns the gradient in real space. Then, we just need to multiply by the (scalar) coefficient, and let the function <code>submit_gradient</code> apply the second Jacobian (for the test function) and the quadrature weight and Jacobian determinant (JxW). Note that the submitted gradient is stored in the same data field as where it is read from in <code>get_gradient</code>. Therefore, you need to make sure to not read from the same quadrature point again after having called <code>submit_gradient</code> on that particular quadrature point. In general, it is a good idea to copy the result of <code>get_gradient</code> when it is used more often than once. </li>
 <li>
 Next follows the summation over quadrature points for all test functions that corresponds to the actual integration step. For the Laplace operator, we just multiply by the gradient, so we call the integrate function with the respective argument set. If you have an equation where you test by both the values of the test functions and the gradients, both template arguments need to be set to true. Calling first the integrate function for values and then gradients in a separate call leads to wrong results, since the second call will internally overwrite the results from the first call. Note that there is no function argument for the second derivative for integrate step. </li>
 <li>
-Eventually, the local contributions in the vector <picture><source srcset="form_4680_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_\mathrm{cell}$" src="form_4680.png"/></picture> as mentioned in the introduction need to be added into the result vector (and constraints are applied). This is done with a call to <code>distribute_local_to_global</code>, the same name as the corresponding function in the <a class="el" href="classAffineConstraints.html">AffineConstraints</a> (only that we now store the local vector in the <a class="el" href="classFEEvaluation.html">FEEvaluation</a> object, as are the indices between local and global degrees of freedom). </li>
+Eventually, the local contributions in the vector <picture><source srcset="form_4619_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_\mathrm{cell}$" src="form_4619.png"/></picture> as mentioned in the introduction need to be added into the result vector (and constraints are applied). This is done with a call to <code>distribute_local_to_global</code>, the same name as the corresponding function in the <a class="el" href="classAffineConstraints.html">AffineConstraints</a> (only that we now store the local vector in the <a class="el" href="classFEEvaluation.html">FEEvaluation</a> object, as are the indices between local and global degrees of freedom). </li>
 </ol>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim, <span class="keywordtype">int</span> fe_degree, <span class="keyword">typename</span> number&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> LaplaceOperator&lt;dim, fe_degree, number&gt;::local_apply(</div>
@@ -650,9 +650,9 @@
 <div class="ttc" id="aclassDiagonalMatrix_html"><div class="ttname"><a href="classDiagonalMatrix.html">DiagonalMatrix</a></div><div class="ttdef"><b>Definition</b> <a href="diagonal__matrix_8h_source.html#href_anchor">diagonal_matrix.h:63</a></div></div>
 <div class="ttc" id="agroup__Exceptions_html_ga70a0bb353656e704acf927945277bbc6"><div class="ttname"><a href="group__Exceptions.html#href_anchor">Assert</a></div><div class="ttdeci">#define Assert(cond, exc)</div><div class="ttdef"><b>Definition</b> <a href="include_2deal_8II_2base_2exceptions_8h_source.html#href_anchor">exceptions.h:1614</a></div></div>
 </div><!-- fragment --><p>In the local compute loop, we compute the diagonal by a loop over all columns in the local matrix and putting the entry 1 in the <em>i</em>th slot and a zero entry in all other slots, i.e., we apply the cell-wise differential operator on one unit vector at a time. The inner part invoking <a class="el" href="classFEEvaluation.html#href_anchor">FEEvaluation::evaluate</a>, the loop over quadrature points, and FEEvalution::integrate, is exactly the same as in the local_apply function. Afterwards, we pick out the <em>i</em>th entry of the local result and put it to a temporary storage (as we overwrite all entries in the array behind <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluation::get_dof_value()</a> with the next loop iteration). Finally, the temporary storage is written to the destination vector. Note how we use <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluation::get_dof_value()</a> and <a class="el" href="classFEEvaluationBase.html#href_anchor">FEEvaluation::submit_dof_value()</a> to read and write to the data field that <a class="el" href="classFEEvaluation.html">FEEvaluation</a> uses for the integration on the one hand and writes into the global vector on the other hand.</p>
-<p>Given that we are only interested in the matrix diagonal, we simply throw away all other entries of the local matrix that have been computed along the way. While it might seem wasteful to compute the complete cell matrix and then throw away everything but the diagonal, the integration are so efficient that the computation does not take too much time. Note that the complexity of operator evaluation per element is <picture><source srcset="form_4681_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal
-   O((p+1)^{d+1})$" src="form_4681.png"/></picture> for polynomial degree <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>, so computing the whole matrix costs us <picture><source srcset="form_4682_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O((p+1)^{2d+1})$" src="form_4682.png"/></picture> operations, not too far away from <picture><source srcset="form_4683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O((p+1)^{2d})$" src="form_4683.png"/></picture> complexity for computing the diagonal with <a class="el" href="classFEValues.html">FEValues</a>. Since <a class="el" href="classFEEvaluation.html">FEEvaluation</a> is also considerably faster due to vectorization and other optimizations, the diagonal computation with this function is actually the fastest (simple) variant. (It would be possible to compute the diagonal with sum factorization techniques in <picture><source srcset="form_4681_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal
-   O((p+1)^{d+1})$" src="form_4681.png"/></picture> operations involving specifically adapted kernels&mdash;but since such kernels are only useful in that particular context and the diagonal computation is typically not on the critical path, they have not been implemented in deal.II.)</p>
+<p>Given that we are only interested in the matrix diagonal, we simply throw away all other entries of the local matrix that have been computed along the way. While it might seem wasteful to compute the complete cell matrix and then throw away everything but the diagonal, the integration are so efficient that the computation does not take too much time. Note that the complexity of operator evaluation per element is <picture><source srcset="form_4620_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal
+   O((p+1)^{d+1})$" src="form_4620.png"/></picture> for polynomial degree <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>, so computing the whole matrix costs us <picture><source srcset="form_4621_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O((p+1)^{2d+1})$" src="form_4621.png"/></picture> operations, not too far away from <picture><source srcset="form_4622_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O((p+1)^{2d})$" src="form_4622.png"/></picture> complexity for computing the diagonal with <a class="el" href="classFEValues.html">FEValues</a>. Since <a class="el" href="classFEEvaluation.html">FEEvaluation</a> is also considerably faster due to vectorization and other optimizations, the diagonal computation with this function is actually the fastest (simple) variant. (It would be possible to compute the diagonal with sum factorization techniques in <picture><source srcset="form_4620_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal
+   O((p+1)^{d+1})$" src="form_4620.png"/></picture> operations involving specifically adapted kernels&mdash;but since such kernels are only useful in that particular context and the diagonal computation is typically not on the critical path, they have not been implemented in deal.II.)</p>
 <p>Note that the code that calls distribute_local_to_global on the vector to accumulate the diagonal entries into the global matrix has some limitations. For operators with hanging node constraints that distribute an integral contribution of a constrained DoF to several other entries inside the distribute_local_to_global call, the vector interface used here does not exactly compute the diagonal entries, but lumps some contributions located on the diagonal of the local matrix that would end up in a off-diagonal position of the global matrix to the diagonal. The result is correct up to discretization accuracy as explained in <a href="http://dx.doi.org/10.4208/cicp.101214.021015a">Kormann (2016), section 5.3</a>, but not mathematically equal. In this tutorial program, no harm can happen because the diagonal is only used for the multigrid level matrices where no hanging node constraints appear.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim, <span class="keywordtype">int</span> fe_degree, <span class="keyword">typename</span> number&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> LaplaceOperator&lt;dim, fe_degree, number&gt;::local_compute_diagonal(</div>
@@ -928,7 +928,7 @@
 <div class="line">      time.restart();</div>
 <div class="line">  </div>
 <div class="ttc" id="aclassMGTransferMatrixFree_html"><div class="ttname"><a href="classMGTransferMatrixFree.html">MGTransferMatrixFree</a></div><div class="ttdef"><b>Definition</b> <a href="mg__transfer__matrix__free_8h_source.html#href_anchor">mg_transfer_matrix_free.h:58</a></div></div>
-</div><!-- fragment --><p>As a smoother, this tutorial program uses a Chebyshev iteration instead of SOR in <a class="el" href="step_16.html">step-16</a>. (SOR would be very difficult to implement because we do not have the matrix elements available explicitly, and it is difficult to make it work efficiently in parallel.) The smoother is initialized with our level matrices and the mandatory additional data for the Chebyshev smoother. We use a relatively high degree here (5), since matrix-vector products are comparably cheap. We choose to smooth out a range of <picture><source srcset="form_4684_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[1.2 \hat{\lambda}_{\max}/15,1.2 \hat{\lambda}_{\max}]$" src="form_4684.png"/></picture> in the smoother where <picture><source srcset="form_4685_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\lambda}_{\max}$" src="form_4685.png"/></picture> is an estimate of the largest eigenvalue (the factor 1.2 is applied inside <a class="el" href="classPreconditionChebyshev.html">PreconditionChebyshev</a>). In order to compute that eigenvalue, the Chebyshev initialization performs a few steps of a CG algorithm without preconditioner. Since the highest eigenvalue is usually the easiest one to find and a rough estimate is enough, we choose 10 iterations. Finally, we also set the inner preconditioner type in the Chebyshev method which is a Jacobi iteration. This is represented by the <a class="el" href="classDiagonalMatrix.html">DiagonalMatrix</a> class that gets the inverse diagonal entry provided by our LaplaceOperator class.</p>
+</div><!-- fragment --><p>As a smoother, this tutorial program uses a Chebyshev iteration instead of SOR in <a class="el" href="step_16.html">step-16</a>. (SOR would be very difficult to implement because we do not have the matrix elements available explicitly, and it is difficult to make it work efficiently in parallel.) The smoother is initialized with our level matrices and the mandatory additional data for the Chebyshev smoother. We use a relatively high degree here (5), since matrix-vector products are comparably cheap. We choose to smooth out a range of <picture><source srcset="form_4623_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[1.2 \hat{\lambda}_{\max}/15,1.2 \hat{\lambda}_{\max}]$" src="form_4623.png"/></picture> in the smoother where <picture><source srcset="form_4624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\lambda}_{\max}$" src="form_4624.png"/></picture> is an estimate of the largest eigenvalue (the factor 1.2 is applied inside <a class="el" href="classPreconditionChebyshev.html">PreconditionChebyshev</a>). In order to compute that eigenvalue, the Chebyshev initialization performs a few steps of a CG algorithm without preconditioner. Since the highest eigenvalue is usually the easiest one to find and a rough estimate is enough, we choose 10 iterations. Finally, we also set the inner preconditioner type in the Chebyshev method which is a Jacobi iteration. This is represented by the <a class="el" href="classDiagonalMatrix.html">DiagonalMatrix</a> class that gets the inverse diagonal entry provided by our LaplaceOperator class.</p>
 <p>On level zero, we initialize the smoother differently because we want to use the Chebyshev iteration as a solver. <a class="el" href="classPreconditionChebyshev.html">PreconditionChebyshev</a> allows the user to switch to solver mode where the number of iterations is internally chosen to the correct value. In the additional data object, this setting is activated by choosing the polynomial degree to <code><a class="el" href="namespacenumbers.html#href_anchor">numbers::invalid_unsigned_int</a></code>. The algorithm will then attack all eigenvalues between the smallest and largest one in the coarse level matrix. The number of steps in the Chebyshev smoother are chosen such that the Chebyshev convergence estimates guarantee to reduce the residual by the number specified in the variable <code>smoothing_range</code>. Note that for solving, <code>smoothing_range</code> is a relative tolerance and chosen smaller than one, in this case, we select three orders of magnitude, whereas it is a number larger than 1 when only selected eigenvalues are smoothed.</p>
 <p>From a computational point of view, the Chebyshev iteration is a very attractive coarse grid solver as long as the coarse size is moderate. This is because the Chebyshev method performs only matrix-vector products and vector updates, which typically parallelize better to the largest cluster size with more than a few tens of thousands of cores than inner product involved in other iterative methods. The former involves only local communication between neighbors in the (coarse) mesh, whereas the latter requires global communication over all processors.</p>
 <div class="fragment"><div class="line">      <span class="keyword">using </span>SmootherType =</div>
@@ -1141,7 +1141,7 @@
 <p><a class="anchor" id="Programoutput"></a></p><h3>Program output</h3>
 <p>Since this example solves the same problem as <a class="el" href="step_5.html">step-5</a> (except for a different coefficient), there is little to say about the solution. We show a picture anyway, illustrating the size of the solution through both isocontours and volume rendering:</p>
 <p><img src="https://www.dealii.org/images/steps/developer/step-37.solution.png" alt="" class="inline"/></p>
-<p>Of more interest is to evaluate some aspects of the multigrid solver. When we run this program in 2D for quadratic ( <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture>) elements, we get the following output (when run on one core in release mode): </p><div class="fragment"><div class="line">Vectorization over 2 doubles = 128 bits (SSE2)</div>
+<p>Of more interest is to evaluate some aspects of the multigrid solver. When we run this program in 2D for quadratic ( <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture>) elements, we get the following output (when run on one core in release mode): </p><div class="fragment"><div class="line">Vectorization over 2 doubles = 128 bits (SSE2)</div>
 <div class="line">Cycle 0</div>
 <div class="line">Number of degrees of freedom: 81</div>
 <div class="line">Total setup time               (wall) 0.00159788s</div>
@@ -1208,7 +1208,7 @@
 <div class="line">Number of degrees of freedom: 2146689</div>
 <div class="line">Total setup time               (wall) 4.96491s</div>
 <div class="line">Time solve (6 iterations)  (CPU/wall) 3.53126s/3.56142s</div>
-</div><!-- fragment --><p>Since it is so easy, we look at what happens if we increase the polynomial degree. When selecting the degree as four in 3D, i.e., on <picture><source srcset="form_4686_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal Q_4$" src="form_4686.png"/></picture> elements, by changing the line <code>const unsigned int degree_finite_element=4;</code> at the top of the program, we get the following program output:</p>
+</div><!-- fragment --><p>Since it is so easy, we look at what happens if we increase the polynomial degree. When selecting the degree as four in 3D, i.e., on <picture><source srcset="form_4625_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal Q_4$" src="form_4625.png"/></picture> elements, by changing the line <code>const unsigned int degree_finite_element=4;</code> at the top of the program, we get the following program output:</p>
 <div class="fragment"><div class="line">Vectorization over 2 doubles = 128 bits (SSE2)</div>
 <div class="line">Cycle 0</div>
 <div class="line">Number of degrees of freedom: 729</div>
@@ -1239,7 +1239,7 @@
 <div class="line">Number of degrees of freedom: 16974593</div>
 <div class="line">Total setup time               (wall) 27.8989s</div>
 <div class="line">Time solve (7 iterations)  (CPU/wall) 26.3705s/27.1077s</div>
-</div><!-- fragment --><p>Since <picture><source srcset="form_4686_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal Q_4$" src="form_4686.png"/></picture> elements on a certain mesh correspond to <picture><source srcset="form_4687_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal Q_2$" src="form_4687.png"/></picture> elements on half the mesh size, we can compare the run time at cycle 4 with fourth degree polynomials with cycle 5 using quadratic polynomials, both at 2.1 million degrees of freedom. The surprising effect is that the solver for <picture><source srcset="form_4686_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal Q_4$" src="form_4686.png"/></picture> element is actually slightly faster than for the quadratic case, despite using one more linear iteration. The effect that higher-degree polynomials are similarly fast or even faster than lower degree ones is one of the main strengths of matrix-free operator evaluation through sum factorization, see the <a href="http://dx.doi.org/10.1016/j.compfluid.2012.04.012">matrix-free paper</a>. This is fundamentally different to matrix-based methods that get more expensive per unknown as the polynomial degree increases and the coupling gets denser.</p>
+</div><!-- fragment --><p>Since <picture><source srcset="form_4625_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal Q_4$" src="form_4625.png"/></picture> elements on a certain mesh correspond to <picture><source srcset="form_4626_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal Q_2$" src="form_4626.png"/></picture> elements on half the mesh size, we can compare the run time at cycle 4 with fourth degree polynomials with cycle 5 using quadratic polynomials, both at 2.1 million degrees of freedom. The surprising effect is that the solver for <picture><source srcset="form_4625_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal Q_4$" src="form_4625.png"/></picture> element is actually slightly faster than for the quadratic case, despite using one more linear iteration. The effect that higher-degree polynomials are similarly fast or even faster than lower degree ones is one of the main strengths of matrix-free operator evaluation through sum factorization, see the <a href="http://dx.doi.org/10.1016/j.compfluid.2012.04.012">matrix-free paper</a>. This is fundamentally different to matrix-based methods that get more expensive per unknown as the polynomial degree increases and the coupling gets denser.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_38.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_38.html	2024-03-17 21:57:46.011250159 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_38.html	2024-03-17 21:57:46.015250184 +0000
@@ -130,52 +130,52 @@
  This material is based upon work supported by the National Science Foundation under Grant No. DMS-0914977. Any opinions, findings and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation (NSF). </em></p>
 <p><a class="anchor" id="Intro"></a></p>
 <p><a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
-<p>In this example, we show how to solve a partial differential equation (PDE) on a codimension one surface <picture><source srcset="form_4580_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma \subset \mathbb R^3$" src="form_4580.png"/></picture> made of quadrilaterals, i.e. on a surface in 3d or a line in 2d. We focus on the following elliptic second order PDE  </p><p class="formulaDsp">
-<picture><source srcset="form_4581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>In this example, we show how to solve a partial differential equation (PDE) on a codimension one surface <picture><source srcset="form_4642_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma \subset \mathbb R^3$" src="form_4642.png"/></picture> made of quadrilaterals, i.e. on a surface in 3d or a line in 2d. We focus on the following elliptic second order PDE  </p><p class="formulaDsp">
+<picture><source srcset="form_4643_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 -\Delta_\Gamma u &amp;= f \qquad \text{on } \qquad \Gamma,\\
 u  &amp;= g \qquad \text{on} \qquad \partial \Gamma,
-\end{align*}" src="form_4581.png"/></picture>
+\end{align*}" src="form_4643.png"/></picture>
 </p>
 <p> which generalized the Laplace equation we have previously solved in several of the early tutorial programs. Our implementation is based on <a class="el" href="step_4.html">step-4</a>. <a class="el" href="step_34.html">step-34</a> also solves problems on lower dimensional surfaces; however, there we only consider integral equations that do not involve derivatives on the solution variable, while here we actually have to investigate what it means to take derivatives of a function only defined on a (possibly curved) surface.</p>
-<p>In order to define the above operator, we start by introducing some notations. Let <picture><source srcset="form_4582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_S:\hat S \rightarrow S$" src="form_4582.png"/></picture> be a parameterization of a surface <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> from a reference element <picture><source srcset="form_4583_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat S \subset \mathbb R^2$" src="form_4583.png"/></picture>, i.e. each point <picture><source srcset="form_4584_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}\in\hat S$" src="form_4584.png"/></picture> induces a point <picture><source srcset="form_4585_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf
-  x}_S(\hat{\mathbf x}) \in S$" src="form_4585.png"/></picture>. Then let  </p><p class="formulaDsp">
-<picture><source srcset="form_4586_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>In order to define the above operator, we start by introducing some notations. Let <picture><source srcset="form_4644_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_S:\hat S \rightarrow S$" src="form_4644.png"/></picture> be a parameterization of a surface <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> from a reference element <picture><source srcset="form_4645_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat S \subset \mathbb R^2$" src="form_4645.png"/></picture>, i.e. each point <picture><source srcset="form_4646_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf x}\in\hat S$" src="form_4646.png"/></picture> induces a point <picture><source srcset="form_4647_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf
+  x}_S(\hat{\mathbf x}) \in S$" src="form_4647.png"/></picture>. Then let  </p><p class="formulaDsp">
+<picture><source srcset="form_4648_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 G_S\dealcoloneq (D \mathbf{x}_S)^T \ D \mathbf{x}_S
-\]" src="form_4586.png"/></picture>
+\]" src="form_4648.png"/></picture>
 </p>
-<p> denotes the corresponding first fundamental form, where <picture><source srcset="form_4587_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D
-\mathbf{x}_S=\left(\frac{\partial x_{S,i}(\hat{\mathbf x})}{\partial \hat x_j}\right)_{ij}$" src="form_4587.png"/></picture> is the derivative (Jacobian) of the mapping. In the following, <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> will be either the entire surface <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> or, more convenient for the finite element method, any face <picture><source srcset="form_4588_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S \in
-{\mathbb T}$" src="form_4588.png"/></picture>, where <picture><source srcset="form_4589_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb T}$" src="form_4589.png"/></picture> is a partition (triangulation) of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> constituted of quadrilaterals. We are now in position to define the tangential gradient of a function <picture><source srcset="form_4590_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v : S \rightarrow \mathbb
-R$" src="form_4590.png"/></picture> by  </p><p class="formulaDsp">
-<picture><source srcset="form_4591_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> denotes the corresponding first fundamental form, where <picture><source srcset="form_4649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D
+\mathbf{x}_S=\left(\frac{\partial x_{S,i}(\hat{\mathbf x})}{\partial \hat x_j}\right)_{ij}$" src="form_4649.png"/></picture> is the derivative (Jacobian) of the mapping. In the following, <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> will be either the entire surface <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> or, more convenient for the finite element method, any face <picture><source srcset="form_4650_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S \in
+{\mathbb T}$" src="form_4650.png"/></picture>, where <picture><source srcset="form_4651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb T}$" src="form_4651.png"/></picture> is a partition (triangulation) of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> constituted of quadrilaterals. We are now in position to define the tangential gradient of a function <picture><source srcset="form_4652_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v : S \rightarrow \mathbb
+R$" src="form_4652.png"/></picture> by  </p><p class="formulaDsp">
+<picture><source srcset="form_4653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 (\nabla_S v)\circ \mathbf x_S \dealcoloneq  D \mathbf x_S \ G_S^{-1} \ \nabla (v \circ \mathbf x_S).
-\]" src="form_4591.png"/></picture>
+\]" src="form_4653.png"/></picture>
 </p>
-<p> The surface Laplacian (also called the Laplace-Beltrami operator) is then defined as <picture><source srcset="form_4592_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta_S \dealcoloneq \nabla_S \cdot \nabla_S$" src="form_4592.png"/></picture>. Note that an alternate way to compute the surface gradient on smooth surfaces <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is  </p><p class="formulaDsp">
-<picture><source srcset="form_4593_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> The surface Laplacian (also called the Laplace-Beltrami operator) is then defined as <picture><source srcset="form_4654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta_S \dealcoloneq \nabla_S \cdot \nabla_S$" src="form_4654.png"/></picture>. Note that an alternate way to compute the surface gradient on smooth surfaces <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is  </p><p class="formulaDsp">
+<picture><source srcset="form_4655_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \nabla_S v = \nabla \tilde v - \mathbf n (\mathbf n \cdot \nabla \tilde v),
-\]" src="form_4593.png"/></picture>
+\]" src="form_4655.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_4594_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde v$" src="form_4594.png"/></picture> is a "smooth" extension of <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> in a tubular neighborhood of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> and <picture><source srcset="form_2957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n$" src="form_2957.png"/></picture> is the normal of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>. Since <picture><source srcset="form_4595_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta_S = \nabla_S \cdot \nabla_S$" src="form_4595.png"/></picture>, we deduce  </p><p class="formulaDsp">
-<picture><source srcset="form_4596_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_4656_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde v$" src="form_4656.png"/></picture> is a "smooth" extension of <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> in a tubular neighborhood of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> and <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n$" src="form_3020.png"/></picture> is the normal of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>. Since <picture><source srcset="form_4657_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta_S = \nabla_S \cdot \nabla_S$" src="form_4657.png"/></picture>, we deduce  </p><p class="formulaDsp">
+<picture><source srcset="form_4658_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \Delta_S v = \Delta \tilde v - \mathbf n^T \ D^2 \tilde v \ \mathbf n - (\mathbf n \cdot \nabla \tilde v) (\nabla \cdot \mathbf n - \mathbf n^T \ D \mathbf n \ \mathbf n ).
-\]" src="form_4596.png"/></picture>
+\]" src="form_4658.png"/></picture>
 </p>
-<p> Worth mentioning, the term <picture><source srcset="form_4597_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \cdot \mathbf n - \mathbf n \ D \mathbf n \ \mathbf n$" src="form_4597.png"/></picture> appearing in the above expression is the total curvature of the surface (sum of principal curvatures).</p>
-<p>As usual, we are only interested in weak solutions for which we can use <picture><source srcset="form_1094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1094.png"/></picture> finite elements (rather than requiring <picture><source srcset="form_478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^1$" src="form_478.png"/></picture> continuity as for strong solutions). We therefore resort to the weak formulation  </p><p class="formulaDsp">
-<picture><source srcset="form_4598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> Worth mentioning, the term <picture><source srcset="form_4659_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \cdot \mathbf n - \mathbf n \ D \mathbf n \ \mathbf n$" src="form_4659.png"/></picture> appearing in the above expression is the total curvature of the surface (sum of principal curvatures).</p>
+<p>As usual, we are only interested in weak solutions for which we can use <picture><source srcset="form_1087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1087.png"/></picture> finite elements (rather than requiring <picture><source srcset="form_478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^1$" src="form_478.png"/></picture> continuity as for strong solutions). We therefore resort to the weak formulation  </p><p class="formulaDsp">
+<picture><source srcset="form_4660_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_\Gamma \nabla_\Gamma u \cdot
 \nabla_\Gamma v = \int_\Gamma f \ v  \qquad \forall v \in H^1_0(\Gamma)
-\]" src="form_4598.png"/></picture>
+\]" src="form_4660.png"/></picture>
 </p>
-<p> and take advantage of the partition <picture><source srcset="form_4589_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb T}$" src="form_4589.png"/></picture> to further write  </p><p class="formulaDsp">
-<picture><source srcset="form_4599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> and take advantage of the partition <picture><source srcset="form_4651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb T}$" src="form_4651.png"/></picture> to further write  </p><p class="formulaDsp">
+<picture><source srcset="form_4661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \sum_{K\in  {\mathbb T}}\int_K \nabla_{K} u \cdot \nabla_{K} v = \sum_{K\in
   {\mathbb T}} \int_K f \ v  \qquad \forall v \in H^1_0(\Gamma).
-\]" src="form_4599.png"/></picture>
+\]" src="form_4661.png"/></picture>
 </p>
-<p> Moreover, each integral in the above expression is computed in the reference element <picture><source srcset="form_4600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat K \dealcoloneq [0,1]^2$" src="form_4600.png"/></picture> so that  </p><p class="formulaDsp">
-<picture><source srcset="form_4601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> Moreover, each integral in the above expression is computed in the reference element <picture><source srcset="form_4662_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat K \dealcoloneq [0,1]^2$" src="form_4662.png"/></picture> so that  </p><p class="formulaDsp">
+<picture><source srcset="form_4663_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 \int_{K} \nabla_{K} u \cdot \nabla_{K} v
 &amp;=
 \int_{\hat K} \nabla (u \circ \mathbf x_K)^T G_K^{-1} (D \mathbf
@@ -185,30 +185,30 @@
 &amp;=
 \int_{\hat K} \nabla (u \circ \mathbf x_K)^T G_K^{-1} \nabla (v \circ \mathbf x_K) \sqrt{\det
     (G_K)}
-\end{align*}" src="form_4601.png"/></picture>
+\end{align*}" src="form_4663.png"/></picture>
 </p>
 <p> and  </p><p class="formulaDsp">
-<picture><source srcset="form_4602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4664_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_{K} f \ v = \int_{\hat K} (f \circ \mathbf x_K) (v \circ \mathbf
 x_K)  \sqrt{\det
     (G_K)}.
-\]" src="form_4602.png"/></picture>
+\]" src="form_4664.png"/></picture>
 </p>
-<p> Finally, we use a quadrature formula defined by points <picture><source srcset="form_4603_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{p_l\}_{l=1}^N\subset
-\hat K$" src="form_4603.png"/></picture> and weights <picture><source srcset="form_4604_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{w_l\}_{l=1}^N \subset \mathbb R^+_*$" src="form_4604.png"/></picture> to evaluate the above integrals and obtain  </p><p class="formulaDsp">
-<picture><source srcset="form_4605_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[\int_{K} \nabla_{K} u \cdot \nabla_{K} v \approx \sum_{l=1}^N
+<p> Finally, we use a quadrature formula defined by points <picture><source srcset="form_4665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{p_l\}_{l=1}^N\subset
+\hat K$" src="form_4665.png"/></picture> and weights <picture><source srcset="form_4666_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{w_l\}_{l=1}^N \subset \mathbb R^+_*$" src="form_4666.png"/></picture> to evaluate the above integrals and obtain  </p><p class="formulaDsp">
+<picture><source srcset="form_4667_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[\int_{K} \nabla_{K} u \cdot \nabla_{K} v \approx \sum_{l=1}^N
  (\nabla (u \circ \mathbf x_K)(p_l))^T G^{-1}(p_l)  \nabla (v \circ \mathbf x_K)
 (p_l) \sqrt{\det (G(p_l))} \ w_l
-\]" src="form_4605.png"/></picture>
+\]" src="form_4667.png"/></picture>
 </p>
 <p> and  </p><p class="formulaDsp">
-<picture><source srcset="form_4606_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4668_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_{K} f \ v \approx \sum_{l=1}^N (f \circ \mathbf x_K)(p_l) \ (v \circ \mathbf x_K)(p_l) \sqrt{\det (G(p_l))} \ w_l.
-\]" src="form_4606.png"/></picture>
+\]" src="form_4668.png"/></picture>
 </p>
 <p>Fortunately, deal.II has already all the tools to compute the above expressions. In fact, they barely differ from the ways in which we solve the usual Laplacian, only requiring the surface coordinate mapping to be provided in the constructor of the <a class="el" href="classFEValues.html">FEValues</a> class. The surface description given, in the codimension one case, the two routines we need are the following:</p><ul>
-<li><code>FEValues::shape_grad(i,l)</code>, which returns <picture><source srcset="form_4607_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D \mathbf x_K(p_l) G^{-1}(p_l)D(\varphi_i \circ \mathbf x_K)$" src="form_4607.png"/></picture></li>
-<li><code>FEValues::JxW(l)</code>, which returns <picture><source srcset="form_4608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{\det (G(p_l))} \ w_l$" src="form_4608.png"/></picture>. This provides exactly the terms we need for our computations.</li>
+<li><code>FEValues::shape_grad(i,l)</code>, which returns <picture><source srcset="form_4669_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D \mathbf x_K(p_l) G^{-1}(p_l)D(\varphi_i \circ \mathbf x_K)$" src="form_4669.png"/></picture></li>
+<li><code>FEValues::JxW(l)</code>, which returns <picture><source srcset="form_4670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{\det (G(p_l))} \ w_l$" src="form_4670.png"/></picture>. This provides exactly the terms we need for our computations.</li>
 </ul>
 <p>On a more general note, details for the finite element approximation on surfaces can be found for instance in [Dziuk, in Partial differential equations and calculus of variations 1357, Lecture Notes in Math., 1988], [Demlow, SIAM J. Numer. Anal. 47(2), 2009] and [Bonito, Nochetto, and Pauletti, SIAM J. Numer. Anal. 48(5), 2010].</p>
 <p><a class="anchor" id="Testcase"></a></p><h3>Testcase</h3>
@@ -216,19 +216,19 @@
 <p>We produce one test case for a 2d problem and another one for 3d:</p>
 <ul>
 <li>
-<p class="startli">In 2d, let's choose as domain a half circle. On this domain, we choose the function <picture><source srcset="form_4609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)=-2x_1x_2$" src="form_4609.png"/></picture> as the solution. To compute the right hand side, we have to compute the surface Laplacian of the solution function. There are (at least) two ways to do that. The first one is to project away the normal derivative as described above using the natural extension of <picture><source srcset="form_25_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)$" src="form_25.png"/></picture> (still denoted by <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture>) over <picture><source srcset="form_4610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb R^d$" src="form_4610.png"/></picture>, i.e. to compute  </p><p class="formulaDsp">
-<picture><source srcset="form_4611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p class="startli">In 2d, let's choose as domain a half circle. On this domain, we choose the function <picture><source srcset="form_4671_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)=-2x_1x_2$" src="form_4671.png"/></picture> as the solution. To compute the right hand side, we have to compute the surface Laplacian of the solution function. There are (at least) two ways to do that. The first one is to project away the normal derivative as described above using the natural extension of <picture><source srcset="form_40_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)$" src="form_40.png"/></picture> (still denoted by <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture>) over <picture><source srcset="form_4672_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb R^d$" src="form_4672.png"/></picture>, i.e. to compute  </p><p class="formulaDsp">
+<picture><source srcset="form_4673_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     -\Delta_\Gamma u =  \Delta u - \mathbf n^T \ D^2 u \ \mathbf n - (\mathbf n \cdot \nabla u)\ \kappa,
-  \]" src="form_4611.png"/></picture>
+  \]" src="form_4673.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_3941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa$" src="form_3941.png"/></picture> is the total curvature of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>. Since we are on the unit circle, <picture><source srcset="form_4612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n=\mathbf x$" src="form_4612.png"/></picture> and <picture><source srcset="form_4613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa = 1$" src="form_4613.png"/></picture> so that  </p><p class="formulaDsp">
-<picture><source srcset="form_4614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_3941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa$" src="form_3941.png"/></picture> is the total curvature of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>. Since we are on the unit circle, <picture><source srcset="form_4674_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n=\mathbf x$" src="form_4674.png"/></picture> and <picture><source srcset="form_4675_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa = 1$" src="form_4675.png"/></picture> so that  </p><p class="formulaDsp">
+<picture><source srcset="form_4676_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     -\Delta_\Gamma u = -8 x_1x_2.
-  \]" src="form_4614.png"/></picture>
+  \]" src="form_4676.png"/></picture>
 </p>
-<p class="endli">A somewhat simpler way, at least for the current case of a curve in two-dimensional space, is to note that we can map the interval <picture><source srcset="form_4615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t \in
-  [0,\pi]$" src="form_4615.png"/></picture> onto the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> using the transformation <picture><source srcset="form_4616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x(t)= \left(\begin{array}{c} \cos t \\ \sin t \end{array}\right)$" src="form_4616.png"/></picture>. At position <picture><source srcset="form_4617_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x=\mathbf x(t)$" src="form_4617.png"/></picture>, the value of the solution is then <picture><source srcset="form_4618_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x(t)) = -2\cos t \sin t$" src="form_4618.png"/></picture>. Taking into account that the transformation is length preserving, i.e. a segment of length <picture><source srcset="form_446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dt$" src="form_446.png"/></picture> is mapped onto a piece of curve of exactly the same length, the tangential Laplacian then satisfies  </p><p class="formulaDsp">
-<picture><source srcset="form_4619_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p class="endli">A somewhat simpler way, at least for the current case of a curve in two-dimensional space, is to note that we can map the interval <picture><source srcset="form_4677_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t \in
+  [0,\pi]$" src="form_4677.png"/></picture> onto the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> using the transformation <picture><source srcset="form_4678_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x(t)= \left(\begin{array}{c} \cos t \\ \sin t \end{array}\right)$" src="form_4678.png"/></picture>. At position <picture><source srcset="form_4679_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x=\mathbf x(t)$" src="form_4679.png"/></picture>, the value of the solution is then <picture><source srcset="form_4680_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x(t)) = -2\cos t \sin t$" src="form_4680.png"/></picture>. Taking into account that the transformation is length preserving, i.e. a segment of length <picture><source srcset="form_446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$dt$" src="form_446.png"/></picture> is mapped onto a piece of curve of exactly the same length, the tangential Laplacian then satisfies  </p><p class="formulaDsp">
+<picture><source srcset="form_4681_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     \Delta_\Gamma u
     &amp;= \frac{d^2}{dt^2}(-2\cos t \sin t)
     = -2 \frac{d}{dt}(-\sin^2 t + \cos^2 t)
@@ -237,16 +237,16 @@
     &amp;= 8 \sin t \cos t
     \\
     &amp;= 8 x_1x_2,
-  \end{align*}" src="form_4619.png"/></picture>
+  \end{align*}" src="form_4681.png"/></picture>
 </p>
 <p> which is of course the same result as we had above.  </p>
 </li>
 <li>
-In 3d, the domain is again half of the surface of the unit ball, i.e. a half sphere or dome. We choose <picture><source srcset="form_4620_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)=-2\sin(\pi x_1)\cos(\pi x_2)e^{x_3}$" src="form_4620.png"/></picture> as the solution. We can compute the right hand side of the equation, <picture><source srcset="form_4621_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=-\Delta_\Gamma u$" src="form_4621.png"/></picture>, in the same way as the method above (with <picture><source srcset="form_4622_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa = 2$" src="form_4622.png"/></picture>), yielding an awkward and lengthy expression. You can find the full expression in the source code.  </li>
+In 3d, the domain is again half of the surface of the unit ball, i.e. a half sphere or dome. We choose <picture><source srcset="form_4682_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)=-2\sin(\pi x_1)\cos(\pi x_2)e^{x_3}$" src="form_4682.png"/></picture> as the solution. We can compute the right hand side of the equation, <picture><source srcset="form_4683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=-\Delta_\Gamma u$" src="form_4683.png"/></picture>, in the same way as the method above (with <picture><source srcset="form_4684_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa = 2$" src="form_4684.png"/></picture>), yielding an awkward and lengthy expression. You can find the full expression in the source code.  </li>
 </ul>
-<p>In the program, we will also compute the <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture> seminorm error of the solution. Since the solution function and its numerical approximation are only defined on the manifold, the obvious definition of this error functional is  <picture><source srcset="form_4623_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$| e |_{H^1(\Gamma)}
+<p>In the program, we will also compute the <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture> seminorm error of the solution. Since the solution function and its numerical approximation are only defined on the manifold, the obvious definition of this error functional is  <picture><source srcset="form_4685_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$| e |_{H^1(\Gamma)}
   = | \nabla_\Gamma e |_{L_2(\Gamma)}
-  = \left( \int_\Gamma | \nabla_\Gamma (u-u_h) |^2 \right)^{1/2}$" src="form_4623.png"/></picture>. This requires us to provide the <em>tangential</em> gradient <picture><source srcset="form_4624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\Gamma u$" src="form_4624.png"/></picture> to the function <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::integrate_difference</a> (first introduced in <a class="el" href="step_7.html">step-7</a>), which we will do by implementing the function <code>Solution::gradient</code> in the program below.</p>
+  = \left( \int_\Gamma | \nabla_\Gamma (u-u_h) |^2 \right)^{1/2}$" src="form_4685.png"/></picture>. This requires us to provide the <em>tangential</em> gradient <picture><source srcset="form_4686_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_\Gamma u$" src="form_4686.png"/></picture> to the function <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::integrate_difference</a> (first introduced in <a class="el" href="step_7.html">step-7</a>), which we will do by implementing the function <code>Solution::gradient</code> in the program below.</p>
 <p><a class="anchor" id="Implementation"></a></p><h3>Implementation</h3>
 <p>If you've read through <a class="el" href="step_4.html">step-4</a> and understand the discussion above of how solution and right hand side correspond to each other, you will be immediately familiar with this program as well. In fact, there are only two things that are of significance:</p>
 <ul>
@@ -520,7 +520,7 @@
 <div class="ttc" id="anamespaceGridGenerator_html_a8f1570ce89e692943efa1bef1d4d4446"><div class="ttname"><a href="namespaceGridGenerator.html#href_anchor">GridGenerator::extract_boundary_mesh</a></div><div class="ttdeci">return_type extract_boundary_mesh(const MeshType&lt; dim, spacedim &gt; &amp;volume_mesh, MeshType&lt; dim - 1, spacedim &gt; &amp;surface_mesh, const std::set&lt; types::boundary_id &gt; &amp;boundary_ids=std::set&lt; types::boundary_id &gt;())</div></div>
 <div class="ttc" id="anamespaceGridGenerator_html_af218d0939daf0732e3b507a27ea5d8e3"><div class="ttname"><a href="namespaceGridGenerator.html#href_anchor">GridGenerator::half_hyper_ball</a></div><div class="ttdeci">void half_hyper_ball(Triangulation&lt; dim &gt; &amp;tria, const Point&lt; dim &gt; &amp;center=Point&lt; dim &gt;(), const double radius=1.)</div></div>
 </div><!-- fragment --><p><a class="anchor" id="LaplaceBeltramiProblemassemble_system"></a> </p><h4>LaplaceBeltramiProblem::assemble_system</h4>
-<p>The following is the central function of this program, assembling the matrix that corresponds to the surface Laplacian (Laplace-Beltrami operator). Maybe surprisingly, it actually looks exactly the same as for the regular Laplace operator discussed in, for example, <a class="el" href="step_4.html">step-4</a>. The key is that the <a class="el" href="classFEValuesBase.html#href_anchor">FEValues::shape_grad()</a> function does the magic: It returns the surface gradient <picture><source srcset="form_4625_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_K \phi_i(x_q)$" src="form_4625.png"/></picture> of the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th shape function at the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point. The rest then does not need any changes either:</p>
+<p>The following is the central function of this program, assembling the matrix that corresponds to the surface Laplacian (Laplace-Beltrami operator). Maybe surprisingly, it actually looks exactly the same as for the regular Laplace operator discussed in, for example, <a class="el" href="step_4.html">step-4</a>. The key is that the <a class="el" href="classFEValuesBase.html#href_anchor">FEValues::shape_grad()</a> function does the magic: It returns the surface gradient <picture><source srcset="form_4687_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_K \phi_i(x_q)$" src="form_4687.png"/></picture> of the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th shape function at the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point. The rest then does not need any changes either:</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> spacedim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> LaplaceBeltramiProblem&lt;spacedim&gt;::assemble_system()</div>
 <div class="line">    {</div>
@@ -739,7 +739,7 @@
 </pre><p>Finally, the program produces graphical output that we can visualize. Here is a plot of the results:</p>
 <p><img src="https://www.dealii.org/images/steps/developer/step-38.solution-3d.png" alt="" class="inline"/></p>
 <p>The program also works for 1d curves in 2d, not just 2d surfaces in 3d. You can test this by changing the template argument in <code>main()</code> like so: </p><div class="fragment"><div class="line">LaplaceBeltramiProblem&lt;2&gt; laplace_beltrami;</div>
-</div><!-- fragment --><p> The domain is a curve in 2d, and we can visualize the solution by using the third dimension (and color) to denote the value of the function <picture><source srcset="form_3737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(x)$" src="form_3737.png"/></picture>. This then looks like so (the white curve is the domain, the colored curve is the solution extruded into the third dimension, clearly showing the change in sign as the curve moves from one quadrant of the domain into the adjacent one):</p>
+</div><!-- fragment --><p> The domain is a curve in 2d, and we can visualize the solution by using the third dimension (and color) to denote the value of the function <picture><source srcset="form_3841_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(x)$" src="form_3841.png"/></picture>. This then looks like so (the white curve is the domain, the colored curve is the solution extruded into the third dimension, clearly showing the change in sign as the curve moves from one quadrant of the domain into the adjacent one):</p>
 <p><img src="https://www.dealii.org/images/steps/developer/step-38.solution-2d.png" alt="" class="inline"/></p>
 <p><a class="anchor" id="extensions"></a> <a class="anchor" id="Possibilitiesforextensions"></a></p><h3>Possibilities for extensions</h3>
 <p>Computing on surfaces only becomes interesting if the surface is more interesting than just a half sphere. To achieve this, deal.II can read meshes that describe surfaces through the usual <a class="el" href="classGridIn.html">GridIn</a> class. Or, in case you have an analytic description, a simple mesh can sometimes be stretched and bent into a shape we are interested in.</p>
@@ -790,7 +790,7 @@
 <div class="ttc" id="aclassTriangulation_html_a6ad0b3fb24aae17f4668427a433dea19"><div class="ttname"><a href="classTriangulation.html#href_anchor">Triangulation::refine_global</a></div><div class="ttdeci">void refine_global(const unsigned int times=1)</div></div>
 <div class="ttc" id="anamespaceGridTools_html_a212e99cf0d923cebfa04f1d23fa60b04"><div class="ttname"><a href="namespaceGridTools.html#href_anchor">GridTools::transform</a></div><div class="ttdeci">void transform(const Transformation &amp;transformation, Triangulation&lt; dim, spacedim &gt; &amp;triangulation)</div></div>
 </div><!-- fragment --><p>Note that the only essential addition is the line marked with asterisks. It is worth pointing out one other thing here, though: because we detach the manifold description from the surface mesh, whenever we use a mapping object in the rest of the program, it has no curves boundary description to go on any more. Rather, it will have to use the implicit, <a class="el" href="classFlatManifold.html">FlatManifold</a> class that is used on all parts of the domain not explicitly assigned a different manifold object. Consequently, whether we use <a class="el" href="classMappingQ.html">MappingQ(2)</a>, <a class="el" href="classMappingQ.html">MappingQ(15)</a> or <a class="el" href="classMappingQ1.html">MappingQ1</a>, each cell of our mesh will be mapped using a bilinear approximation.</p>
-<p>All these drawbacks aside, the resulting pictures are still pretty. The only other differences to what's in <a class="el" href="step_38.html">step-38</a> is that we changed the right hand side to <picture><source srcset="form_4627_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)=\sin x_3$" src="form_4627.png"/></picture> and the boundary values (through the <code>Solution</code> class) to <picture><source srcset="form_4628_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)|_{\partial\Omega}=\cos x_3$" src="form_4628.png"/></picture>. Of course, we now no longer know the exact solution, so the computation of the error at the end of <code>LaplaceBeltrami::run</code> will yield a meaningless number.</p>
+<p>All these drawbacks aside, the resulting pictures are still pretty. The only other differences to what's in <a class="el" href="step_38.html">step-38</a> is that we changed the right hand side to <picture><source srcset="form_4688_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)=\sin x_3$" src="form_4688.png"/></picture> and the boundary values (through the <code>Solution</code> class) to <picture><source srcset="form_4689_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)|_{\partial\Omega}=\cos x_3$" src="form_4689.png"/></picture>. Of course, we now no longer know the exact solution, so the computation of the error at the end of <code>LaplaceBeltrami::run</code> will yield a meaningless number.</p>
 <p><a class="anchor" id="PlainProg"></a> </p><h1>The plain program</h1>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_39.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_39.html	2024-03-17 21:57:46.103250727 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_39.html	2024-03-17 21:57:46.107250752 +0000
@@ -114,18 +114,18 @@
 </ol> </td> </tr> </table>
  <a class="anchor" id="Intro"></a></p>
 <p>In this program, we use the interior penalty method and Nitsche's weak boundary conditions to solve Poisson's equation. We use multigrid methods on locally refined meshes, which are generated using a bulk criterion and a standard error estimator based on cell and face residuals. All operators are implemented using the <a class="el" href="namespaceMeshWorker.html">MeshWorker</a> interface.</p>
-<p>Like in <a class="el" href="step_12.html">step-12</a>, the discretization relies on finite element spaces, which are polynomial inside the mesh cells <picture><source srcset="form_4640_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\in \mathbb T_h$" src="form_4640.png"/></picture>, but have no continuity between cells. Since such functions have two values on each interior face <picture><source srcset="form_4641_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F\in \mathbb F_h^i$" src="form_4641.png"/></picture>, one from each side, we define mean value and jump operators as follows: let <em>K</em><sub>1</sub> and <em>K</em><sub>2</sub> be the two cells sharing a face, and let the traces of functions <em>u<sub>i</sub></em> and the outer normal vectors <b>n</b><em><sub>i</sub></em> be labeled accordingly. Then, on the face, we let  </p><p class="formulaDsp">
-<picture><source srcset="form_4642_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Like in <a class="el" href="step_12.html">step-12</a>, the discretization relies on finite element spaces, which are polynomial inside the mesh cells <picture><source srcset="form_4690_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\in \mathbb T_h$" src="form_4690.png"/></picture>, but have no continuity between cells. Since such functions have two values on each interior face <picture><source srcset="form_4691_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F\in \mathbb F_h^i$" src="form_4691.png"/></picture>, one from each side, we define mean value and jump operators as follows: let <em>K</em><sub>1</sub> and <em>K</em><sub>2</sub> be the two cells sharing a face, and let the traces of functions <em>u<sub>i</sub></em> and the outer normal vectors <b>n</b><em><sub>i</sub></em> be labeled accordingly. Then, on the face, we let  </p><p class="formulaDsp">
+<picture><source srcset="form_4692_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \average{ u } = \frac{u_1 + u_2}2
-\]" src="form_4642.png"/></picture>
+\]" src="form_4692.png"/></picture>
 </p>
 <p>Note, that if such an expression contains a normal vector, the averaging operator turns into a jump. The interior penalty method for the problem  </p><p class="formulaDsp">
-<picture><source srcset="form_4643_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4693_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   -\Delta u = f \text{ in }\Omega \qquad u = u^D \text{ on } \partial\Omega
-\]" src="form_4643.png"/></picture>
+\]" src="form_4693.png"/></picture>
 </p>
 <p> becomes  </p><p class="formulaDsp">
-<picture><source srcset="form_4644_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{multline*}
+<picture><source srcset="form_4694_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{multline*}
   \sum_{K\in \mathbb T_h} (\nabla u, \nabla v)_K
   \\
   + \sum_{F \in F_h^i} \biggl\{4\sigma_F (\average{ u \mathbf n}, \average{ v \mathbf n })_F
@@ -141,17 +141,17 @@
   = (f, v)_\Omega + \sum_{F \in F_h^b} \biggl\{
   2\sigma_F (u^D, v)_F - (\partial_n v,u^D)_F
   \biggr\}.
-\end{multline*}" src="form_4644.png"/></picture>
+\end{multline*}" src="form_4694.png"/></picture>
 </p>
-<p>Here, <picture><source srcset="form_4645_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_F$" src="form_4645.png"/></picture> is the penalty parameter, which is chosen as follows: for a face <em>F</em> of a cell <em>K</em>, compute the value  </p><p class="formulaDsp">
-<picture><source srcset="form_4646_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Here, <picture><source srcset="form_4695_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_F$" src="form_4695.png"/></picture> is the penalty parameter, which is chosen as follows: for a face <em>F</em> of a cell <em>K</em>, compute the value  </p><p class="formulaDsp">
+<picture><source srcset="form_4696_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \sigma_{F,K} = p(p+1) \frac{|F|_{d-1}}{|K|_d},
-\]" src="form_4646.png"/></picture>
+\]" src="form_4696.png"/></picture>
 </p>
-<p> where <em>p</em> is the polynomial degree of the finite element functions and <picture><source srcset="form_4647_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\cdot|_d$" src="form_4647.png"/></picture> and <picture><source srcset="form_4648_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\cdot|_{d-1}$" src="form_4648.png"/></picture> denote the <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> and <picture><source srcset="form_4649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d-1$" src="form_4649.png"/></picture> dimensional Hausdorff measure of the corresponding object. If the face is at the boundary, choose <picture><source srcset="form_4650_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_F = \sigma_{F,K}$" src="form_4650.png"/></picture>. For an interior face, we take the average of the two values at this face.</p>
+<p> where <em>p</em> is the polynomial degree of the finite element functions and <picture><source srcset="form_4697_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\cdot|_d$" src="form_4697.png"/></picture> and <picture><source srcset="form_4698_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\cdot|_{d-1}$" src="form_4698.png"/></picture> denote the <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> and <picture><source srcset="form_4699_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d-1$" src="form_4699.png"/></picture> dimensional Hausdorff measure of the corresponding object. If the face is at the boundary, choose <picture><source srcset="form_4700_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_F = \sigma_{F,K}$" src="form_4700.png"/></picture>. For an interior face, we take the average of the two values at this face.</p>
 <p>In our finite element program, we distinguish three different integrals, corresponding to the sums over cells, interior faces and boundary faces above. Since the <a class="el" href="group__MeshWorker.html#href_anchor">MeshWorker::loop</a> organizes the sums for us, we only need to implement the integrals over each mesh element. The class MatrixIntegrator below has these three functions for the left hand side of the formula, the class RHSIntegrator for the right.</p>
 <p>As we will see below, even the error estimate is of the same structure, since it can be written as  </p><p class="formulaDsp">
-<picture><source srcset="form_4651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4701_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \eta^2 &amp;= \eta_K^2 + \eta_F^2 + \eta_B^2
   \\
   \eta_K^2 &amp;= \sum_{K\in \mathbb T_h} h^2 \|f + \Delta u_h\|^2
@@ -160,7 +160,7 @@
     4 \sigma_F \| \average{u_h\mathbf n} \|^2 + h \|\average{\partial_n u_h}\|^2 \biggr\}
   \\
   \eta_B^2 &amp;= \sum_{F \in F_h^b} 2\sigma_F \| u_h-u^D \|^2.
-\end{align*}" src="form_4651.png"/></picture>
+\end{align*}" src="form_4701.png"/></picture>
 </p>
 <p>Thus, the functions for assembling matrices, right hand side and error estimates below exhibit that these loops are all generic and can be programmed in the same way.</p>
 <p>This program is related to <a class="el" href="step_12b.html">step-12b</a>, in that it uses <a class="el" href="namespaceMeshWorker.html">MeshWorker</a> and discontinuous Galerkin methods. While there, we solved an advection problem, here it is a diffusion problem. Here, we also use multigrid preconditioning and a theoretically justified error estimator, see Karakashian and Pascal (2003). The multilevel scheme was discussed in detail in Kanschat (2004). The adaptive iteration and its convergence have been discussed (for triangular meshes) in Hoppe, Kanschat, and Warburton (2009).</p>
@@ -450,10 +450,10 @@
 <div class="ttc" id="aclassFiniteElementData_html_a584a56a1611a86a04c8b9a26d0eb9f27"><div class="ttname"><a href="classFiniteElementData.html#href_anchor">FiniteElementData::tensor_degree</a></div><div class="ttdeci">unsigned int tensor_degree() const</div></div>
 </div><!-- fragment --><p>Finally we have an integrator for the error. Since the energy norm for discontinuous Galerkin problems not only involves the difference of the gradient inside the cells, but also the jump terms across faces and at the boundary, we cannot just use <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::integrate_difference()</a>. Instead, we use the <a class="el" href="namespaceMeshWorker.html">MeshWorker</a> interface to compute the error ourselves.</p>
 <p>There are several different ways to define this energy norm, but all of them are equivalent to each other uniformly with mesh size (some not uniformly with polynomial degree). Here, we choose </p><p class="formulaDsp">
-<picture><source srcset="form_4657_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \|u\|_{1,h} =
+<picture><source srcset="form_4702_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[ \|u\|_{1,h} =
    \sum_{K\in \mathbb T_h} \|\nabla u\|_K^2 + \sum_{F \in F_h^i}
    4\sigma_F\|\average{ u \mathbf n}\|^2_F + \sum_{F \in F_h^b}
-   2\sigma_F\|u\|^2_F \]" src="form_4657.png"/></picture>
+   2\sigma_F\|u\|^2_F \]" src="form_4702.png"/></picture>
 </p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keyword">class </span>ErrorIntegrator : <span class="keyword">public</span> <a class="code hl_class" href="classMeshWorker_1_1LocalIntegrator.html">MeshWorker::LocalIntegrator</a>&lt;dim&gt;</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_4.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_4.html	2024-03-17 21:57:46.159251073 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_4.html	2024-03-17 21:57:46.167251123 +0000
@@ -253,7 +253,7 @@
    but I don't actually know any such function with this name and these
    arguments."</p>
 <p>But back to the concrete case here: For this tutorial, we choose as right hand side the function <picture><source srcset="form_4703_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$4(x^4+y^4)$" src="form_4703.png"/></picture> in 2d, or <picture><source srcset="form_4704_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$4(x^4+y^4+z^4)$" src="form_4704.png"/></picture> in 3d. We could write this distinction using an if-statement on the space dimension, but here is a simple way that also allows us to use the same function in 1d (or in 4D, if you should desire to do so), by using a short loop. Fortunately, the compiler knows the size of the loop at compile time (remember that at the time when you define the template, the compiler doesn't know the value of <code>dim</code>, but when it later encounters a statement or declaration <code>RightHandSide&lt;2&gt;</code>, it will take the template, replace all occurrences of dim by 2 and compile the resulting function). In other words, at the time of compiling this function, the number of times the body will be executed is known, and the compiler can minimize the overhead needed for the loop; the result will be as fast as if we had used the formulas above right away.</p>
-<p>The last thing to note is that a <code><a class="el" href="classPoint.html">Point</a>&lt;dim&gt;</code> denotes a point in dim-dimensional space, and its individual components (i.e. <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>, <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>, ... coordinates) can be accessed using the () operator (in fact, the [] operator will work just as well) with indices starting at zero as usual in C and C++.</p>
+<p>The last thing to note is that a <code><a class="el" href="classPoint.html">Point</a>&lt;dim&gt;</code> denotes a point in dim-dimensional space, and its individual components (i.e. <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>, <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>, ... coordinates) can be accessed using the () operator (in fact, the [] operator will work just as well) with indices starting at zero as usual in C and C++.</p>
 <div class="fragment"><div class="line">  <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">  <span class="keywordtype">double</span> RightHandSide&lt;dim&gt;::value(<span class="keyword">const</span> <a class="code hl_class" href="classPoint.html">Point&lt;dim&gt;</a> &amp;p,</div>
 <div class="line">                                   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <span class="comment">/*component*/</span>) <span class="keyword">const</span></div>
@@ -267,7 +267,7 @@
 <div class="line">  </div>
 <div class="line">  </div>
 <div class="ttc" id="anamespacestd_html_aa951f50adf9841cf8def28819c19cc53"><div class="ttname"><a href="namespacestd.html#href_anchor">std::pow</a></div><div class="ttdeci">::VectorizedArray&lt; Number, width &gt; pow(const ::VectorizedArray&lt; Number, width &gt; &amp;, const Number p)</div><div class="ttdef"><b>Definition</b> <a href="vectorization_8h_source.html#href_anchor">vectorization.h:5962</a></div></div>
-</div><!-- fragment --><p>As boundary values, we choose <picture><source srcset="form_4707_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x^2+y^2$" src="form_4707.png"/></picture> in 2d, and <picture><source srcset="form_4708_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x^2+y^2+z^2$" src="form_4708.png"/></picture> in 3d. This happens to be equal to the square of the vector from the origin to the point at which we would like to evaluate the function, irrespective of the dimension. So that is what we return:</p>
+</div><!-- fragment --><p>As boundary values, we choose <picture><source srcset="form_4705_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x^2+y^2$" src="form_4705.png"/></picture> in 2d, and <picture><source srcset="form_4706_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x^2+y^2+z^2$" src="form_4706.png"/></picture> in 3d. This happens to be equal to the square of the vector from the origin to the point at which we would like to evaluate the function, irrespective of the dimension. So that is what we return:</p>
 <div class="fragment"><div class="line">  <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">  <span class="keywordtype">double</span> BoundaryValues&lt;dim&gt;::value(<span class="keyword">const</span> <a class="code hl_class" href="classPoint.html">Point&lt;dim&gt;</a> &amp;p,</div>
 <div class="line">                                    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <span class="comment">/*component*/</span>) <span class="keyword">const</span></div>
@@ -290,8 +290,8 @@
 <div class="line">  </div>
 <div class="line">  </div>
 </div><!-- fragment --><p><a class="anchor" id="Step4make_grid"></a> </p><h4>Step4::make_grid</h4>
-<p>Grid creation is something inherently dimension dependent. However, as long as the domains are sufficiently similar in 2d or 3d, the library can abstract for you. In our case, we would like to again solve on the square <picture><source srcset="form_4709_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]\times [-1,1]$" src="form_4709.png"/></picture> in 2d, or on the cube <picture><source srcset="form_4710_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1] \times [-1,1] \times
-   [-1,1]$" src="form_4710.png"/></picture> in 3d; both can be termed <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_cube()</a>, so we may use the same function in whatever dimension we are. Of course, the functions that create a hypercube in two and three dimensions are very much different, but that is something you need not care about. Let the library handle the difficult things.</p>
+<p>Grid creation is something inherently dimension dependent. However, as long as the domains are sufficiently similar in 2d or 3d, the library can abstract for you. In our case, we would like to again solve on the square <picture><source srcset="form_4707_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]\times [-1,1]$" src="form_4707.png"/></picture> in 2d, or on the cube <picture><source srcset="form_4708_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1] \times [-1,1] \times
+   [-1,1]$" src="form_4708.png"/></picture> in 3d; both can be termed <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_cube()</a>, so we may use the same function in whatever dimension we are. Of course, the functions that create a hypercube in two and three dimensions are very much different, but that is something you need not care about. Let the library handle the difficult things.</p>
 <div class="fragment"><div class="line">  <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">  <span class="keywordtype">void</span> Step4&lt;dim&gt;::make_grid()</div>
 <div class="line">  {</div>
@@ -383,7 +383,7 @@
 <div class="line">                              fe_values.JxW(q_index));            <span class="comment">// dx</span></div>
 <div class="line">            }</div>
 <div class="ttc" id="aclassint_html"><div class="ttname"><a href="classint.html">int</a></div></div>
-</div><!-- fragment --><p>As a final remark to these loops: when we assemble the local contributions into <code>cell_matrix(i,j)</code>, we have to multiply the gradients of shape functions <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> at point number q_index and multiply it with the scalar weights JxW. This is what actually happens: <code>fe_values.shape_grad(i,q_index)</code> returns a <code>dim</code> dimensional vector, represented by a <code><a class="el" href="classTensor.html">Tensor</a>&lt;1,dim&gt;</code> object, and the operator* that multiplies it with the result of <code>fe_values.shape_grad(j,q_index)</code> makes sure that the <code>dim</code> components of the two vectors are properly contracted, and the result is a scalar floating point number that then is multiplied with the weights. Internally, this operator* makes sure that this happens correctly for all <code>dim</code> components of the vectors, whether <code>dim</code> be 2, 3, or any other space dimension; from a user's perspective, this is not something worth bothering with, however, making things a lot simpler if one wants to write code dimension independently.</p>
+</div><!-- fragment --><p>As a final remark to these loops: when we assemble the local contributions into <code>cell_matrix(i,j)</code>, we have to multiply the gradients of shape functions <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> at point number q_index and multiply it with the scalar weights JxW. This is what actually happens: <code>fe_values.shape_grad(i,q_index)</code> returns a <code>dim</code> dimensional vector, represented by a <code><a class="el" href="classTensor.html">Tensor</a>&lt;1,dim&gt;</code> object, and the operator* that multiplies it with the result of <code>fe_values.shape_grad(j,q_index)</code> makes sure that the <code>dim</code> components of the two vectors are properly contracted, and the result is a scalar floating point number that then is multiplied with the weights. Internally, this operator* makes sure that this happens correctly for all <code>dim</code> components of the vectors, whether <code>dim</code> be 2, 3, or any other space dimension; from a user's perspective, this is not something worth bothering with, however, making things a lot simpler if one wants to write code dimension independently.</p>
 <p>With the local systems assembled, the transfer into the global matrix and right hand side is done exactly as before, but here we have again merged some loops for efficiency:</p>
 <div class="fragment"><div class="line">        cell-&gt;get_dof_indices(local_dof_indices);</div>
 <div class="line">        <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i : fe_values.dof_indices())</div>
@@ -508,7 +508,7 @@
 <tr>
 <td align="center"><img src="https://www.dealii.org/images/steps/developer/step-4.solution-3d.png" alt="" class="inline"/>  </td><td align="center"><img src="https://www.dealii.org/images/steps/developer/step-4.contours-3d.png" alt="" class="inline"/>   </td></tr>
 </table>
-<dl class="section note"><dt>Note</dt><dd>A final remark on visualization: the idea of visualization is to give insight, which is not the same as displaying information. In particular, it is easy to overload a picture with information, but while it shows more information it makes it also more difficult to glean insight. As an example, the program I used to generate these pictures, VisIt, by default puts tick marks on every axis, puts a big fat label "X Axis" on the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> axis and similar for the other axes, shows the file name from which the data was taken in the top left and the name of the user doing so and the time and date on the bottom right. None of this is important here: the axes are equally easy to make out because the tripod at the bottom left is still visible, and we know from the program that the domain is <picture><source srcset="form_4711_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^3$" src="form_4711.png"/></picture>, so there is no need for tick marks. As a consequence, I have switched off all the extraneous stuff in the picture: the art of visualization is to reduce the picture to those parts that are important to see what one wants to see, but no more.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>A final remark on visualization: the idea of visualization is to give insight, which is not the same as displaying information. In particular, it is easy to overload a picture with information, but while it shows more information it makes it also more difficult to glean insight. As an example, the program I used to generate these pictures, VisIt, by default puts tick marks on every axis, puts a big fat label "X Axis" on the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> axis and similar for the other axes, shows the file name from which the data was taken in the top left and the name of the user doing so and the time and date on the bottom right. None of this is important here: the axes are equally easy to make out because the tripod at the bottom left is still visible, and we know from the program that the domain is <picture><source srcset="form_4709_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^3$" src="form_4709.png"/></picture>, so there is no need for tick marks. As a consequence, I have switched off all the extraneous stuff in the picture: the art of visualization is to reduce the picture to those parts that are important to see what one wants to see, but no more.</dd></dl>
 <p><a class="anchor" id="postprocessing"></a> <a class="anchor" id="PostprocessingWhattodowiththesolution"></a></p><h3>Postprocessing: What to do with the solution? </h3>
 <p>This tutorial &ndash; like most of the other programs &ndash; principally only shows how to numerically approximate the solution of a partial differential equation, and then how to visualize this solution graphically. But solving a PDE is of course not the goal in most practical applications (unless you are a numerical methods developer and the <em>method</em> is the goal): We generally want to solve a PDE because we want to <em>extract information</em> from it. Examples for what people are interested in from solutions include the following:</p><ul>
 <li>Let's say you solve the equations of elasticity (which we will do in <a class="el" href="step_8.html">step-8</a>), then that's presumably because you want to know about the deformation of an elastic object under a given load. From an engineering perspective, what you then presumably want to learn is the degree of deformation of the object, say at a specific point; or you may want to know the maximum <a href="https://en.wikipedia.org/wiki/Stress_(mechanics)">stress</a> in order to determine whether the applied load exceeds the safe maximal stress the material can withstand.</li>
@@ -517,29 +517,29 @@
 </ul>
 <p>The point here is that from an engineering perspective, <em>solving</em> the PDE is only the first step. The second step is to <em>evaluate</em> the computed solution in order to extract relevant numbers that allow us to either <em>optimize a design</em>, or to <em>make decisions</em>. This second step is often called "postprocessing the solution".</p>
 <p>This program does not solve a solid or fluid mechanics problem, so we should try to illustrate postprocessing with something that makes sense in the context of the equation we solve here. The Poisson equation in two space dimensions is a model for the vertical deformation of a membrane that is clamped at the boundary and is subject to a vertical force. For this kind of situation, it makes sense to evaluate the <em>average vertical displacement</em>,  </p><p class="formulaDsp">
-<picture><source srcset="form_4712_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4710_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \bar u_h = \frac{\int_\Omega u_h(\mathbf x) \, dx}{|\Omega|},
-\]" src="form_4712.png"/></picture>
+\]" src="form_4710.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_4713_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\Omega| = \int_\Omega 1 \, dx$" src="form_4713.png"/></picture> is the area of the domain. To compute <picture><source srcset="form_4714_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u_h$" src="form_4714.png"/></picture>, as usual we replace integrals over the domain by a sum of integrals over cells,  </p><p class="formulaDsp">
-<picture><source srcset="form_4715_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_4711_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\Omega| = \int_\Omega 1 \, dx$" src="form_4711.png"/></picture> is the area of the domain. To compute <picture><source srcset="form_4712_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u_h$" src="form_4712.png"/></picture>, as usual we replace integrals over the domain by a sum of integrals over cells,  </p><p class="formulaDsp">
+<picture><source srcset="form_4713_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \int_\Omega u_h(\mathbf x) \, dx
   =
   \sum_K \int_K u_h(\mathbf x) \, dx,
-\]" src="form_4715.png"/></picture>
+\]" src="form_4713.png"/></picture>
 </p>
 <p> and then integrals over cells are approximated by quadrature:  </p><p class="formulaDsp">
-<picture><source srcset="form_4716_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4714_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \int_\Omega u_h(\mathbf x) \, dx
   &amp;=
   \sum_K \int_K u_h(\mathbf x) \, dx,
   \\
   &amp;=
   \sum_K \sum_q u_h(\mathbf x_q^K) w_q^K,
-\end{align*}" src="form_4716.png"/></picture>
+\end{align*}" src="form_4714.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_4717_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_q^K$" src="form_4717.png"/></picture> is the weight of the <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>th quadrature point evaluated on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. All of this is as always provided by the <a class="el" href="classFEValues.html">FEValues</a> class &ndash; the entry point for all integrals in deal.II.</p>
-<p>The actual implementation of this is straightforward once you know how to get the values of the solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> at the quadrature points of a cell. This functionality is provided by <a class="el" href="classFEValuesBase.html#href_anchor">FEValues::get_function_values()</a>, a function that takes a global vector of nodal values as input and returns a vector of function values at the quadrature points of the current cell. Using this function, to see how it all works together you can place the following code snippet anywhere in the program after the solution has been computed (the <code>output_results()</code> function seems like a good place to also do postprocessing, for example): </p><div class="fragment"><div class="line"><a class="code hl_class" href="classQGauss.html">QGauss&lt;dim&gt;</a>   quadrature_formula(fe.degree + 1);</div>
+<p> where <picture><source srcset="form_4715_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_q^K$" src="form_4715.png"/></picture> is the weight of the <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>th quadrature point evaluated on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. All of this is as always provided by the <a class="el" href="classFEValues.html">FEValues</a> class &ndash; the entry point for all integrals in deal.II.</p>
+<p>The actual implementation of this is straightforward once you know how to get the values of the solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> at the quadrature points of a cell. This functionality is provided by <a class="el" href="classFEValuesBase.html#href_anchor">FEValues::get_function_values()</a>, a function that takes a global vector of nodal values as input and returns a vector of function values at the quadrature points of the current cell. Using this function, to see how it all works together you can place the following code snippet anywhere in the program after the solution has been computed (the <code>output_results()</code> function seems like a good place to also do postprocessing, for example): </p><div class="fragment"><div class="line"><a class="code hl_class" href="classQGauss.html">QGauss&lt;dim&gt;</a>   quadrature_formula(fe.degree + 1);</div>
 <div class="line"><a class="code hl_class" href="classFEValues.html">FEValues&lt;dim&gt;</a> fe_values(fe,</div>
 <div class="line">                        quadrature_formula,</div>
 <div class="line">                        <a class="code hl_enumvalue" href="group__feaccess.html#href_anchor">update_values</a> | <a class="code hl_enumvalue" href="group__feaccess.html#href_anchor">update_JxW_values</a>);</div>
@@ -561,14 +561,14 @@
 <div class="line">  }</div>
 <div class="line">std::cout &lt;&lt; <span class="stringliteral">&quot;   Mean value of u=&quot;</span> &lt;&lt; integral_of_u / volume_of_omega</div>
 <div class="line">          &lt;&lt; std::endl;</div>
-</div><!-- fragment --><p> In this code snippet, we also compute the volume (or, since we are currently thinking about a two-dimensional situation: the area) <picture><source srcset="form_4718_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\Omega|$" src="form_4718.png"/></picture> by computing the integral <picture><source srcset="form_4713_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\Omega| = \int_\Omega 1 \, dx$" src="form_4713.png"/></picture> in exactly the same way, via quadrature. (We could avoid having to compute <picture><source srcset="form_4718_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\Omega|$" src="form_4718.png"/></picture> by hand here, using the fact that deal.II has a function for this: <a class="el" href="namespaceGridTools.html#href_anchor">GridTools::volume()</a>. That said, it is efficient to compute the two integrals concurrently in the same loop, and so that's what we do.)</p>
+</div><!-- fragment --><p> In this code snippet, we also compute the volume (or, since we are currently thinking about a two-dimensional situation: the area) <picture><source srcset="form_4716_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\Omega|$" src="form_4716.png"/></picture> by computing the integral <picture><source srcset="form_4711_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\Omega| = \int_\Omega 1 \, dx$" src="form_4711.png"/></picture> in exactly the same way, via quadrature. (We could avoid having to compute <picture><source srcset="form_4716_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\Omega|$" src="form_4716.png"/></picture> by hand here, using the fact that deal.II has a function for this: <a class="el" href="namespaceGridTools.html#href_anchor">GridTools::volume()</a>. That said, it is efficient to compute the two integrals concurrently in the same loop, and so that's what we do.)</p>
 <p>This program of course also solves the same Poisson equation in three space dimensions. In this situation, the Poisson equation is often used as a model for diffusion of either a physical species (say, of ink in a tank of water, or a pollutant in the air) or of energy (specifically, of thermal energy in a solid body). In that context, the quantity  </p><p class="formulaDsp">
-<picture><source srcset="form_4719_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4717_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \Phi_h = \int_{\partial\Omega} \nabla u_h(\mathbf x) \cdot \mathbf n(\mathbf x) \; dx
-\]" src="form_4719.png"/></picture>
+\]" src="form_4717.png"/></picture>
 </p>
 <p> is the <em>flux</em> of this species or energy across the boundary. (In actual physical models, one would also have to multiply the right hand side by a diffusivity or conductivity constant, but let us ignore this here.) In much the same way as before, we compute such integrals by splitting it over integrals of <em>faces</em> of cells, and then applying quadrature:  </p><p class="formulaDsp">
-<picture><source srcset="form_4720_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4718_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \Phi_h
   &amp;=
   \int_{\partial\Omega} \nabla u_h(\mathbf x) \cdot \mathbf n(\mathbf x) \; dx
@@ -582,9 +582,9 @@
   \sum_K
   \sum_{f \in \text{faces of @f$K@f$}, f\subset\partial\Omega}
   \sum_q \nabla u_h(\mathbf x_q^f) \cdot \mathbf n(\mathbf x_q^f) w_q^f,
-\end{align*}" src="form_4720.png"/></picture>
+\end{align*}" src="form_4718.png"/></picture>
 </p>
-<p> where now <picture><source srcset="form_4721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_q^f$" src="form_4721.png"/></picture> are the quadrature points located on face <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture>, and <picture><source srcset="form_4722_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_q^f$" src="form_4722.png"/></picture> are the weights associated with these faces. The second of the sum symbols loops over all faces of cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, but restricted to those that are actually at the boundary.</p>
+<p> where now <picture><source srcset="form_4719_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_q^f$" src="form_4719.png"/></picture> are the quadrature points located on face <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture>, and <picture><source srcset="form_4720_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_q^f$" src="form_4720.png"/></picture> are the weights associated with these faces. The second of the sum symbols loops over all faces of cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, but restricted to those that are actually at the boundary.</p>
 <p>This all is easily implemented by the following code that replaces the use of the <a class="el" href="classFEValues.html">FEValues</a> class (which is used for integrating over cells &ndash; i.e., domain integrals) by the <a class="el" href="classFEFaceValues.html">FEFaceValues</a> class (which is used for integrating over faces &ndash; i.e., boundary integrals): </p><div class="fragment"><div class="line"><a class="code hl_class" href="classQGauss.html">QGauss</a>&lt;dim - 1&gt;   face_quadrature_formula(fe.degree + 1);</div>
 <div class="line"><a class="code hl_class" href="classFEFaceValues.html">FEFaceValues&lt;dim&gt;</a> fe_face_values(fe,</div>
 <div class="line">                                 face_quadrature_formula,</div>
@@ -626,14 +626,14 @@
 <div class="line">   30 CG iterations needed to obtain convergence.</div>
 <div class="line">   Mean value of u=1.58058</div>
 <div class="line">   Flux=-8.29435</div>
-</div><!-- fragment --><p>This makes some sense: If you look, for example, at the 2d output above, the solution varies between values of 1 and 2, but with a larger part of the solution closer to one than two; so an average value of 1.33 for the mean value is reasonable. For the flux, recall that <picture><source srcset="form_4723_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u \cdot \mathbf n$" src="form_4723.png"/></picture> is the directional derivative in the normal direction &ndash; in other words, how the solution changes as we move from the interior of the domain towards the boundary. If you look at the 2d solution, you will realize that for most parts of the boundary, the solution <em>decreases</em> as we approach the boundary, so the normal derivative is negative &ndash; so if we integrate along the boundary, we should expect (and obtain!) a negative value.</p>
+</div><!-- fragment --><p>This makes some sense: If you look, for example, at the 2d output above, the solution varies between values of 1 and 2, but with a larger part of the solution closer to one than two; so an average value of 1.33 for the mean value is reasonable. For the flux, recall that <picture><source srcset="form_4721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u \cdot \mathbf n$" src="form_4721.png"/></picture> is the directional derivative in the normal direction &ndash; in other words, how the solution changes as we move from the interior of the domain towards the boundary. If you look at the 2d solution, you will realize that for most parts of the boundary, the solution <em>decreases</em> as we approach the boundary, so the normal derivative is negative &ndash; so if we integrate along the boundary, we should expect (and obtain!) a negative value.</p>
 <p><a class="anchor" id="extensions"></a> <a class="anchor" id="Possibilitiesforextensions"></a></p><h3>Possibilities for extensions</h3>
 <p>There are many ways with which one can play with this program. The simpler ones include essentially all the possibilities already discussed in the <a href="step_3.html#href_anchor" target="body">Possibilities for extensions in the documentation of step 3</a>, except that you will have to think about whether something now also applies to the 3d case discussed in the current program.</p>
 <p>It is also worthwhile considering the postprocessing options discussed above. The documentation states two numbers (the mean value and the normal flux) for both the 2d and 3d cases. Can we trust these numbers? We have convinced ourselves that at least the mean value is reasonable, and that the sign of the flux is probably correct. But are these numbers accurate?</p>
-<p>A general rule is that we should never trust a number unless we have verified it in some way. From the theory of finite element methods, we know that as we make the mesh finer and finer, the numerical solution <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> we compute here must converge to the exact solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture>. As a consequence, we also expect that <picture><source srcset="form_4724_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u_h \rightarrow \bar u$" src="form_4724.png"/></picture> and <picture><source srcset="form_4725_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_h \rightarrow \Phi$" src="form_4725.png"/></picture>, but that does not mean that for any given mesh <picture><source srcset="form_4714_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u_h$" src="form_4714.png"/></picture> or <picture><source srcset="form_4726_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_h$" src="form_4726.png"/></picture> are particularly accurate approximations.</p>
+<p>A general rule is that we should never trust a number unless we have verified it in some way. From the theory of finite element methods, we know that as we make the mesh finer and finer, the numerical solution <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> we compute here must converge to the exact solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture>. As a consequence, we also expect that <picture><source srcset="form_4722_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u_h \rightarrow \bar u$" src="form_4722.png"/></picture> and <picture><source srcset="form_4723_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_h \rightarrow \Phi$" src="form_4723.png"/></picture>, but that does not mean that for any given mesh <picture><source srcset="form_4712_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u_h$" src="form_4712.png"/></picture> or <picture><source srcset="form_4724_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_h$" src="form_4724.png"/></picture> are particularly accurate approximations.</p>
 <p>To test this kind of thing, we have already considered the convergence of a point value in <a class="el" href="step_3.html">step-3</a>. We can do the same here by selecting how many times the mesh is globally refined in the <code>make_grid()</code> function of this program. For the mean value of the solution, we then get the following numbers: </p><table align="center" class="doxtable">
 <tr>
-<th>#href_anchor"form_4714_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u_h$" src="form_4714.png"/></picture> in 2d </th><th><picture><source srcset="form_4714_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u_h$" src="form_4714.png"/></picture> in 3d  </th></tr>
+<th>#href_anchor"form_4712_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u_h$" src="form_4712.png"/></picture> in 2d </th><th><picture><source srcset="form_4712_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u_h$" src="form_4712.png"/></picture> in 3d  </th></tr>
 <tr>
 <td>4 </td><td>1.33303 </td><td>1.58058  </td></tr>
 <tr>
@@ -650,7 +650,7 @@
 <p>I did not have the patience to run the last two values for the 3d case &ndash; one needs quite a fine mesh for this, with correspondingly long run times. But we can be reasonably assured that values around 1.33 (for the 2d case) and 1.58 (for the 3d case) are about right &ndash; and at least for engineering applications, three digits of accuracy are good enough.</p>
 <p>The situation looks very different for the flux. Here, we get results such as the following: </p><table align="center" class="doxtable">
 <tr>
-<th># of refinements </th><th><picture><source srcset="form_4726_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_h$" src="form_4726.png"/></picture> in 2d </th><th><picture><source srcset="form_4726_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_h$" src="form_4726.png"/></picture> in 3d  </th></tr>
+<th># of refinements </th><th><picture><source srcset="form_4724_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_h$" src="form_4724.png"/></picture> in 2d </th><th><picture><source srcset="form_4724_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_h$" src="form_4724.png"/></picture> in 3d  </th></tr>
 <tr>
 <td>4 </td><td>-3.68956 </td><td>-8.29435  </td></tr>
 <tr>
@@ -670,15 +670,15 @@
 </table>
 <p>So this is not great. For the 2d case, we might infer that perhaps a value around -6.4 might be right if we just refine the mesh enough &ndash; though 11 refinements already leads to some 4,194,304 cells. In any case, the first number (the one shown in the beginning where we discussed postprocessing) was off by almost a factor of 2!</p>
 <p>For the 3d case, the last number shown was on a mesh with 2,097,152 cells; the next one would have had 8 times as many cells. In any case, the numbers mean that we can't even be sure that the first digit of that last number is correct! In other words, it was worth checking, or we would have just believed all of these numbers. In fact, that last column isn't even doing a particularly good job convincing us that the code might be correctly implemented.</p>
-<p>If you keep reading through the other tutorial programs, you will find many ways to make these sorts of computations more accurate and to come to believe that the flux actually does converge to its correct value. For example, we can dramatically increase the accuracy of the computation by using adaptive mesh refinement (<a class="el" href="step_6.html">step-6</a>) near the boundary, and in particular by using higher polynomial degree finite elements (also <a class="el" href="step_6.html">step-6</a>, but also <a class="el" href="step_7.html">step-7</a>). Using the latter, using cubic elements (polynomial degree 3), we can actually compute the flux pretty accurately even in 3d: <picture><source srcset="form_4727_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_h=-19.0148$" src="form_4727.png"/></picture> with 4 global refinement steps, and <picture><source srcset="form_4728_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_h=-19.1533$" src="form_4728.png"/></picture> with 5 refinement steps. These numbers are already pretty close together and give us a reasonable idea of the first two correct digits of the "true" answer.</p>
-<dl class="section note"><dt>Note</dt><dd>We would be remiss to not also comment on the fact that there are good theoretical reasons why computing the flux accurately appears to be so much more difficult than the average value. This has to do with the fact that finite element theory provides us with the estimate <picture><source srcset="form_4729_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|_{L_2(\Omega)} \le C h^2 \|\nabla^2u\|_{L_2(\Omega)}$" src="form_4729.png"/></picture> when using the linear elements this program uses &ndash; that is, for every global mesh refinement, <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> is reduced by a factor of two and the error goes down by a factor of 4. Now, the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> error is not equivalent to the error in the mean value, but the two are related: They are both integrals over the domain, using the <em>value</em> of the solution. We expect the mean value to converge no worse than the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of the error. At the same time, theory also provides us with this estimate:  <picture><source srcset="form_4731_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\nabla (u-u_h)\|_{L_2(\partial\Omega)} \le
-    C h^{1/2} \|\nabla^2u\|_{L_2(\Omega)}$" src="form_4731.png"/></picture>. The move from values to gradients reduces the convergence rates by one order, and the move from domain to boundary by another half order. Here, then, each refinement step reduces the error not by a factor of 4 any more, by only by a factor of <picture><source srcset="form_4732_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{2} \approx 1.4$" src="form_4732.png"/></picture>. It takes a lot of global refinement steps to reduce the error by, say, a factor ten or hundred, and this is reflected in the very slow convergence evidenced by the table. On the other hand, for cubic elements (i.e., polynomial degree 3), we would get <picture><source srcset="form_4733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|_{L_2(\Omega)} \le C h^4 \|\nabla^4u\|_{L_2(\Omega)}$" src="form_4733.png"/></picture> and after reduction by 1.5 orders, we would still have  <picture><source srcset="form_4734_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\nabla (u-u_h)\|_{L_2(\partial\Omega)} \le
-    C h^{2+1/2} \|\nabla^4u\|_{L_2(\Omega)}$" src="form_4734.png"/></picture>. This rate, <picture><source srcset="form_4735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(h^{2.5})$" src="form_4735.png"/></picture> is still quite rapid, and it is perhaps not surprising that we get much better answers with these higher order elements. This also illustrates that when trying to approximate anything that relates to a gradient of the solution, using linear elements (polynomial degree one) is really not a good choice at all.</dd>
+<p>If you keep reading through the other tutorial programs, you will find many ways to make these sorts of computations more accurate and to come to believe that the flux actually does converge to its correct value. For example, we can dramatically increase the accuracy of the computation by using adaptive mesh refinement (<a class="el" href="step_6.html">step-6</a>) near the boundary, and in particular by using higher polynomial degree finite elements (also <a class="el" href="step_6.html">step-6</a>, but also <a class="el" href="step_7.html">step-7</a>). Using the latter, using cubic elements (polynomial degree 3), we can actually compute the flux pretty accurately even in 3d: <picture><source srcset="form_4725_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_h=-19.0148$" src="form_4725.png"/></picture> with 4 global refinement steps, and <picture><source srcset="form_4726_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_h=-19.1533$" src="form_4726.png"/></picture> with 5 refinement steps. These numbers are already pretty close together and give us a reasonable idea of the first two correct digits of the "true" answer.</p>
+<dl class="section note"><dt>Note</dt><dd>We would be remiss to not also comment on the fact that there are good theoretical reasons why computing the flux accurately appears to be so much more difficult than the average value. This has to do with the fact that finite element theory provides us with the estimate <picture><source srcset="form_4727_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|_{L_2(\Omega)} \le C h^2 \|\nabla^2u\|_{L_2(\Omega)}$" src="form_4727.png"/></picture> when using the linear elements this program uses &ndash; that is, for every global mesh refinement, <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> is reduced by a factor of two and the error goes down by a factor of 4. Now, the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> error is not equivalent to the error in the mean value, but the two are related: They are both integrals over the domain, using the <em>value</em> of the solution. We expect the mean value to converge no worse than the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of the error. At the same time, theory also provides us with this estimate:  <picture><source srcset="form_4728_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\nabla (u-u_h)\|_{L_2(\partial\Omega)} \le
+    C h^{1/2} \|\nabla^2u\|_{L_2(\Omega)}$" src="form_4728.png"/></picture>. The move from values to gradients reduces the convergence rates by one order, and the move from domain to boundary by another half order. Here, then, each refinement step reduces the error not by a factor of 4 any more, by only by a factor of <picture><source srcset="form_4729_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{2} \approx 1.4$" src="form_4729.png"/></picture>. It takes a lot of global refinement steps to reduce the error by, say, a factor ten or hundred, and this is reflected in the very slow convergence evidenced by the table. On the other hand, for cubic elements (i.e., polynomial degree 3), we would get <picture><source srcset="form_4730_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|_{L_2(\Omega)} \le C h^4 \|\nabla^4u\|_{L_2(\Omega)}$" src="form_4730.png"/></picture> and after reduction by 1.5 orders, we would still have  <picture><source srcset="form_4731_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\nabla (u-u_h)\|_{L_2(\partial\Omega)} \le
+    C h^{2+1/2} \|\nabla^4u\|_{L_2(\Omega)}$" src="form_4731.png"/></picture>. This rate, <picture><source srcset="form_4732_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(h^{2.5})$" src="form_4732.png"/></picture> is still quite rapid, and it is perhaps not surprising that we get much better answers with these higher order elements. This also illustrates that when trying to approximate anything that relates to a gradient of the solution, using linear elements (polynomial degree one) is really not a good choice at all.</dd>
 <dd>
-In this very specific case, it turns out that we can actually compute the exact value of <picture><source srcset="form_4736_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi$" src="form_4736.png"/></picture>. This is because for the Poisson equation we compute the solution of here, <picture><source srcset="form_2342_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u = f$" src="form_2342.png"/></picture>, we can integrate over the domain, <picture><source srcset="form_4737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\int_\Omega \Delta u = \int_\Omega f$" src="form_4737.png"/></picture>, and then use that <picture><source srcset="form_4738_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta = \text{div}\;\text{grad}$" src="form_4738.png"/></picture>; this allows us to use the divergence theorem followed by multiplying by minus one to find <picture><source srcset="form_4739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{\partial\Omega} \nabla u \cdot n = -\int_\Omega f$" src="form_4739.png"/></picture>. The left hand side happens to be <picture><source srcset="form_4736_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi$" src="form_4736.png"/></picture>. For the specific right hand side <picture><source srcset="form_4740_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x_1,x_2)=4(x_1^4+x_2^4)$" src="form_4740.png"/></picture> we use in 2d, we then get <picture><source srcset="form_4741_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\int_\Omega f = -\int_{-1}^{1} \int_{-1}^{1} 4(x_1^4+x_2^4) \; dx_2\; dx_1
-  = -16 \left[\int_{-1}^{1} x^4 \; dx\right] = -16\times\frac 25$" src="form_4741.png"/></picture>, which has a numerical value of exactly -6.4 &ndash; right on with our guess above. In 3d, we can do the same and get that the exact value is  <picture><source srcset="form_4742_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\int_\Omega f =
+In this very specific case, it turns out that we can actually compute the exact value of <picture><source srcset="form_4733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi$" src="form_4733.png"/></picture>. This is because for the Poisson equation we compute the solution of here, <picture><source srcset="form_2382_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u = f$" src="form_2382.png"/></picture>, we can integrate over the domain, <picture><source srcset="form_4734_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\int_\Omega \Delta u = \int_\Omega f$" src="form_4734.png"/></picture>, and then use that <picture><source srcset="form_4735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta = \text{div}\;\text{grad}$" src="form_4735.png"/></picture>; this allows us to use the divergence theorem followed by multiplying by minus one to find <picture><source srcset="form_4736_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{\partial\Omega} \nabla u \cdot n = -\int_\Omega f$" src="form_4736.png"/></picture>. The left hand side happens to be <picture><source srcset="form_4733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi$" src="form_4733.png"/></picture>. For the specific right hand side <picture><source srcset="form_4737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x_1,x_2)=4(x_1^4+x_2^4)$" src="form_4737.png"/></picture> we use in 2d, we then get <picture><source srcset="form_4738_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\int_\Omega f = -\int_{-1}^{1} \int_{-1}^{1} 4(x_1^4+x_2^4) \; dx_2\; dx_1
+  = -16 \left[\int_{-1}^{1} x^4 \; dx\right] = -16\times\frac 25$" src="form_4738.png"/></picture>, which has a numerical value of exactly -6.4 &ndash; right on with our guess above. In 3d, we can do the same and get that the exact value is  <picture><source srcset="form_4739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\int_\Omega f =
    -\int_{-1}^{1} \int_{-1}^{1} \int_{-1}^{1} 4(x_1^4+x_2^4+x_3^4) \; dx_3 \; dx_2\; dx_1
-   = -48\times\frac 25=-19.2$" src="form_4742.png"/></picture>. What we found with cubic elements is then quite close to this exact value. Of course, in practice we almost never have exact values to compare with: If we could compute something on a piece of paper, we wouldn't have to solve the PDE numerically. But these sorts of situations make for excellent test cases that help us verify that our numerical solver works correctly. In many other cases, the literature contains numbers where others have already computed an answer accurately using their own software, and these are also often useful to compare against in verifying the correctness of our codes.</dd></dl>
+   = -48\times\frac 25=-19.2$" src="form_4739.png"/></picture>. What we found with cubic elements is then quite close to this exact value. Of course, in practice we almost never have exact values to compare with: If we could compute something on a piece of paper, we wouldn't have to solve the PDE numerically. But these sorts of situations make for excellent test cases that help us verify that our numerical solver works correctly. In many other cases, the literature contains numbers where others have already computed an answer accurately using their own software, and these are also often useful to compare against in verifying the correctness of our codes.</dd></dl>
 <p><a class="anchor" id="PlainProg"></a> </p><h1>The plain program</h1>
 <div class="fragment"><div class="line"><span class="comment">/* ---------------------------------------------------------------------</span></div>
 <div class="line"><span class="comment"> *</span></div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_40.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_40.html	2024-03-17 21:57:46.219251444 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_40.html	2024-03-17 21:57:46.223251469 +0000
@@ -136,13 +136,13 @@
 <p>A general overview of how this parallelization happens is described in the <a class="el" href="group__distributed.html">Parallel computing with multiple processors using distributed memory</a> documentation module. You should read it for a top-level overview before reading through the source code of this program. A concise discussion of many terms we will use in the program is also provided in the <a class="el" href="DEALGlossary.html#href_anchor">Distributed Computing paper</a>. It is probably worthwhile reading it for background information on how things work internally in this program.</p>
 <p><a class="anchor" id="Thetestcase"></a></p><h3>The testcase</h3>
 <p>This program essentially re-solves what we already do in <a class="el" href="step_6.html">step-6</a>, i.e. it solves the Laplace equation  </p><p class="formulaDsp">
-<picture><source srcset="form_4705_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4740_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   -\Delta u &amp;= f \qquad &amp;&amp;\text{in}\ \Omega=[0,1]^2, \\
   u &amp;= 0 \qquad &amp;&amp;\text{on}\ \partial\Omega.
-\end{align*}" src="form_4705.png"/></picture>
+\end{align*}" src="form_4740.png"/></picture>
 </p>
 <p> The difference of course is now that we want to do so on a mesh that may have a billion cells, with a billion or so degrees of freedom. There is no doubt that doing so is completely silly for such a simple problem, but the point of a tutorial program is, after all, not to do something useful but to show how useful programs can be implemented using deal.II. Be that as it may, to make things at least a tiny bit interesting, we choose the right hand side as a discontinuous function,  </p><p class="formulaDsp">
-<picture><source srcset="form_4706_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4741_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   f(x,y)
   =
   \left\{
@@ -151,7 +151,7 @@
     -1 &amp; \text{otherwise},
   \end{array}
   \right.
-\end{align*}" src="form_4706.png"/></picture>
+\end{align*}" src="form_4741.png"/></picture>
 </p>
 <p> so that the solution has a singularity along the sinusoidal line snaking its way through the domain. As a consequence, mesh refinement will be concentrated along this line. You can see this in the mesh picture shown below in the results section.</p>
 <p>Rather than continuing here and giving a long introduction, let us go straight to the program code. If you have read through <a class="el" href="step_6.html">step-6</a> and the <a class="el" href="group__distributed.html">Parallel computing with multiple processors using distributed memory</a> documentation module, most of things that are going to happen should be familiar to you already. In fact, comparing the two programs you will notice that the additional effort necessary to make things work in parallel is almost insignificant: the two programs have about the same number of lines of code (though <a class="el" href="step_6.html">step-6</a> spends more space on dealing with coefficients and output). In either case, the comments below will only be on the things that set <a class="el" href="step_40.html">step-40</a> apart from <a class="el" href="step_6.html">step-6</a> and that aren't already covered in the <a class="el" href="group__distributed.html">Parallel computing with multiple processors using distributed memory</a> documentation module.</p>
@@ -199,7 +199,7 @@
 <div class="line">  </div>
 </div><!-- fragment --><p>The following, however, will be new or be used in new roles. Let's walk through them. The first of these will provide the tools of the <a class="el" href="namespaceUtilities_1_1System.html">Utilities::System</a> namespace that we will use to query things like the number of processors associated with the current MPI universe, or the number within this universe the processor this job runs on is:</p>
 <div class="fragment"><div class="line">  #href_anchor"fragment"><div class="line">  #include &lt;deal.II/base/conditional_ostream.h&gt;</div>
-</div><!-- fragment --><p>After these preliminaries, here is where it becomes more interesting. As mentioned in the <a class="el" href="group__distributed.html">Parallel computing with multiple processors using distributed memory</a> module, one of the fundamental truths of solving problems on large numbers of processors is that there is no way for any processor to store everything (e.g. information about all cells in the mesh, all degrees of freedom, or the values of all elements of the solution vector). Rather, every processor will <em>own</em> a few of each of these and, if necessary, may <em>know</em> about a few more, for example the ones that are located on cells adjacent to the ones this processor owns itself. We typically call the latter <em>ghost cells</em>, <em>ghost nodes</em> or <em>ghost elements of a vector</em>. The point of this discussion here is that we need to have a way to indicate which elements a particular processor owns or need to know of. This is the realm of the <a class="el" href="classIndexSet.html">IndexSet</a> class: if there are a total of <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> cells, degrees of freedom, or vector elements, associated with (non-negative) integral indices <picture><source srcset="form_1581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,N)$" src="form_1581.png"/></picture>, then both the set of elements the current processor owns as well as the (possibly larger) set of indices it needs to know about are subsets of the set <picture><source srcset="form_1581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,N)$" src="form_1581.png"/></picture>. <a class="el" href="classIndexSet.html">IndexSet</a> is a class that stores subsets of this set in an efficient format:</p>
+</div><!-- fragment --><p>After these preliminaries, here is where it becomes more interesting. As mentioned in the <a class="el" href="group__distributed.html">Parallel computing with multiple processors using distributed memory</a> module, one of the fundamental truths of solving problems on large numbers of processors is that there is no way for any processor to store everything (e.g. information about all cells in the mesh, all degrees of freedom, or the values of all elements of the solution vector). Rather, every processor will <em>own</em> a few of each of these and, if necessary, may <em>know</em> about a few more, for example the ones that are located on cells adjacent to the ones this processor owns itself. We typically call the latter <em>ghost cells</em>, <em>ghost nodes</em> or <em>ghost elements of a vector</em>. The point of this discussion here is that we need to have a way to indicate which elements a particular processor owns or need to know of. This is the realm of the <a class="el" href="classIndexSet.html">IndexSet</a> class: if there are a total of <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> cells, degrees of freedom, or vector elements, associated with (non-negative) integral indices <picture><source srcset="form_1595_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,N)$" src="form_1595.png"/></picture>, then both the set of elements the current processor owns as well as the (possibly larger) set of indices it needs to know about are subsets of the set <picture><source srcset="form_1595_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,N)$" src="form_1595.png"/></picture>. <a class="el" href="classIndexSet.html">IndexSet</a> is a class that stores subsets of this set in an efficient format:</p>
 <div class="fragment"><div class="line">  #href_anchor"el" href="namespaceSparsityTools.html#a6b5444028171035f8ffb3fb5c3f8da08">SparsityTools::distribute_sparsity_pattern</a>. The role of this function will be explained below.</p>
 <div class="fragment"><div class="line">  #include &lt;deal.II/lac/sparsity_tools.h&gt;</div>
 </div><!-- fragment --><p>The final two, new header files provide the class <a class="el" href="classparallel_1_1distributed_1_1Triangulation.html">parallel::distributed::Triangulation</a> that provides meshes distributed across a potentially very large number of processors, while the second provides the namespace <a class="el" href="namespaceparallel_1_1distributed_1_1GridRefinement.html">parallel::distributed::GridRefinement</a> that offers functions that can adaptively refine such distributed meshes:</p>
@@ -688,7 +688,7 @@
 <td><img src="https://www.dealii.org/images/steps/developer/step-40.256.png" alt="" class="inline"/>  </td><td><img src="https://www.dealii.org/images/steps/developer/step-40.4096.png" alt="" class="inline"/>   </td></tr>
 </table>
 <p>What these graphs show is that all parts of the program scale linearly with the number of degrees of freedom. This time, lines are wobbly at the left as the size of local problems is too small. For more discussions of these results we refer to the <a class="el" href="DEALGlossary.html#href_anchor">Distributed Computing paper</a>.</p>
-<p>So how large are the largest problems one can solve? At the time of writing this problem, the limiting factor is that the program uses the BoomerAMG algebraic multigrid method from the <a href="http://acts.nersc.gov/hypre/" target="_top">Hypre package</a> as a preconditioner, which unfortunately uses signed 32-bit integers to index the elements of a distributed matrix. This limits the size of problems to <picture><source srcset="form_4730_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^{31}-1=2,147,483,647$" src="form_4730.png"/></picture> degrees of freedom. From the graphs above it is obvious that the scalability would extend beyond this number, and one could expect that given more than the 4,096 machines shown above would also further reduce the compute time. That said, one can certainly expect that this limit will eventually be lifted by the hypre developers.</p>
+<p>So how large are the largest problems one can solve? At the time of writing this problem, the limiting factor is that the program uses the BoomerAMG algebraic multigrid method from the <a href="http://acts.nersc.gov/hypre/" target="_top">Hypre package</a> as a preconditioner, which unfortunately uses signed 32-bit integers to index the elements of a distributed matrix. This limits the size of problems to <picture><source srcset="form_4742_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^{31}-1=2,147,483,647$" src="form_4742.png"/></picture> degrees of freedom. From the graphs above it is obvious that the scalability would extend beyond this number, and one could expect that given more than the 4,096 machines shown above would also further reduce the compute time. That said, one can certainly expect that this limit will eventually be lifted by the hypre developers.</p>
 <p>On the other hand, this does not mean that deal.II cannot solve bigger problems. Indeed, <a class="el" href="step_37.html">step-37</a> shows how one can solve problems that are not just a little, but very substantially larger than anything we have shown here.</p>
 <p><a class="anchor" id="extensions"></a> <a class="anchor" id="Possibilitiesforextensions"></a></p><h3>Possibilities for extensions</h3>
 <p>In a sense, this program is the ultimate solver for the Laplace equation: it can essentially solve the equation to whatever accuracy you want, if only you have enough processors available. Since the Laplace equation by itself is not terribly interesting at this level of accuracy, the more interesting possibilities for extension therefore concern not so much this program but what comes beyond it. For example, several of the other programs in this tutorial have significant run times, especially in 3d. It would therefore be interesting to use the techniques explained here to extend other programs to support parallel distributed computations. We have done this for <a class="el" href="step_31.html">step-31</a> in the <a class="el" href="step_32.html">step-32</a> tutorial program, but the same would apply to, for example, <a class="el" href="step_23.html">step-23</a> and <a class="el" href="step_25.html">step-25</a> for hyperbolic time dependent problems, <a class="el" href="step_33.html">step-33</a> for gas dynamics, or <a class="el" href="step_35.html">step-35</a> for the Navier-Stokes equations.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_41.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_41.html	2024-03-17 21:57:46.279251814 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_41.html	2024-03-17 21:57:46.283251839 +0000
@@ -155,10 +155,10 @@
  u(\mathbf x) &amp;\geq g(\mathbf x) &amp; &amp;\quad\text{in } \Omega
 \end{align*}" src="form_4744.png"/></picture>
 </p>
-<p> with <picture><source srcset="form_4745_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in H^2(\Omega)$" src="form_4745.png"/></picture>. <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> is a scalar valued function that denotes the vertical displacement of the membrane. The first equation is called equilibrium condition with a force of areal density <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture>. Here, we will consider this force to be gravity. The second one is known as Hooke's Law that says that the stresses <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture> are proportional to the gradient of the displacements <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> (the proportionality constant, often denoted by <picture><source srcset="form_1117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E$" src="form_1117.png"/></picture>, has been set to one here, without loss of generality; if it is constant, it can be put into the right hand side function). At the boundary we have zero Dirichlet conditions. Obviously, the first two equations can be combined to yield <picture><source srcset="form_4746_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u \ge f$" src="form_4746.png"/></picture>.</p>
-<p>Intuitively, gravity acts downward and so <picture><source srcset="form_996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_996.png"/></picture> is a negative function (we choose <picture><source srcset="form_4747_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=-10$" src="form_4747.png"/></picture> in this program). The first condition then means that the total force acting on the membrane is gravity plus something positive: namely the upward force that the obstacle exerts on the membrane at those places where the two of them are in contact. How big is this additional force? We don't know yet (and neither do we know "where" it actually acts) but it must be so that the membrane doesn't penetrate the obstacle.</p>
-<p>The fourth equality above together with the last inequality forms the obstacle condition which has to hold at every point of the whole domain. The latter of these two means that the membrane must be above the obstacle <picture><source srcset="form_24_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(\mathbf x)$" src="form_24.png"/></picture> everywhere. The second to last equation, often called the "complementarity
-condition" says that where the membrane is not in contact with the obstacle (i.e., those <picture><source srcset="form_216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_216.png"/></picture> where <picture><source srcset="form_4748_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x) - g(\mathbf x) \neq 0$" src="form_4748.png"/></picture>), then <picture><source srcset="form_2910_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u=f$" src="form_2910.png"/></picture> at these locations; in other words, no additional forces act there, as expected. On the other hand, where <picture><source srcset="form_4749_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=g$" src="form_4749.png"/></picture> we can have <picture><source srcset="form_4750_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u-f
+<p> with <picture><source srcset="form_4745_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in H^2(\Omega)$" src="form_4745.png"/></picture>. <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> is a scalar valued function that denotes the vertical displacement of the membrane. The first equation is called equilibrium condition with a force of areal density <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture>. Here, we will consider this force to be gravity. The second one is known as Hooke's Law that says that the stresses <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture> are proportional to the gradient of the displacements <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> (the proportionality constant, often denoted by <picture><source srcset="form_1123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E$" src="form_1123.png"/></picture>, has been set to one here, without loss of generality; if it is constant, it can be put into the right hand side function). At the boundary we have zero Dirichlet conditions. Obviously, the first two equations can be combined to yield <picture><source srcset="form_4746_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u \ge f$" src="form_4746.png"/></picture>.</p>
+<p>Intuitively, gravity acts downward and so <picture><source srcset="form_1030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\mathbf x)$" src="form_1030.png"/></picture> is a negative function (we choose <picture><source srcset="form_4747_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=-10$" src="form_4747.png"/></picture> in this program). The first condition then means that the total force acting on the membrane is gravity plus something positive: namely the upward force that the obstacle exerts on the membrane at those places where the two of them are in contact. How big is this additional force? We don't know yet (and neither do we know "where" it actually acts) but it must be so that the membrane doesn't penetrate the obstacle.</p>
+<p>The fourth equality above together with the last inequality forms the obstacle condition which has to hold at every point of the whole domain. The latter of these two means that the membrane must be above the obstacle <picture><source srcset="form_39_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(\mathbf x)$" src="form_39.png"/></picture> everywhere. The second to last equation, often called the "complementarity
+condition" says that where the membrane is not in contact with the obstacle (i.e., those <picture><source srcset="form_190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_190.png"/></picture> where <picture><source srcset="form_4748_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x) - g(\mathbf x) \neq 0$" src="form_4748.png"/></picture>), then <picture><source srcset="form_2828_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u=f$" src="form_2828.png"/></picture> at these locations; in other words, no additional forces act there, as expected. On the other hand, where <picture><source srcset="form_4749_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=g$" src="form_4749.png"/></picture> we can have <picture><source srcset="form_4750_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u-f
 \neq 0$" src="form_4750.png"/></picture>, i.e., there can be additional forces (though there don't have to be: it is possible for the membrane to just touch, not press against, the obstacle).</p>
 <p><a class="anchor" id="Derivationofthevariationalinequality"></a></p><h3>Derivation of the variational inequality</h3>
 <p>An obvious way to obtain the variational formulation of the obstacle problem is to consider the total potential energy:  </p><p class="formulaDsp">
@@ -177,22 +177,22 @@
 \end{equation*}" src="form_4754.png"/></picture>
 </p>
 <p> This set takes care of the third and fifth conditions above (the boundary values and the complementarity condition).</p>
-<p>Consider now the minimizer <picture><source srcset="form_4752_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in G$" src="form_4752.png"/></picture> of <picture><source srcset="form_1117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E$" src="form_1117.png"/></picture> and any other function <picture><source srcset="form_4755_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v\in
+<p>Consider now the minimizer <picture><source srcset="form_4752_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in G$" src="form_4752.png"/></picture> of <picture><source srcset="form_1123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E$" src="form_1123.png"/></picture> and any other function <picture><source srcset="form_4755_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v\in
 G$" src="form_4755.png"/></picture>. Then the function  </p><p class="formulaDsp">
 <picture><source srcset="form_4756_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
  F(\varepsilon) \dealcoloneq E(u+\varepsilon(v-u)),\quad\varepsilon\in\left[0,1\right],
 \end{equation*}" src="form_4756.png"/></picture>
 </p>
-<p> takes its minimum at <picture><source srcset="form_4757_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon = 0$" src="form_4757.png"/></picture> (because <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> is a minimizer of the energy functional <picture><source srcset="form_4758_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E(\cdot)$" src="form_4758.png"/></picture>), so that <picture><source srcset="form_4759_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(0)\geq 0$" src="form_4759.png"/></picture> for any choice of <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture>. Note that <picture><source srcset="form_4760_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u+\varepsilon(v-u) = (1-\varepsilon)u+\varepsilon v\in G$" src="form_4760.png"/></picture> because of the convexity of <picture><source srcset="form_1737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1737.png"/></picture>. If we compute <picture><source srcset="form_4761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(\varepsilon)\vert_{\varepsilon=0}$" src="form_4761.png"/></picture> it yields the variational formulation we are searching for:</p>
+<p> takes its minimum at <picture><source srcset="form_4757_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon = 0$" src="form_4757.png"/></picture> (because <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> is a minimizer of the energy functional <picture><source srcset="form_4758_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E(\cdot)$" src="form_4758.png"/></picture>), so that <picture><source srcset="form_4759_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(0)\geq 0$" src="form_4759.png"/></picture> for any choice of <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture>. Note that <picture><source srcset="form_4760_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u+\varepsilon(v-u) = (1-\varepsilon)u+\varepsilon v\in G$" src="form_4760.png"/></picture> because of the convexity of <picture><source srcset="form_1739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1739.png"/></picture>. If we compute <picture><source srcset="form_4761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(\varepsilon)\vert_{\varepsilon=0}$" src="form_4761.png"/></picture> it yields the variational formulation we are searching for:</p>
 <p><em>Find a function <picture><source srcset="form_4752_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in G$" src="form_4752.png"/></picture> with</em>  </p><p class="formulaDsp">
 <picture><source srcset="form_4762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
  \left(\nabla u, \nabla(v-u)\right) \geq \left(f,v-u\right) \quad \forall v\in G.
 \end{equation*}" src="form_4762.png"/></picture>
 </p>
-<p>This is the typical form of variational inequalities, where not just <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> appears in the bilinear form but in fact <picture><source srcset="form_4763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v-u$" src="form_4763.png"/></picture>. The reason is this: if <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> is not constrained, then we can find test functions <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> in <picture><source srcset="form_1737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1737.png"/></picture> so that <picture><source srcset="form_4763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v-u$" src="form_4763.png"/></picture> can have any sign. By choosing test functions <picture><source srcset="form_4764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_1,v_2$" src="form_4764.png"/></picture> so that <picture><source srcset="form_4765_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_1-u = -(v_2-u)$" src="form_4765.png"/></picture> it follows that the inequality can only hold for both <picture><source srcset="form_1473_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_1$" src="form_1473.png"/></picture> and <picture><source srcset="form_1474_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_2$" src="form_1474.png"/></picture> if the two sides are in fact equal, i.e., we obtain a variational equality.</p>
-<p>On the other hand, if <picture><source srcset="form_4749_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=g$" src="form_4749.png"/></picture> then <picture><source srcset="form_1737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1737.png"/></picture> only allows test functions <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> so that in fact <picture><source srcset="form_4766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v-u\ge 0$" src="form_4766.png"/></picture>. This means that we can't test the equation with both <picture><source srcset="form_4763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v-u$" src="form_4763.png"/></picture> and <picture><source srcset="form_4767_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-(v-u)$" src="form_4767.png"/></picture> as above, and so we can no longer conclude that the two sides are in fact equal. Thus, this mimics the way we have discussed the complementarity condition above.</p>
+<p>This is the typical form of variational inequalities, where not just <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> appears in the bilinear form but in fact <picture><source srcset="form_4763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v-u$" src="form_4763.png"/></picture>. The reason is this: if <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> is not constrained, then we can find test functions <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> in <picture><source srcset="form_1739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1739.png"/></picture> so that <picture><source srcset="form_4763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v-u$" src="form_4763.png"/></picture> can have any sign. By choosing test functions <picture><source srcset="form_4764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_1,v_2$" src="form_4764.png"/></picture> so that <picture><source srcset="form_4765_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_1-u = -(v_2-u)$" src="form_4765.png"/></picture> it follows that the inequality can only hold for both <picture><source srcset="form_1399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_1$" src="form_1399.png"/></picture> and <picture><source srcset="form_1400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_2$" src="form_1400.png"/></picture> if the two sides are in fact equal, i.e., we obtain a variational equality.</p>
+<p>On the other hand, if <picture><source srcset="form_4749_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=g$" src="form_4749.png"/></picture> then <picture><source srcset="form_1739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1739.png"/></picture> only allows test functions <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> so that in fact <picture><source srcset="form_4766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v-u\ge 0$" src="form_4766.png"/></picture>. This means that we can't test the equation with both <picture><source srcset="form_4763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v-u$" src="form_4763.png"/></picture> and <picture><source srcset="form_4767_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-(v-u)$" src="form_4767.png"/></picture> as above, and so we can no longer conclude that the two sides are in fact equal. Thus, this mimics the way we have discussed the complementarity condition above.</p>
 <p><a class="anchor" id="Formulationasasaddlepointproblem"></a></p><h3>Formulation as a saddle point problem</h3>
-<p>The variational inequality above is awkward to work with. We would therefore like to reformulate it as an equivalent saddle point problem. We introduce a Lagrange multiplier <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> and the convex cone <picture><source srcset="form_4768_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\subset V'$" src="form_4768.png"/></picture>, <picture><source srcset="form_4769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V'$" src="form_4769.png"/></picture> dual space of <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture>, <picture><source srcset="form_4770_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K \dealcoloneq \{\mu\in V': \langle\mu,v\rangle\geq 0,\quad \forall
+<p>The variational inequality above is awkward to work with. We would therefore like to reformulate it as an equivalent saddle point problem. We introduce a Lagrange multiplier <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> and the convex cone <picture><source srcset="form_4768_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\subset V'$" src="form_4768.png"/></picture>, <picture><source srcset="form_4769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V'$" src="form_4769.png"/></picture> dual space of <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture>, <picture><source srcset="form_4770_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K \dealcoloneq \{\mu\in V': \langle\mu,v\rangle\geq 0,\quad \forall
 v\in V, v \le 0 \}$" src="form_4770.png"/></picture> of Lagrange multipliers, where <picture><source srcset="form_4771_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\langle\cdot,\cdot\rangle$" src="form_4771.png"/></picture> denotes the duality pairing between <picture><source srcset="form_4769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V'$" src="form_4769.png"/></picture> and <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture>. Intuitively, <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is the cone of all "non-positive
 functions", except that <picture><source srcset="form_4772_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\subset (H_0^1)'$" src="form_4772.png"/></picture> and so contains other objects besides regular functions as well. This yields:</p>
 <p><em>Find <picture><source srcset="form_4773_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in V$" src="form_4773.png"/></picture> and <picture><source srcset="form_4774_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda\in K$" src="form_4774.png"/></picture> such that</em>  </p><p class="formulaDsp">
@@ -207,25 +207,25 @@
  b(u,\mu) &amp;\dealcoloneq \langle u,\mu\rangle,\quad &amp;&amp;u\in V,\quad\mu\in V'.
 \end{align*}" src="form_4776.png"/></picture>
 </p>
-<p> In other words, we can consider <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> as the negative of the additional, positive force that the obstacle exerts on the membrane. The inequality in the second line of the statement above only appears to have the wrong sign because we have <picture><source srcset="form_4777_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu-\lambda&lt;0$" src="form_4777.png"/></picture> at points where <picture><source srcset="form_4778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda=0$" src="form_4778.png"/></picture>, given the definition of <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>.</p>
+<p> In other words, we can consider <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> as the negative of the additional, positive force that the obstacle exerts on the membrane. The inequality in the second line of the statement above only appears to have the wrong sign because we have <picture><source srcset="form_4777_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu-\lambda&lt;0$" src="form_4777.png"/></picture> at points where <picture><source srcset="form_4778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda=0$" src="form_4778.png"/></picture>, given the definition of <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>.</p>
 <p>The existence and uniqueness of <picture><source srcset="form_4779_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(u,\lambda)\in V\times K$" src="form_4779.png"/></picture> of this saddle point problem has been stated in Glowinski, Lions and Tr&eacute;moli&egrave;res: Numerical Analysis of Variational Inequalities, North-Holland, 1981.</p>
 <p><a class="anchor" id="ActiveSetmethodstosolvethesaddlepointproblem"></a></p><h3>Active Set methods to solve the saddle point problem</h3>
 <p>There are different methods to solve the variational inequality. As one possibility you can understand the saddle point problem as a convex quadratic program (QP) with inequality constraints.</p>
-<p>To get there, let us assume that we discretize both <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> and <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> with the same finite element space, for example the usual <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_k$" src="form_165.png"/></picture> spaces. We would then get the equations  </p><p class="formulaDsp">
+<p>To get there, let us assume that we discretize both <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> and <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> with the same finite element space, for example the usual <picture><source srcset="form_139_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_k$" src="form_139.png"/></picture> spaces. We would then get the equations  </p><p class="formulaDsp">
 <picture><source srcset="form_4780_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
  &amp;A U + B\Lambda = F,&amp;\\
  &amp;[BU-G]_i \geq 0, \quad \Lambda_i \leq 0,\quad \Lambda_i[BU-G]_i = 0
 \qquad \forall i.&amp;
 \end{eqnarray*}" src="form_4780.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> on the chosen finite element space and the indices <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> above are for all degrees of freedom in the set <picture><source srcset="form_4781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cal S$" src="form_4781.png"/></picture> of degrees of freedom located in the interior of the domain (we have Dirichlet conditions on the perimeter). However, we can make our life simpler if we use a particular quadrature rule when assembling all terms that yield this mass matrix, namely a quadrature formula where quadrature points are only located at the interpolation points at which shape functions are defined; since all but one shape function are zero at these locations, we get a diagonal mass matrix with  </p><p class="formulaDsp">
+<p> where <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> is the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> on the chosen finite element space and the indices <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> above are for all degrees of freedom in the set <picture><source srcset="form_4781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cal S$" src="form_4781.png"/></picture> of degrees of freedom located in the interior of the domain (we have Dirichlet conditions on the perimeter). However, we can make our life simpler if we use a particular quadrature rule when assembling all terms that yield this mass matrix, namely a quadrature formula where quadrature points are only located at the interpolation points at which shape functions are defined; since all but one shape function are zero at these locations, we get a diagonal mass matrix with  </p><p class="formulaDsp">
 <picture><source srcset="form_4782_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   B_{ii} = \int_\Omega \varphi_i(\mathbf x)^2\ \textrm{d}x,
   \qquad
   B_{ij}=0 \ \text{for } i\neq j.
 \end{align*}" src="form_4782.png"/></picture>
 </p>
-<p> To define <picture><source srcset="form_1737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1737.png"/></picture> we use the same technique as for <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>. In other words, we define  </p><p class="formulaDsp">
+<p> To define <picture><source srcset="form_1739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1739.png"/></picture> we use the same technique as for <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture>. In other words, we define  </p><p class="formulaDsp">
 <picture><source srcset="form_4783_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   G_{i} = \int_\Omega g_h(x) \varphi_i(\mathbf x)\ \textrm{d}x,
 \end{align*}" src="form_4783.png"/></picture>
@@ -237,7 +237,7 @@
 \qquad \forall i\in{\cal S}.&amp;
 \end{eqnarray*}" src="form_4787.png"/></picture>
 </p>
-<p>Now we define for each degree of freedom <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> the function  </p><p class="formulaDsp">
+<p>Now we define for each degree of freedom <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> the function  </p><p class="formulaDsp">
 <picture><source srcset="form_4788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
  C([BU]_i,\Lambda_i) \dealcoloneq -\Lambda_i + \min\lbrace 0, \Lambda_i + c([BU]_i - G_i) \rbrace,
 \end{equation*}" src="form_4788.png"/></picture>
@@ -248,7 +248,7 @@
  C([BU]_i,\Lambda_i) = 0, \qquad \forall i\in{\cal S}.
 \end{equation*}" src="form_4792.png"/></picture>
 </p>
-<p> The primal-dual active set strategy we will use here is an iterative scheme which is based on this condition to predict the next active and inactive sets <picture><source srcset="form_4793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{A}_k$" src="form_4793.png"/></picture> and <picture><source srcset="form_4794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}_k$" src="form_4794.png"/></picture> (that is, those complementary sets of indices <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> for which <picture><source srcset="form_1650_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i$" src="form_1650.png"/></picture> is either equal to or not equal to the value of the obstacle <picture><source srcset="form_4795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B^{-1}G$" src="form_4795.png"/></picture>). For a more in depth treatment of this approach, see Hintermueller, Ito, Kunisch: The primal-dual active set strategy as a semismooth newton method, SIAM J. OPTIM., 2003, Vol. 13, No. 3, pp. 865-888.</p>
+<p> The primal-dual active set strategy we will use here is an iterative scheme which is based on this condition to predict the next active and inactive sets <picture><source srcset="form_4793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{A}_k$" src="form_4793.png"/></picture> and <picture><source srcset="form_4794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}_k$" src="form_4794.png"/></picture> (that is, those complementary sets of indices <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> for which <picture><source srcset="form_1653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i$" src="form_1653.png"/></picture> is either equal to or not equal to the value of the obstacle <picture><source srcset="form_4795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B^{-1}G$" src="form_4795.png"/></picture>). For a more in depth treatment of this approach, see Hintermueller, Ito, Kunisch: The primal-dual active set strategy as a semismooth newton method, SIAM J. OPTIM., 2003, Vol. 13, No. 3, pp. 865-888.</p>
 <p><a class="anchor" id="Theprimaldualactivesetalgorithm"></a></p><h3>The primal-dual active set algorithm</h3>
 <p>The algorithm for the primal-dual active set method works as follows (NOTE: <picture><source srcset="form_4796_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B = B^T$" src="form_4796.png"/></picture>):</p>
 <ol type="1">
@@ -483,7 +483,7 @@
 <div class="ttc" id="aclassTrilinosWrappers_1_1SparseMatrix_html"><div class="ttname"><a href="classTrilinosWrappers_1_1SparseMatrix.html">TrilinosWrappers::SparseMatrix</a></div><div class="ttdef"><b>Definition</b> <a href="trilinos__sparse__matrix_8h_source.html#href_anchor">trilinos_sparse_matrix.h:551</a></div></div>
 <div class="ttc" id="ap4est__wrappers_8cc_html_ace00f2f80d9780ef9aa1007e1c22c6a4"><div class="ttname"><a href="p4est__wrappers_8cc.html#href_anchor">triangulation</a></div><div class="ttdeci">const ::parallel::distributed::Triangulation&lt; dim, spacedim &gt; * triangulation</div><div class="ttdef"><b>Definition</b> <a href="p4est__wrappers_8cc_source.html#href_anchor">p4est_wrappers.cc:69</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="Righthandsideboundaryvaluesandtheobstacle"></a> </p><h3>Right hand side, boundary values, and the obstacle</h3>
-<p>In the following, we define classes that describe the right hand side function, the Dirichlet boundary values, and the height of the obstacle as a function of <picture><source srcset="form_216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_216.png"/></picture>. In all three cases, we derive these classes from <a class="el" href="classFunction.html">Function</a>&lt;dim&gt;, although in the case of <code>RightHandSide</code> and <code>Obstacle</code> this is more out of convention than necessity since we never pass such objects to the library. In any case, the definition of the right hand side and boundary values classes is obvious given our choice of <picture><source srcset="form_4747_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=-10$" src="form_4747.png"/></picture>, <picture><source srcset="form_4429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u|_{\partial\Omega}=0$" src="form_4429.png"/></picture>:</p>
+<p>In the following, we define classes that describe the right hand side function, the Dirichlet boundary values, and the height of the obstacle as a function of <picture><source srcset="form_190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_190.png"/></picture>. In all three cases, we derive these classes from <a class="el" href="classFunction.html">Function</a>&lt;dim&gt;, although in the case of <code>RightHandSide</code> and <code>Obstacle</code> this is more out of convention than necessity since we never pass such objects to the library. In any case, the definition of the right hand side and boundary values classes is obvious given our choice of <picture><source srcset="form_4747_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=-10$" src="form_4747.png"/></picture>, <picture><source srcset="form_4568_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u|_{\partial\Omega}=0$" src="form_4568.png"/></picture>:</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keyword">class </span>RightHandSide : <span class="keyword">public</span> <a class="code hl_class" href="classFunction.html">Function</a>&lt;dim&gt;</div>
 <div class="line">    {</div>
@@ -557,7 +557,7 @@
 <div class="line">  </div>
 <div class="line">  </div>
 </div><!-- fragment --><p><a class="anchor" id="ObstacleProblemmake_grid"></a> </p><h4>ObstacleProblem::make_grid</h4>
-<p>We solve our obstacle problem on the square <picture><source srcset="form_4709_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]\times [-1,1]$" src="form_4709.png"/></picture> in 2d. This function therefore just sets up one of the simplest possible meshes.</p>
+<p>We solve our obstacle problem on the square <picture><source srcset="form_4707_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]\times [-1,1]$" src="form_4707.png"/></picture> in 2d. This function therefore just sets up one of the simplest possible meshes.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> ObstacleProblem&lt;dim&gt;::make_grid()</div>
 <div class="line">    {</div>
@@ -683,7 +683,7 @@
 <div class="ttc" id="agroup__feaccess_html_ggaa94b67d2fdcc390690c523f28019e52facbcc430975fa6af05f75ca786dc6fe20"><div class="ttname"><a href="group__feaccess.html#href_anchor">update_gradients</a></div><div class="ttdeci">@ update_gradients</div><div class="ttdoc">Shape function gradients.</div><div class="ttdef"><b>Definition</b> <a href="fe__update__flags_8h_source.html#href_anchor">fe_update_flags.h:82</a></div></div>
 <div class="ttc" id="agroup__feaccess_html_ggaa94b67d2fdcc390690c523f28019e52fad5c9ff886b9615349a5d04a6c782df4a"><div class="ttname"><a href="group__feaccess.html#href_anchor">update_quadrature_points</a></div><div class="ttdeci">@ update_quadrature_points</div><div class="ttdoc">Transformed quadrature points.</div><div class="ttdef"><b>Definition</b> <a href="fe__update__flags_8h_source.html#href_anchor">fe_update_flags.h:128</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="ObstacleProblemassemble_mass_matrix_diagonal"></a> </p><h4>ObstacleProblem::assemble_mass_matrix_diagonal</h4>
-<p>The next function is used in the computation of the diagonal mass matrix <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> used to scale variables in the active set method. As discussed in the introduction, we get the mass matrix to be diagonal by choosing the trapezoidal rule for quadrature. Doing so we don't really need the triple loop over quadrature points, indices <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> and indices <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> any more and can, instead, just use a double loop. The rest of the function is obvious given what we have discussed in many of the previous tutorial programs.</p>
+<p>The next function is used in the computation of the diagonal mass matrix <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> used to scale variables in the active set method. As discussed in the introduction, we get the mass matrix to be diagonal by choosing the trapezoidal rule for quadrature. Doing so we don't really need the triple loop over quadrature points, indices <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> and indices <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> any more and can, instead, just use a double loop. The rest of the function is obvious given what we have discussed in many of the previous tutorial programs.</p>
 <p>Note that at the time this function is called, the constraints object only contains boundary value constraints; we therefore do not have to pay attention in the last copy-local-to-global step to preserve the values of matrix entries that may later on be constrained by the active set.</p>
 <p>Note also that the trick with the trapezoidal rule only works if we have in fact <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements. For higher order elements, one would need to use a quadrature formula that has quadrature points at all the support points of the finite element. Constructing such a quadrature formula isn't really difficult, but not the point here, and so we simply assert at the top of the function that our implicit assumption about the finite element is in fact satisfied.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
@@ -803,7 +803,7 @@
 <div class="line">    }</div>
 <div class="line">  </div>
 </div><!-- fragment --><p><a class="anchor" id="ObstacleProblemsolve"></a> </p><h4>ObstacleProblem::solve</h4>
-<p>There is nothing to say really about the solve function. In the context of a Newton method, we are not typically interested in very high accuracy (why ask for a highly accurate solution of a linear problem that we know only gives us an approximation of the solution of the nonlinear problem), and so we use the <a class="el" href="classReductionControl.html">ReductionControl</a> class that stops iterations when either an absolute tolerance is reached (for which we choose <picture><source srcset="form_4837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-12}$" src="form_4837.png"/></picture>) or when the residual is reduced by a certain factor (here, <picture><source srcset="form_2885_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-3}$" src="form_2885.png"/></picture>).</p>
+<p>There is nothing to say really about the solve function. In the context of a Newton method, we are not typically interested in very high accuracy (why ask for a highly accurate solution of a linear problem that we know only gives us an approximation of the solution of the nonlinear problem), and so we use the <a class="el" href="classReductionControl.html">ReductionControl</a> class that stops iterations when either an absolute tolerance is reached (for which we choose <picture><source srcset="form_4837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-12}$" src="form_4837.png"/></picture>) or when the residual is reduced by a certain factor (here, <picture><source srcset="form_2926_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-3}$" src="form_2926.png"/></picture>).</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> ObstacleProblem&lt;dim&gt;::solve()</div>
 <div class="line">    {</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_42.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_42.html	2024-03-17 21:57:46.407252606 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_42.html	2024-03-17 21:57:46.411252629 +0000
@@ -158,7 +158,7 @@
 <p>Since you can very easily reach a few million degrees of freedom in three dimensions, even with adaptive mesh refinement, we decided to use Trilinos and p4est to run our code in parallel, building on the framework of <a class="el" href="step_40.html">step-40</a> for the parallelization. Additional pointers for parallelization can be found in <a class="el" href="step_32.html">step-32</a>.</p>
 <p><a class="anchor" id="Classicalformulation"></a></p><h3>Classical formulation</h3>
 <p>The classical formulation of the problem possesses the following form:  </p><p class="formulaDsp">
-<picture><source srcset="form_4854_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4838_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
  \varepsilon(\mathbf u) &amp;= A\sigma + \varepsilon^p &amp; &amp;\quad\text{in } \Omega,\\
   -\textrm{div}\ \sigma &amp;= \mathbf f &amp; &amp;\quad\text{in } \Omega,\\
   \varepsilon^p:(\tau - \sigma) &amp;\geq 0\quad\forall\tau\text{ with
@@ -170,28 +170,28 @@
   (\mathbf n \cdot (\sigma
   \mathbf n))(\mathbf n \cdot \mathbf u - g) &amp;= 0,\quad \mathbf n
   \cdot \mathbf u - g \leq 0 &amp; &amp;\quad\text{on } \Gamma_C.
-\end{align*}" src="form_4854.png"/></picture>
+\end{align*}" src="form_4838.png"/></picture>
 </p>
-<p> Here, the first of these equations defines the relationship between strain <picture><source srcset="form_4855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\mathbf u)=\frac{1}{2}\left(\nabla \mathbf u
-  + \nabla \mathbf u^T\right)$" src="form_4855.png"/></picture> and stress <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture> via the fourth-order compliance tensor <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture>; <picture><source srcset="form_4856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon^p$" src="form_4856.png"/></picture> provides the plastic component of the strain to ensure that the stress does not exceed the yield stress. We will only consider isotropic materials for which <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> can be expressed in terms of the Lam&eacute; moduli <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> and <picture><source srcset="form_3066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_3066.png"/></picture> or alternatively in terms of the bulk modulus <picture><source srcset="form_3941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa$" src="form_3941.png"/></picture> and <picture><source srcset="form_3066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_3066.png"/></picture>. The second equation is the force balance; we will here not consider any body forces and henceforth assume that <picture><source srcset="form_4857_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf f=0$" src="form_4857.png"/></picture>. The complementarity condition in the third line implies that <picture><source srcset="form_4858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon^p=0$" src="form_4858.png"/></picture> if <picture><source srcset="form_4859_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}(\sigma)&lt; 0$" src="form_4859.png"/></picture> but that <picture><source srcset="form_4856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon^p$" src="form_4856.png"/></picture> may be a nonzero tensor if and only if <picture><source srcset="form_4860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}(\sigma) = 0$" src="form_4860.png"/></picture>, and in particular that in this case <picture><source srcset="form_4856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon^p$" src="form_4856.png"/></picture> must point in the direction <picture><source srcset="form_4861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial
-\mathcal{F}(\sigma)/\partial \sigma$" src="form_4861.png"/></picture>. The inequality <picture><source srcset="form_4862_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}(\sigma)\le 0$" src="form_4862.png"/></picture> is a statement of the fact that plastic materials can only support a finite amount of stress; in other words, they react with plastic deformations <picture><source srcset="form_4856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon^p$" src="form_4856.png"/></picture> if external forces would result in a stress <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture> for which <picture><source srcset="form_4863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}(\sigma)&gt; 0$" src="form_4863.png"/></picture> would result. A typical form for this <em>yield function</em> is <picture><source srcset="form_4864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}(\sigma)=|\sigma^D|-\sigma_{\text{yield}}$" src="form_4864.png"/></picture> where <picture><source srcset="form_4865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau^D
-= \tau - \dfrac{1}{3}tr(\tau)I$" src="form_4865.png"/></picture> is the deviatoric part of a tensor and <picture><source srcset="form_4866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\cdot|$" src="form_4866.png"/></picture> denotes the Frobenius norm.</p>
-<p>Further equations describe a fixed, zero displacement on <picture><source srcset="form_3414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_D$" src="form_3414.png"/></picture> and that on the surface <picture><source srcset="form_4867_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_C=\partial\Omega\backslash\Gamma_D$" src="form_4867.png"/></picture> where contact may appear, the normal force <picture><source srcset="form_4868_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_n=\mathbf n \cdot (\sigma(\mathbf u)
-  \mathbf n)$" src="form_4868.png"/></picture> exerted by the obstacle is inward (no "pull" by the obstacle on our body) and with zero tangential component <picture><source srcset="form_4869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf \sigma_t= \sigma \mathbf n - \mathbf \sigma_n \mathbf n
-= \sigma \mathbf n - [\mathbf n \cdot(\sigma \mathbf n)]\mathbf n$" src="form_4869.png"/></picture>. The last condition is again a complementarity condition that implies that on <picture><source srcset="form_4870_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_C$" src="form_4870.png"/></picture>, the normal force can only be nonzero if the body is in contact with the obstacle; the second part describes the impenetrability of the obstacle and the body. The last two equations are commonly referred to as the Signorini contact conditions.</p>
-<p>Most materials - especially metals - have the property that they show some hardening as a result of deformation. In other words, <picture><source srcset="form_4871_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_{\text{yield}}$" src="form_4871.png"/></picture> increases with deformation. In practice, it is not the elastic deformation that results in hardening, but the plastic component. There are different constitutive laws to describe those material behaviors. The simplest one is called linear isotropic hardening described by the flow function  <picture><source srcset="form_4872_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}(\sigma,\varepsilon^p) = \vert\sigma^D\vert - (\sigma_0 +
-\gamma^{\text{iso}}|\varepsilon^p|)$" src="form_4872.png"/></picture>.</p>
+<p> Here, the first of these equations defines the relationship between strain <picture><source srcset="form_4839_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon(\mathbf u)=\frac{1}{2}\left(\nabla \mathbf u
+  + \nabla \mathbf u^T\right)$" src="form_4839.png"/></picture> and stress <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture> via the fourth-order compliance tensor <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture>; <picture><source srcset="form_4840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon^p$" src="form_4840.png"/></picture> provides the plastic component of the strain to ensure that the stress does not exceed the yield stress. We will only consider isotropic materials for which <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> can be expressed in terms of the Lam&eacute; moduli <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> and <picture><source srcset="form_2994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_2994.png"/></picture> or alternatively in terms of the bulk modulus <picture><source srcset="form_3941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa$" src="form_3941.png"/></picture> and <picture><source srcset="form_2994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_2994.png"/></picture>. The second equation is the force balance; we will here not consider any body forces and henceforth assume that <picture><source srcset="form_4841_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf f=0$" src="form_4841.png"/></picture>. The complementarity condition in the third line implies that <picture><source srcset="form_4842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon^p=0$" src="form_4842.png"/></picture> if <picture><source srcset="form_4843_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}(\sigma)&lt; 0$" src="form_4843.png"/></picture> but that <picture><source srcset="form_4840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon^p$" src="form_4840.png"/></picture> may be a nonzero tensor if and only if <picture><source srcset="form_4844_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}(\sigma) = 0$" src="form_4844.png"/></picture>, and in particular that in this case <picture><source srcset="form_4840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon^p$" src="form_4840.png"/></picture> must point in the direction <picture><source srcset="form_4845_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial
+\mathcal{F}(\sigma)/\partial \sigma$" src="form_4845.png"/></picture>. The inequality <picture><source srcset="form_4846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}(\sigma)\le 0$" src="form_4846.png"/></picture> is a statement of the fact that plastic materials can only support a finite amount of stress; in other words, they react with plastic deformations <picture><source srcset="form_4840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon^p$" src="form_4840.png"/></picture> if external forces would result in a stress <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture> for which <picture><source srcset="form_4847_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}(\sigma)&gt; 0$" src="form_4847.png"/></picture> would result. A typical form for this <em>yield function</em> is <picture><source srcset="form_4848_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}(\sigma)=|\sigma^D|-\sigma_{\text{yield}}$" src="form_4848.png"/></picture> where <picture><source srcset="form_4849_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau^D
+= \tau - \dfrac{1}{3}tr(\tau)I$" src="form_4849.png"/></picture> is the deviatoric part of a tensor and <picture><source srcset="form_4850_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\cdot|$" src="form_4850.png"/></picture> denotes the Frobenius norm.</p>
+<p>Further equations describe a fixed, zero displacement on <picture><source srcset="form_3278_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_D$" src="form_3278.png"/></picture> and that on the surface <picture><source srcset="form_4851_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_C=\partial\Omega\backslash\Gamma_D$" src="form_4851.png"/></picture> where contact may appear, the normal force <picture><source srcset="form_4852_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_n=\mathbf n \cdot (\sigma(\mathbf u)
+  \mathbf n)$" src="form_4852.png"/></picture> exerted by the obstacle is inward (no "pull" by the obstacle on our body) and with zero tangential component <picture><source srcset="form_4853_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf \sigma_t= \sigma \mathbf n - \mathbf \sigma_n \mathbf n
+= \sigma \mathbf n - [\mathbf n \cdot(\sigma \mathbf n)]\mathbf n$" src="form_4853.png"/></picture>. The last condition is again a complementarity condition that implies that on <picture><source srcset="form_4854_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_C$" src="form_4854.png"/></picture>, the normal force can only be nonzero if the body is in contact with the obstacle; the second part describes the impenetrability of the obstacle and the body. The last two equations are commonly referred to as the Signorini contact conditions.</p>
+<p>Most materials - especially metals - have the property that they show some hardening as a result of deformation. In other words, <picture><source srcset="form_4855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_{\text{yield}}$" src="form_4855.png"/></picture> increases with deformation. In practice, it is not the elastic deformation that results in hardening, but the plastic component. There are different constitutive laws to describe those material behaviors. The simplest one is called linear isotropic hardening described by the flow function  <picture><source srcset="form_4856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}(\sigma,\varepsilon^p) = \vert\sigma^D\vert - (\sigma_0 +
+\gamma^{\text{iso}}|\varepsilon^p|)$" src="form_4856.png"/></picture>.</p>
 <p><a class="anchor" id="Reformulationasavariationalinequality"></a></p><h3>Reformulation as a variational inequality</h3>
 <p>It is generally rather awkward to deal with inequalities. Here, we have to deal with two: plasticity and the contact problem. As described in more detail in the paper mentioned at the top of this page, one can at least reformulate the plasticity in a way that makes it look like a nonlinearity that we can then treat with Newton's method. This is slightly tricky mathematically since the nonlinearity is not just some smooth function but instead has kinks where the stress reaches the yield stress; however, it can be shown for such <em>semismooth</em> functions that Newton's method still converges.</p>
 <p>Without going into details, we will also get rid of the stress as an independent variable and instead work exclusively with the displacements <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture>. Ultimately, the goal of this reformulation is that we will want to end up with a symmetric, positive definite problem - such as a linearized elasticity problem with spatially variable coefficients resulting from the plastic behavior - that needs to be solved in each Newton step. We want this because there are efficient and scalable methods for the solution of such linear systems, such as CG preconditioned with an algebraic multigrid. This is opposed to the saddle point problem akin to the mixed Laplace (see <a class="el" href="step_20.html">step-20</a>) we would get were we to continue with the mixed formulation containing both displacements and stresses, and for which <a class="el" href="step_20.html">step-20</a> already gives a hint at how difficult it is to construct good solvers and preconditioners.</p>
-<p>With this said, let us simply state the problem we obtain after reformulation (again, details can be found in the paper): Find a displacement <picture><source srcset="form_4873_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u \in
-V^+$" src="form_4873.png"/></picture> so that  </p><p class="formulaDsp">
-<picture><source srcset="form_4874_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>With this said, let us simply state the problem we obtain after reformulation (again, details can be found in the paper): Find a displacement <picture><source srcset="form_4857_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u \in
+V^+$" src="form_4857.png"/></picture> so that  </p><p class="formulaDsp">
+<picture><source srcset="form_4858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 \left(P_{\Pi}(C\varepsilon(\mathbf u)),\varepsilon(\varphi) - \varepsilon(\mathbf u)\right) \geq 0,\quad \forall \varphi\in V^+.
-\end{align*}" src="form_4874.png"/></picture>
+\end{align*}" src="form_4858.png"/></picture>
 </p>
-<p> where the projector <picture><source srcset="form_4875_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_\Pi$" src="form_4875.png"/></picture> is defined as  </p><p class="formulaDsp">
-<picture><source srcset="form_4876_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> where the projector <picture><source srcset="form_4859_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_\Pi$" src="form_4859.png"/></picture> is defined as  </p><p class="formulaDsp">
+<picture><source srcset="form_4860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
  P_{\Pi}(\tau) \dealcoloneq \begin{cases}
     \tau, &amp; \text{if }\vert\tau^D\vert \leq \sigma_0,\\
     \left[
@@ -201,10 +201,10 @@
     + \dfrac{1}{3}\text{trace}(\tau) I, &amp; \text{if }\vert\tau^D\vert &gt;
     \sigma_0,
   \end{cases}
-\end{align*}" src="form_4876.png"/></picture>
+\end{align*}" src="form_4860.png"/></picture>
 </p>
-<p> and the space <picture><source srcset="form_4877_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^+$" src="form_4877.png"/></picture> is the space of all displacements that satisfy the contact condition:  </p><p class="formulaDsp">
-<picture><source srcset="form_4878_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> and the space <picture><source srcset="form_4861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^+$" src="form_4861.png"/></picture> is the space of all displacements that satisfy the contact condition:  </p><p class="formulaDsp">
+<picture><source srcset="form_4862_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   V
   &amp;=
   \left\{ \mathbf u\in \left[H^1(\Omega)\right]^{d}:
@@ -213,18 +213,18 @@
   V^+
   &amp;=
   \left\{ \mathbf u\in V: \mathbf n \cdot \mathbf u\leq g \text{ on } \Gamma_C \right\}.
-\end{align*}" src="form_4878.png"/></picture>
+\end{align*}" src="form_4862.png"/></picture>
 </p>
-<p>In the actual code, we will use the abbreviation <picture><source srcset="form_4879_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma=\dfrac{\gamma^{\text{iso}}}{2\mu + \gamma^{\text{iso}}}$" src="form_4879.png"/></picture>.</p>
+<p>In the actual code, we will use the abbreviation <picture><source srcset="form_4863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma=\dfrac{\gamma^{\text{iso}}}{2\mu + \gamma^{\text{iso}}}$" src="form_4863.png"/></picture>.</p>
 <p>Given this formulation, we will apply two techniques:</p><ul>
 <li>Run a Newton method to iterate out the nonlinearity in the projector.</li>
 <li>Run an active set method for the contact condition, in much the same way as we did in <a class="el" href="step_41.html">step-41</a>.</li>
 </ul>
 <p>A strict approach would keep the active set fixed while we iterate the Newton method to convergence (or maybe the other way around: find the final active set before moving on to the next Newton iteration). In practice, it turns out that it is sufficient to do only a single Newton step per active set iteration, and so we will iterate over them concurrently. We will also, every once in a while, refine the mesh.</p>
 <p><a class="anchor" id="ANewtonmethodfortheplasticnonlinearity"></a></p><h3>A Newton method for the plastic nonlinearity</h3>
-<p>As mentioned, we will treat the nonlinearity of the operator <picture><source srcset="form_4875_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_\Pi$" src="form_4875.png"/></picture> by applying a Newton method, despite the fact that the operator is not differentiable in the strict sense. However, it satisfies the conditions of <em>slant</em> differentiability and this turns out to be enough for Newton's method to work. The resulting method then goes by the name <em>semi-smooth Newton method</em>, which sounds impressive but is, in reality, just a Newton method applied to a semi-smooth function with an appropriately chosen "derivative".</p>
-<p>In the current case, we will run our iteration by solving in each iteration <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> the following equation (still an inequality, but linearized):  </p><p class="formulaDsp">
-<picture><source srcset="form_4880_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>As mentioned, we will treat the nonlinearity of the operator <picture><source srcset="form_4859_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_\Pi$" src="form_4859.png"/></picture> by applying a Newton method, despite the fact that the operator is not differentiable in the strict sense. However, it satisfies the conditions of <em>slant</em> differentiability and this turns out to be enough for Newton's method to work. The resulting method then goes by the name <em>semi-smooth Newton method</em>, which sounds impressive but is, in reality, just a Newton method applied to a semi-smooth function with an appropriately chosen "derivative".</p>
+<p>In the current case, we will run our iteration by solving in each iteration <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> the following equation (still an inequality, but linearized):  </p><p class="formulaDsp">
+<picture><source srcset="form_4864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \label{eq:linearization}
   \left(I_{\Pi}\varepsilon(\tilde {\mathbf u}^{i}),
     \varepsilon(\varphi) - \varepsilon(\tilde {\mathbf u}^{i})\right) \geq
@@ -233,10 +233,10 @@
   \left(P_{\Pi}(C\varepsilon({\mathbf u}^{i-1})),
     \varepsilon(\varphi) - \varepsilon(\tilde {\mathbf u}^{i})\right)\right),
   \quad \forall \varphi\in V^+,
-\end{align*}" src="form_4880.png"/></picture>
+\end{align*}" src="form_4864.png"/></picture>
 </p>
-<p> where the rank-4 tensor <picture><source srcset="form_4881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_\Pi=I_\Pi(\varepsilon^D(\mathbf u^{i-1}))$" src="form_4881.png"/></picture> given by  </p><p class="formulaDsp">
-<picture><source srcset="form_4882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align}
+<p> where the rank-4 tensor <picture><source srcset="form_4865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_\Pi=I_\Pi(\varepsilon^D(\mathbf u^{i-1}))$" src="form_4865.png"/></picture> given by  </p><p class="formulaDsp">
+<picture><source srcset="form_4866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align}
   I_\Pi = \begin{cases}
     C_{\mu} + C_{\kappa}, &amp; \hspace{-8em} \text{if } \vert C\varepsilon^D(\mathbf u^{i-1}) \vert \leq \sigma_0,
     \\
@@ -244,100 +244,100 @@
       2\mu\dfrac{C\varepsilon^D(\mathbf u^{i-1})\otimes C\varepsilon^D(\mathbf
         u^{i-1})}{\vert C\varepsilon^D(\mathbf u^{i-1})\vert^2}\right) + C_{\kappa}, &amp; \text{ else.}
 \end{cases}
-\end{align}" src="form_4882.png"/></picture>
+\end{align}" src="form_4866.png"/></picture>
 </p>
-<p> This tensor is the (formal) linearization of <picture><source srcset="form_4883_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_\Pi(C\cdot)$" src="form_4883.png"/></picture> around <picture><source srcset="form_4884_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon^D(\mathbf u^{i-1})$" src="form_4884.png"/></picture>. For the linear isotropic material we consider here, the bulk and shear components of the projector are given by  </p><p class="formulaDsp">
-<picture><source srcset="form_4885_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{gather*}
+<p> This tensor is the (formal) linearization of <picture><source srcset="form_4867_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_\Pi(C\cdot)$" src="form_4867.png"/></picture> around <picture><source srcset="form_4868_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon^D(\mathbf u^{i-1})$" src="form_4868.png"/></picture>. For the linear isotropic material we consider here, the bulk and shear components of the projector are given by  </p><p class="formulaDsp">
+<picture><source srcset="form_4869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{gather*}
   C_{\kappa} = \kappa I\otimes I,
   \qquad\qquad\qquad\qquad
   C_{\mu} = 2\mu\left(\mathbb{I}  - \dfrac{1}{3} I\otimes
     I\right),
-\end{gather*}" src="form_4885.png"/></picture>
+\end{gather*}" src="form_4869.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2098_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I$" src="form_2098.png"/></picture> and <picture><source srcset="form_4886_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{I}$" src="form_4886.png"/></picture> are the identity tensors of rank 2 and 4, respectively.</p>
-<p>Note that this problem corresponds to a linear elastic contact problem where <picture><source srcset="form_4887_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_\Pi$" src="form_4887.png"/></picture> plays the role of the elasticity tensor <picture><source srcset="form_4888_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C=A^{-1}$" src="form_4888.png"/></picture>. Indeed, if the material is not plastic at a point, then <picture><source srcset="form_4889_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_\Pi=C$" src="form_4889.png"/></picture>. However, at places where the material is plastic, <picture><source srcset="form_4887_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_\Pi$" src="form_4887.png"/></picture> is a spatially varying function. In any case, the system we have to solve for the Newton iterate <picture><source srcset="form_4890_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde {\mathbf u}^{i}$" src="form_4890.png"/></picture> gets us closer to the goal of rewriting our problem in a way that allows us to use well-known solvers and preconditioners for elliptic systems.</p>
-<p>As a final note about the Newton method let us mention that as is common with Newton methods we need to globalize it by controlling the step length. In other words, while the system above solves for <picture><source srcset="form_4890_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde {\mathbf u}^{i}$" src="form_4890.png"/></picture>, the final iterate will rather be  </p><p class="formulaDsp">
-<picture><source srcset="form_4891_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> where <picture><source srcset="form_2089_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I$" src="form_2089.png"/></picture> and <picture><source srcset="form_4870_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{I}$" src="form_4870.png"/></picture> are the identity tensors of rank 2 and 4, respectively.</p>
+<p>Note that this problem corresponds to a linear elastic contact problem where <picture><source srcset="form_4871_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_\Pi$" src="form_4871.png"/></picture> plays the role of the elasticity tensor <picture><source srcset="form_4872_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C=A^{-1}$" src="form_4872.png"/></picture>. Indeed, if the material is not plastic at a point, then <picture><source srcset="form_4873_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_\Pi=C$" src="form_4873.png"/></picture>. However, at places where the material is plastic, <picture><source srcset="form_4871_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_\Pi$" src="form_4871.png"/></picture> is a spatially varying function. In any case, the system we have to solve for the Newton iterate <picture><source srcset="form_4874_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde {\mathbf u}^{i}$" src="form_4874.png"/></picture> gets us closer to the goal of rewriting our problem in a way that allows us to use well-known solvers and preconditioners for elliptic systems.</p>
+<p>As a final note about the Newton method let us mention that as is common with Newton methods we need to globalize it by controlling the step length. In other words, while the system above solves for <picture><source srcset="form_4874_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde {\mathbf u}^{i}$" src="form_4874.png"/></picture>, the final iterate will rather be  </p><p class="formulaDsp">
+<picture><source srcset="form_4875_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   {\mathbf u}^{i} = {\mathbf u}^{i-1} + \alpha_i (\tilde {\mathbf u}^{i} - {\mathbf u}^{i-1})
-\end{align*}" src="form_4891.png"/></picture>
+\end{align*}" src="form_4875.png"/></picture>
 </p>
-<p> where the difference in parentheses on the right takes the role of the traditional Newton direction, <picture><source srcset="form_4892_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta {\mathbf u}^{i}$" src="form_4892.png"/></picture>. We will determine <picture><source srcset="form_4893_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^i$" src="form_4893.png"/></picture> using a standard line search.</p>
+<p> where the difference in parentheses on the right takes the role of the traditional Newton direction, <picture><source srcset="form_4876_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta {\mathbf u}^{i}$" src="form_4876.png"/></picture>. We will determine <picture><source srcset="form_4877_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^i$" src="form_4877.png"/></picture> using a standard line search.</p>
 <p><a class="anchor" id="ActiveSetmethodstosolvethesaddlepointproblem"></a></p><h3>Active Set methods to solve the saddle point problem</h3>
-<p>This linearized problem to be solved in each Newton step is essentially like in <a class="el" href="step_41.html">step-41</a>. The only difference consists in the fact that the contact area is at the boundary instead of in the domain. But this has no further consequence so that we refer to the documentation of <a class="el" href="step_41.html">step-41</a> with the only hint that <picture><source srcset="form_263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{S}$" src="form_263.png"/></picture> contains all the vertices at the contact boundary <picture><source srcset="form_4870_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_C$" src="form_4870.png"/></picture> this time. As there, what we need to do is keep a subset of degrees of freedom fixed, leading to additional constraints that one can write as a saddle point problem. However, as discussed in the paper, by writing these constraints in an appropriate way that removes the coupling between degrees of freedom, we end up with a set of nodes that essentially just have Dirichlet values attached to them.</p>
+<p>This linearized problem to be solved in each Newton step is essentially like in <a class="el" href="step_41.html">step-41</a>. The only difference consists in the fact that the contact area is at the boundary instead of in the domain. But this has no further consequence so that we refer to the documentation of <a class="el" href="step_41.html">step-41</a> with the only hint that <picture><source srcset="form_263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{S}$" src="form_263.png"/></picture> contains all the vertices at the contact boundary <picture><source srcset="form_4854_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_C$" src="form_4854.png"/></picture> this time. As there, what we need to do is keep a subset of degrees of freedom fixed, leading to additional constraints that one can write as a saddle point problem. However, as discussed in the paper, by writing these constraints in an appropriate way that removes the coupling between degrees of freedom, we end up with a set of nodes that essentially just have Dirichlet values attached to them.</p>
 <p><a class="anchor" id="Overallalgorithm"></a></p><h3>Overall algorithm</h3>
 <p>The algorithm outlined above combines the damped semismooth Newton-method, which we use for the nonlinear constitutive law, with the semismooth Newton method for the contact. It works as follows: </p><ol>
 <li>
-<p class="startli">Initialize the active and inactive sets <picture><source srcset="form_4894_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{A}_i$" src="form_4894.png"/></picture> and <picture><source srcset="form_4895_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}_i$" src="form_4895.png"/></picture> such that <picture><source srcset="form_4896_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{S} = \mathcal{A}_i \cup \mathcal{F}_i$" src="form_4896.png"/></picture> and <picture><source srcset="form_4897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{A}_i \cap
- \mathcal{F}_i = \emptyset$" src="form_4897.png"/></picture> and set <picture><source srcset="form_4898_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i = 1$" src="form_4898.png"/></picture>. Here, <picture><source srcset="form_263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{S}$" src="form_263.png"/></picture> is the set of all degrees of freedom located at the surface of the domain where contact may happen. The start value <picture><source srcset="form_4899_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U^0 \dealcoloneq
- P_{\mathcal{A}_k}(0)$" src="form_4899.png"/></picture> fulfills our obstacle condition, i.e., we project an initial zero displacement onto the set of feasible displacements.</p>
+<p class="startli">Initialize the active and inactive sets <picture><source srcset="form_4878_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{A}_i$" src="form_4878.png"/></picture> and <picture><source srcset="form_4879_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}_i$" src="form_4879.png"/></picture> such that <picture><source srcset="form_4880_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{S} = \mathcal{A}_i \cup \mathcal{F}_i$" src="form_4880.png"/></picture> and <picture><source srcset="form_4881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{A}_i \cap
+ \mathcal{F}_i = \emptyset$" src="form_4881.png"/></picture> and set <picture><source srcset="form_4882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i = 1$" src="form_4882.png"/></picture>. Here, <picture><source srcset="form_263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{S}$" src="form_263.png"/></picture> is the set of all degrees of freedom located at the surface of the domain where contact may happen. The start value <picture><source srcset="form_4883_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U^0 \dealcoloneq
+ P_{\mathcal{A}_k}(0)$" src="form_4883.png"/></picture> fulfills our obstacle condition, i.e., we project an initial zero displacement onto the set of feasible displacements.</p>
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">Assemble the Newton matrix <picture><source srcset="form_4900_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{pq} \dealcoloneq a'(
- U^{i-1};\varphi_p,\varphi_q)$" src="form_4900.png"/></picture> and the right-hand-side <picture><source srcset="form_4901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(\hat U^{i-1})$" src="form_4901.png"/></picture>. These correspond to the linearized Newton step, ignoring for the moment the contact inequality.</p>
+<p class="startli">Assemble the Newton matrix <picture><source srcset="form_4884_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{pq} \dealcoloneq a'(
+ U^{i-1};\varphi_p,\varphi_q)$" src="form_4884.png"/></picture> and the right-hand-side <picture><source srcset="form_4885_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(\hat U^{i-1})$" src="form_4885.png"/></picture>. These correspond to the linearized Newton step, ignoring for the moment the contact inequality.</p>
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">Find the primal-dual pair <picture><source srcset="form_4902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\tilde U^i,\Lambda^i)$" src="form_4902.png"/></picture> that satisfies  </p><p class="formulaDsp">
-<picture><source srcset="form_4903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p class="startli">Find the primal-dual pair <picture><source srcset="form_4886_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\tilde U^i,\Lambda^i)$" src="form_4886.png"/></picture> that satisfies  </p><p class="formulaDsp">
+<picture><source srcset="form_4887_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
  A\tilde U^i + B\Lambda^i &amp; = F, &amp;\\
  \left[B^T\tilde U^i\right]_p &amp; = G_p &amp; \forall p\in\mathcal{A}_i,\\
  \Lambda^i_p &amp; = 0 &amp; \forall p\in\mathcal{F}_i.
- \end{align*}" src="form_4903.png"/></picture>
+ \end{align*}" src="form_4887.png"/></picture>
 </p>
-<p> As in <a class="el" href="step_41.html">step-41</a>, we can obtain the solution to this problem by eliminating those degrees of freedom in <picture><source srcset="form_4904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal A}_i$" src="form_4904.png"/></picture> from the first equation and obtain a linear system <picture><source srcset="form_4905_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat {\hat A}(U^{i-1}) \tilde U^i = \hat {\hat H}(U^{i-1})$" src="form_4905.png"/></picture>.</p>
+<p> As in <a class="el" href="step_41.html">step-41</a>, we can obtain the solution to this problem by eliminating those degrees of freedom in <picture><source srcset="form_4888_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal A}_i$" src="form_4888.png"/></picture> from the first equation and obtain a linear system <picture><source srcset="form_4889_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat {\hat A}(U^{i-1}) \tilde U^i = \hat {\hat H}(U^{i-1})$" src="form_4889.png"/></picture>.</p>
 <p class="endli"></p>
 </li>
 <li>
-<p class="startli">Damp the Newton iteration for <picture><source srcset="form_4906_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i&gt;2$" src="form_4906.png"/></picture> by applying a line search and calculating a linear combination of <picture><source srcset="form_4907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^{i-1}$" src="form_4907.png"/></picture> and <picture><source srcset="form_4908_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde U^i$" src="form_4908.png"/></picture>. This requires finding an <picture><source srcset="form_4909_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^i_l \dealcoloneq 2^{-l},(l=0,\ldots,10)$" src="form_4909.png"/></picture> so that  </p><p class="formulaDsp">
-<picture><source srcset="form_4910_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{gather*}U^i \dealcoloneq \alpha^i_l\bar U^i +
- (1-\alpha^i_l)U^{i-1}\end{gather*}" src="form_4910.png"/></picture>
+<p class="startli">Damp the Newton iteration for <picture><source srcset="form_4890_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i&gt;2$" src="form_4890.png"/></picture> by applying a line search and calculating a linear combination of <picture><source srcset="form_4891_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^{i-1}$" src="form_4891.png"/></picture> and <picture><source srcset="form_4892_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde U^i$" src="form_4892.png"/></picture>. This requires finding an <picture><source srcset="form_4893_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha^i_l \dealcoloneq 2^{-l},(l=0,\ldots,10)$" src="form_4893.png"/></picture> so that  </p><p class="formulaDsp">
+<picture><source srcset="form_4894_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{gather*}U^i \dealcoloneq \alpha^i_l\bar U^i +
+ (1-\alpha^i_l)U^{i-1}\end{gather*}" src="form_4894.png"/></picture>
 </p>
 <p> satisfies  </p><p class="formulaDsp">
-<picture><source srcset="form_4911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{gather*}
+<picture><source srcset="form_4895_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{gather*}
    \vert {\hat R}\left({\mathbf u}^{i}\right) \vert &lt; \vert {\hat R}\left({\mathbf u}^{i-1}\right) \vert.
- \end{gather*}" src="form_4911.png"/></picture>
+ \end{gather*}" src="form_4895.png"/></picture>
 </p>
-<p> with <picture><source srcset="form_4912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\hat R}\left({\mathbf u}\right)=\left(P_{Pi}(C\varepsilon(u)),\varepsilon(\varphi^{i}_p\right)$" src="form_4912.png"/></picture> with the exceptions of (i) elements <picture><source srcset="form_4913_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p\in\mathcal{A}_i$" src="form_4913.png"/></picture> where we set <picture><source srcset="form_4914_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\hat R}\left({\mathbf u}\right)=0$" src="form_4914.png"/></picture>, and (ii) elements that correspond to hanging nodes, which we eliminate in the usual manner.</p>
+<p> with <picture><source srcset="form_4896_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\hat R}\left({\mathbf u}\right)=\left(P_{Pi}(C\varepsilon(u)),\varepsilon(\varphi^{i}_p\right)$" src="form_4896.png"/></picture> with the exceptions of (i) elements <picture><source srcset="form_4897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p\in\mathcal{A}_i$" src="form_4897.png"/></picture> where we set <picture><source srcset="form_4898_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\hat R}\left({\mathbf u}\right)=0$" src="form_4898.png"/></picture>, and (ii) elements that correspond to hanging nodes, which we eliminate in the usual manner.</p>
 <p class="endli"></p>
 </li>
 <li>
 <p class="startli">Define the new active and inactive sets by  </p><p class="formulaDsp">
-<picture><source srcset="form_4915_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{gather*}\mathcal{A}_{i+1} \dealcoloneq \lbrace p\in\mathcal{S}:\Lambda^i_p +
- c\left(\left[B^TU^i\right]_p - G_p\right) &gt; 0\rbrace,\end{gather*}" src="form_4915.png"/></picture>
+<picture><source srcset="form_4899_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{gather*}\mathcal{A}_{i+1} \dealcoloneq \lbrace p\in\mathcal{S}:\Lambda^i_p +
/usr/share/doc/packages/dealii/doxygen/deal.II/step_43.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_43.html	2024-03-17 21:57:46.543253445 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_43.html	2024-03-17 21:57:46.551253494 +0000
@@ -177,37 +177,37 @@
 <p>Much inspiration for this program comes from <a class="el" href="step_31.html">step-31</a> but several of the techniques discussed here are original.</p>
 <p><a class="anchor" id="Advectiondominatedtwophaseflowmathematicalmodel"></a></p><h3>Advection-dominated two-phase flow mathematical model</h3>
 <p>We consider the flow of a two-phase immiscible, incompressible fluid. Capillary and gravity effects are neglected, and viscous effects are assumed dominant. The governing equations for such a flow that are identical to those used in <a class="el" href="step_21.html">step-21</a> and are  </p><p class="formulaDsp">
-<picture><source srcset="form_4951_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4935_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbf{u}_t &amp;= - \mathbf{K} \lambda_t \left(S\right) \nabla p, \\
   \nabla \cdot \mathbf{u}_t &amp;= q, \\
   \epsilon \frac{\partial S}{\partial t} + \nabla \cdot \left( \mathbf{u}_t  F\left( S \right) \right)&amp;=0,
-\end{align*}" src="form_4951.png"/></picture>
+\end{align*}" src="form_4935.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> is the saturation (volume fraction between zero and one) of the second (wetting) phase, <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> is the pressure, <picture><source srcset="form_4952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{K}$" src="form_4952.png"/></picture> is the permeability tensor, <picture><source srcset="form_4953_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_t$" src="form_4953.png"/></picture> is the total mobility, <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1433.png"/></picture> is the porosity, <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> is the fractional flow of the wetting phase, <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> is the source term and <picture><source srcset="form_4954_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}_t$" src="form_4954.png"/></picture> is the total velocity. The total mobility, fractional flow of the wetting phase and total velocity are respectively given by  </p><p class="formulaDsp">
-<picture><source srcset="form_4955_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> where <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> is the saturation (volume fraction between zero and one) of the second (wetting) phase, <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> is the pressure, <picture><source srcset="form_4936_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{K}$" src="form_4936.png"/></picture> is the permeability tensor, <picture><source srcset="form_4937_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_t$" src="form_4937.png"/></picture> is the total mobility, <picture><source srcset="form_1435_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1435.png"/></picture> is the porosity, <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> is the fractional flow of the wetting phase, <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> is the source term and <picture><source srcset="form_4938_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}_t$" src="form_4938.png"/></picture> is the total velocity. The total mobility, fractional flow of the wetting phase and total velocity are respectively given by  </p><p class="formulaDsp">
+<picture><source srcset="form_4939_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
    \lambda_t(S)&amp;= \lambda_w + \lambda_{nw} = \frac{k_{rw}(S)}{\mu_w} + \frac{k_{rnw}(S)}{\mu_{nw}}, \\
    F(S) &amp;= \frac{\lambda_w}{\lambda_t} = \frac{\lambda_w}{\lambda_w + \lambda_{nw}} = \frac{k_{rw}(S)/\mu_w}{k_{rw}(S)/\mu_w + k_{rnw}(S)/\mu_{nw}}, \\
    \mathbf{u}_t &amp;= \mathbf{u}_w + \mathbf{u}_{nw} = -\lambda_t(S)\mathbf{K} \cdot \nabla p,
-\end{align*}" src="form_4955.png"/></picture>
+\end{align*}" src="form_4939.png"/></picture>
 </p>
-<p> where subscripts <picture><source srcset="form_4956_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w, nw$" src="form_4956.png"/></picture> represent the wetting and non-wetting phases, respectively.</p>
-<p>For convenience, the porosity <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1433.png"/></picture> in the saturation equation, which can be considered a scaling factor for the time variable, is set to one. Following a commonly used prescription for the dependence of the relative permeabilities <picture><source srcset="form_4957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{rw}$" src="form_4957.png"/></picture> and <picture><source srcset="form_4958_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{rnw}$" src="form_4958.png"/></picture> on saturation, we use  </p><p class="formulaDsp">
-<picture><source srcset="form_4959_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> where subscripts <picture><source srcset="form_4940_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w, nw$" src="form_4940.png"/></picture> represent the wetting and non-wetting phases, respectively.</p>
+<p>For convenience, the porosity <picture><source srcset="form_1435_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1435.png"/></picture> in the saturation equation, which can be considered a scaling factor for the time variable, is set to one. Following a commonly used prescription for the dependence of the relative permeabilities <picture><source srcset="form_4941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{rw}$" src="form_4941.png"/></picture> and <picture><source srcset="form_4942_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{rnw}$" src="form_4942.png"/></picture> on saturation, we use  </p><p class="formulaDsp">
+<picture><source srcset="form_4943_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
    k_{rw}  &amp;= S^2, \qquad&amp;\qquad
    k_{rnw} &amp;= \left( 1-S \right)^2.
-\end{align*}" src="form_4959.png"/></picture>
+\end{align*}" src="form_4943.png"/></picture>
 </p>
 <p>The porous media equations above are augmented by initial conditions for the saturation and boundary conditions for the pressure. Since saturation and the gradient of the pressure uniquely determine the velocity, no boundary conditions are necessary for the velocity. Since the flow equations do not contain time derivatives, initial conditions for the velocity and pressure variables are not required. The flow field separates the boundary into inflow or outflow parts. Specifically,  </p><p class="formulaDsp">
-<picture><source srcset="form_4960_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4944_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \mathbf{\Gamma}_{in}(t) = \left\{\mathbf{x} \in \partial \Omega:\mathbf{n} \cdot \mathbf{u}_t&lt;0\right\},
-\]" src="form_4960.png"/></picture>
+\]" src="form_4944.png"/></picture>
 </p>
-<p> and we arrive at a complete model by also imposing boundary values for the saturation variable on the inflow boundary <picture><source srcset="form_4961_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\Gamma}_{in}$" src="form_4961.png"/></picture>.</p>
+<p> and we arrive at a complete model by also imposing boundary values for the saturation variable on the inflow boundary <picture><source srcset="form_4945_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\Gamma}_{in}$" src="form_4945.png"/></picture>.</p>
 <p><a class="anchor" id="Adaptiveoperatorsplittingandtimestepping"></a></p><h3>Adaptive operator splitting and time stepping</h3>
 <p>As seen in <a class="el" href="step_21.html">step-21</a>, solving the flow equations for velocity and pressure are the parts of the program that take far longer than the (explicit) updating step for the saturation variable once we know the flow variables. On the other hand, the pressure and velocity depend only weakly on saturation, so one may think about only solving for pressure and velocity every few time steps while updating the saturation in every step. If we can find a criterion for when the flow variables need to be updated, we call this splitting an "adaptive
 operator splitting" scheme.</p>
 <p>Here, we use the following a posteriori criterion to decide when to re-compute pressure and velocity variables (detailed derivations and descriptions can be found in <b>[Chueh2013]</b>):  </p><p class="formulaDsp">
-<picture><source srcset="form_4962_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \theta(n,n_p)
   =
     \max_{\kappa\in{\mathbb T}}
@@ -217,49 +217,49 @@
       - \frac 1{\lambda_t\left(S^{(n_p)}\right)} \right\|_{L^\infty(\kappa)}
     \left\|\|\mathbf{K}^{-1}\|_1\right\|_{L^\infty(\kappa)}
     \right).
-\end{align*}" src="form_4962.png"/></picture>
+\end{align*}" src="form_4946.png"/></picture>
 </p>
-<p> where superscripts in parentheses denote the number of the saturation time step at which any quantity is defined and <picture><source srcset="form_4963_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n_p&lt;n$" src="form_4963.png"/></picture> represents the last step where we actually computed the pressure and velocity. If <picture><source srcset="form_4964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta(n,n_p)$" src="form_4964.png"/></picture> exceeds a certain threshold we re-compute the flow variables; otherwise, we skip this computation in time step <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> and only move the saturation variable one time step forward.</p>
-<p>In short, the algorithm allows us to perform a number of saturation time steps of length <picture><source srcset="form_4965_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t_c^{(n)}=t^{(n)}_c-t^{(n-1)}_c$" src="form_4965.png"/></picture> until the criterion above tells us to re-compute velocity and pressure variables, leading to a macro time step of length  </p><p class="formulaDsp">
-<picture><source srcset="form_4966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where superscripts in parentheses denote the number of the saturation time step at which any quantity is defined and <picture><source srcset="form_4947_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n_p&lt;n$" src="form_4947.png"/></picture> represents the last step where we actually computed the pressure and velocity. If <picture><source srcset="form_4948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta(n,n_p)$" src="form_4948.png"/></picture> exceeds a certain threshold we re-compute the flow variables; otherwise, we skip this computation in time step <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> and only move the saturation variable one time step forward.</p>
+<p>In short, the algorithm allows us to perform a number of saturation time steps of length <picture><source srcset="form_4949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t_c^{(n)}=t^{(n)}_c-t^{(n-1)}_c$" src="form_4949.png"/></picture> until the criterion above tells us to re-compute velocity and pressure variables, leading to a macro time step of length  </p><p class="formulaDsp">
+<picture><source srcset="form_4950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \Delta t_p^{(n)} = \sum_{i=n_p+1}^{n} \Delta t_c^{(i)}.
-\]" src="form_4966.png"/></picture>
+\]" src="form_4950.png"/></picture>
 </p>
 <p> We choose the length of (micro) steps subject to the Courant-Friedrichs-Lewy (CFL) restriction according to the criterion  </p><p class="formulaDsp">
-<picture><source srcset="form_4967_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4951_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \Delta t_c = \frac{\textrm{min}_{K}h_{K}}{7 \|\mathbf{u}_t\|_{L^{\infty}\left(\Omega\right)}},
-\]" src="form_4967.png"/></picture>
+\]" src="form_4951.png"/></picture>
 </p>
 <p> which we have confirmed to be stable for the choice of finite element and time stepping scheme for the saturation equation discussed below ( <picture><source srcset="form_1492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_K$" src="form_1492.png"/></picture> denotes the diameter of cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>). The result is a scheme where neither micro nor macro time steps are of uniform length, and both are chosen adaptively.</p>
 <p><a class="anchor" id="Timediscretization"></a></p><h3>Time discretization</h3>
 <p>Using this time discretization, we obtain the following set of equations for each time step from the IMPES approach (see <a class="el" href="step_21.html">step-21</a>):  </p><p class="formulaDsp">
-<picture><source srcset="form_4968_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
    \mathbf{u}^{(n)}_t + \lambda_t\left(S^{(n-1)}\right) \mathbf{K} \nabla p^{(n)} =0, \\
    \nabla \cdot \mathbf{u}^{(n)}_t = q, \\
    \epsilon \left( \frac{S^{(n-1)}-S^{(n)}}{\Delta t^{(n)}_c} \right) + \mathbf{u}^{(n)}_t \cdot \nabla F\left(S^{(n-1)}\right) + F\left(S^{(n-1)}\right) \nabla \cdot \mathbf{u}^{(n)}_t =0.
-\end{align*}" src="form_4968.png"/></picture>
+\end{align*}" src="form_4952.png"/></picture>
 </p>
-<p>Using the fact that <picture><source srcset="form_4969_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \cdot \mathbf{u}_t = q$" src="form_4969.png"/></picture>, the time discrete saturation equation becomes  </p><p class="formulaDsp">
-<picture><source srcset="form_4970_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>Using the fact that <picture><source srcset="form_4953_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \cdot \mathbf{u}_t = q$" src="form_4953.png"/></picture>, the time discrete saturation equation becomes  </p><p class="formulaDsp">
+<picture><source srcset="form_4954_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   &amp;\epsilon \left( \frac{S^{(n)}-S^{(n-1)}}{\Delta t^{(n)}_c} \right) + \mathbf{u}^{(n)}_t \cdot \nabla F\left(S^{(n-1)}\right) + F\left(S^{(n-1)}\right)q=0.
-\end{align*}" src="form_4970.png"/></picture>
+\end{align*}" src="form_4954.png"/></picture>
 </p>
 <p><a class="anchor" id="Weakformspacediscretizationforthepressurevelocitypart"></a></p><h3>Weak form, space discretization for the pressure-velocity part</h3>
-<p>By multiplying the equations defining the total velocity <picture><source srcset="form_4971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_t^{(n)}$" src="form_4971.png"/></picture> and the equation that expresses its divergence in terms of source terms, with test functions <picture><source srcset="form_2461_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}$" src="form_2461.png"/></picture> and <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture> respectively and then integrating terms by parts as necessary, the weak form of the problem reads: Find <picture><source srcset="form_4972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u, p$" src="form_4972.png"/></picture> so that for all test functions <picture><source srcset="form_4973_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}, w$" src="form_4973.png"/></picture> there holds  </p><p class="formulaDsp">
-<picture><source srcset="form_4974_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{gather*}
+<p>By multiplying the equations defining the total velocity <picture><source srcset="form_4955_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u_t^{(n)}$" src="form_4955.png"/></picture> and the equation that expresses its divergence in terms of source terms, with test functions <picture><source srcset="form_2468_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}$" src="form_2468.png"/></picture> and <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture> respectively and then integrating terms by parts as necessary, the weak form of the problem reads: Find <picture><source srcset="form_4956_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u, p$" src="form_4956.png"/></picture> so that for all test functions <picture><source srcset="form_4957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}, w$" src="form_4957.png"/></picture> there holds  </p><p class="formulaDsp">
+<picture><source srcset="form_4958_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{gather*}
    \left( \left( \mathbf{K} \lambda_t\left(S^{(n-1)}\right) \right)^{-1} \mathbf{u}^{(n)}_t, \mathbf{v}\right)_{\Omega} - \left(p^{(n)}, \nabla \cdot \mathbf{v}\right)_{\Omega} = -\left(p^{(n)}, \mathbf{n} \cdot \mathbf{v} \right)_{\partial \Omega}, \\
    - \left( \nabla \cdot \mathbf{u}^{(n)}_t,w\right)_{\Omega} = - \big(q,w\big)_{\Omega}.
-\end{gather*}" src="form_4974.png"/></picture>
+\end{gather*}" src="form_4958.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_2492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}$" src="form_2492.png"/></picture> represents the unit outward normal vector to <picture><source srcset="form_4975_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial
-\Omega$" src="form_4975.png"/></picture> and the pressure <picture><source srcset="form_4976_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p^{(n)}$" src="form_4976.png"/></picture> can be prescribed weakly on the open part of the boundary <picture><source srcset="form_2866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega$" src="form_2866.png"/></picture> whereas on those parts where a velocity is prescribed (for example impermeable boundaries with <picture><source srcset="form_4977_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n \cdot \mathbf
-u=0$" src="form_4977.png"/></picture> the term disappears altogether because <picture><source srcset="form_4978_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n \cdot \mathbf
-v=0$" src="form_4978.png"/></picture>.</p>
-<p>We use continuous finite elements to discretize the velocity and pressure equations. Specifically, we use mixed finite elements to ensure high order approximation for both vector (e.g. a fluid velocity) and scalar variables (e.g. pressure) simultaneously. For saddle point problems, it is well established that the so-called Babuska-Brezzi or Ladyzhenskaya-Babuska-Brezzi (LBB) conditions <b>[BrezziFortin]</b>, <b>[Chen2005]</b> need to be satisfied to ensure stability of the pressure-velocity system. These stability conditions are satisfied in the present work by using elements for velocity that are one order higher than for the pressure, i.e. <picture><source srcset="form_4979_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h \in Q^d_{p+1}$" src="form_4979.png"/></picture> and <picture><source srcset="form_4980_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_h \in Q_p$" src="form_4980.png"/></picture>, where <picture><source srcset="form_1047_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p=1$" src="form_1047.png"/></picture>, <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> is the space dimension, and <picture><source srcset="form_4981_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_s$" src="form_4981.png"/></picture> denotes the space of tensor product Lagrange polynomials of degree <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> in each variable.</p>
+<p> Here, <picture><source srcset="form_2492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}$" src="form_2492.png"/></picture> represents the unit outward normal vector to <picture><source srcset="form_4959_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial
+\Omega$" src="form_4959.png"/></picture> and the pressure <picture><source srcset="form_4960_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p^{(n)}$" src="form_4960.png"/></picture> can be prescribed weakly on the open part of the boundary <picture><source srcset="form_2907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega$" src="form_2907.png"/></picture> whereas on those parts where a velocity is prescribed (for example impermeable boundaries with <picture><source srcset="form_4961_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n \cdot \mathbf
+u=0$" src="form_4961.png"/></picture> the term disappears altogether because <picture><source srcset="form_4962_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n \cdot \mathbf
+v=0$" src="form_4962.png"/></picture>.</p>
+<p>We use continuous finite elements to discretize the velocity and pressure equations. Specifically, we use mixed finite elements to ensure high order approximation for both vector (e.g. a fluid velocity) and scalar variables (e.g. pressure) simultaneously. For saddle point problems, it is well established that the so-called Babuska-Brezzi or Ladyzhenskaya-Babuska-Brezzi (LBB) conditions <b>[BrezziFortin]</b>, <b>[Chen2005]</b> need to be satisfied to ensure stability of the pressure-velocity system. These stability conditions are satisfied in the present work by using elements for velocity that are one order higher than for the pressure, i.e. <picture><source srcset="form_4963_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h \in Q^d_{p+1}$" src="form_4963.png"/></picture> and <picture><source srcset="form_4964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_h \in Q_p$" src="form_4964.png"/></picture>, where <picture><source srcset="form_1047_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p=1$" src="form_1047.png"/></picture>, <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> is the space dimension, and <picture><source srcset="form_4965_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_s$" src="form_4965.png"/></picture> denotes the space of tensor product Lagrange polynomials of degree <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> in each variable.</p>
 <p><a class="anchor" id="Stabilizationweakformandspacediscretizationforthesaturationtransportequation"></a></p><h3>Stabilization, weak form and space discretization for the saturation transport equation</h3>
 <p>The chosen <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> elements for the saturation equation do not lead to a stable discretization without upwinding or other kinds of stabilization, and spurious oscillations will appear in the numerical solution. Adding an artificial diffusion term is one approach to eliminating these oscillations <b>[Chen2005]</b>. On the other hand, adding too much diffusion smears sharp fronts in the solution and suffers from grid-orientation difficulties <b>[Chen2005]</b>. To avoid these effects, we use the artificial diffusion term proposed by <b>[GuermondPasquetti2008]</b> and validated in <b>[Chueh2013]</b> and <b>[KHB12]</b>, as well as in <a class="el" href="step_31.html">step-31</a>.</p>
 <p>This method modifies the (discrete) weak form of the saturation equation to read  </p><p class="formulaDsp">
-<picture><source srcset="form_4982_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \left(\epsilon \frac{\partial S_h}{\partial t},\sigma_h\right)
   -
   \left(\mathbf{u}_t  F\left( S_h \right),
@@ -272,53 +272,53 @@
   &amp;=0
   \qquad
   \forall \sigma_h,
-\end{align*}" src="form_4982.png"/></picture>
+\end{align*}" src="form_4966.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_3078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3078.png"/></picture> is the artificial diffusion parameter and <picture><source srcset="form_4983_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat F$" src="form_4983.png"/></picture> is an appropriately chosen numerical flux on the boundary of the domain (we choose the obvious full upwind flux for this).</p>
-<p>Following <b>[GuermondPasquetti2008]</b> (and as detailed in <b>[Chueh2013]</b>), we use the parameter as a piecewise constant function set on each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> with the diameter <picture><source srcset="form_4984_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_{K}$" src="form_4984.png"/></picture> as  </p><p class="formulaDsp">
-<picture><source srcset="form_4985_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_3006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3006.png"/></picture> is the artificial diffusion parameter and <picture><source srcset="form_4967_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat F$" src="form_4967.png"/></picture> is an appropriately chosen numerical flux on the boundary of the domain (we choose the obvious full upwind flux for this).</p>
+<p>Following <b>[GuermondPasquetti2008]</b> (and as detailed in <b>[Chueh2013]</b>), we use the parameter as a piecewise constant function set on each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> with the diameter <picture><source srcset="form_4968_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_{K}$" src="form_4968.png"/></picture> as  </p><p class="formulaDsp">
+<picture><source srcset="form_4969_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \nu(S_h)|_{K} = \beta \| \mathbf{u}_t \max\{F'(S_h),1\} \|_{L^{\infty}(K)} \textrm{min} \left\{ h_{K},h^{\alpha}_{K} \frac{\|\textrm{Res}(S_h)\|_{L^{\infty}(K)}}{c(\mathbf{u}_t,S)} \right\}
-\]" src="form_4985.png"/></picture>
+\]" src="form_4969.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> is a stabilization exponent and <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> is a dimensionless user-defined stabilization constant. Following <b>[GuermondPasquetti2008]</b> as well as the implementation in <a class="el" href="step_31.html">step-31</a>, the velocity and saturation global normalization constant, <picture><source srcset="form_4986_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(\mathbf{u}_t,S)$" src="form_4986.png"/></picture>, and the residual <picture><source srcset="form_4987_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{Res}(S)$" src="form_4987.png"/></picture> are respectively given by  </p><p class="formulaDsp">
-<picture><source srcset="form_4988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> is a stabilization exponent and <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> is a dimensionless user-defined stabilization constant. Following <b>[GuermondPasquetti2008]</b> as well as the implementation in <a class="el" href="step_31.html">step-31</a>, the velocity and saturation global normalization constant, <picture><source srcset="form_4970_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c(\mathbf{u}_t,S)$" src="form_4970.png"/></picture>, and the residual <picture><source srcset="form_4971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{Res}(S)$" src="form_4971.png"/></picture> are respectively given by  </p><p class="formulaDsp">
+<picture><source srcset="form_4972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    c(\mathbf{u}_t,S) = c_R \|\mathbf{u}_t \max\{F'(S),1\}\|_{L^{\infty}(\Omega)} \textrm{var}(S)^\alpha | \textrm{diam} (\Omega) |^{\alpha - 2}
-\]" src="form_4988.png"/></picture>
+\]" src="form_4972.png"/></picture>
 </p>
 <p> and  </p><p class="formulaDsp">
-<picture><source srcset="form_4989_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4973_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \textrm{Res}(S) = \left( \epsilon \frac{\partial S}{\partial t} + \mathbf{u}_t \cdot \nabla F(S) + F(S)q \right) \cdot S^{\alpha - 1}
-\]" src="form_4989.png"/></picture>
+\]" src="form_4973.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_4108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_R$" src="form_4108.png"/></picture> is a second dimensionless user-defined constant, <picture><source srcset="form_4990_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{diam}(\Omega)$" src="form_4990.png"/></picture> is the diameter of the domain and <picture><source srcset="form_4991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{var}(S) =
-\textrm{max}_{\Omega} S - \textrm{min}_{\Omega} S$" src="form_4991.png"/></picture> is the range of the present saturation values in the entire computational domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>.</p>
-<p>This stabilization scheme has a number of advantages over simpler schemes such as finite volume (or discontinuous Galerkin) methods or streamline upwind Petrov Galerkin (SUPG) discretizations. In particular, the artificial diffusion term acts primarily in the vicinity of discontinuities since the residual is small in areas where the saturation is smooth. It therefore provides for a higher degree of accuracy. On the other hand, it is nonlinear since <picture><source srcset="form_3078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3078.png"/></picture> depends on the saturation <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>. We avoid this difficulty by treating all nonlinear terms explicitly, which leads to the following fully discrete problem at time step <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_4992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> where <picture><source srcset="form_3997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_R$" src="form_3997.png"/></picture> is a second dimensionless user-defined constant, <picture><source srcset="form_4974_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{diam}(\Omega)$" src="form_4974.png"/></picture> is the diameter of the domain and <picture><source srcset="form_4975_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{var}(S) =
+\textrm{max}_{\Omega} S - \textrm{min}_{\Omega} S$" src="form_4975.png"/></picture> is the range of the present saturation values in the entire computational domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>.</p>
+<p>This stabilization scheme has a number of advantages over simpler schemes such as finite volume (or discontinuous Galerkin) methods or streamline upwind Petrov Galerkin (SUPG) discretizations. In particular, the artificial diffusion term acts primarily in the vicinity of discontinuities since the residual is small in areas where the saturation is smooth. It therefore provides for a higher degree of accuracy. On the other hand, it is nonlinear since <picture><source srcset="form_3006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3006.png"/></picture> depends on the saturation <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>. We avoid this difficulty by treating all nonlinear terms explicitly, which leads to the following fully discrete problem at time step <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_4976_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
    &amp;\left( \epsilon S_h^{(n)},\sigma_h\right)_{\Omega} - \Delta t^{(n)}_c \Big(F\left(S_h^{(n-1)}\right)\mathbf{u}^{*}_t,\nabla\sigma_h\Big)_{\Omega} + \Delta t^{(n)}_c \Big(F\left(S_h^{(n-1)}\right)\left(\mathbf{n}\cdot\mathbf{u}^{*}_t\right),\sigma_h\Big)_{\partial\Omega} \nonumber \\
    &amp; \quad = \left( \epsilon S_h^{(n-1)},\sigma_h\right)_{\Omega} - \Delta t^{(n)}_c \bigg(\nu\left(S_h^{(n-1)}\right)\nabla S_h^{(n-1)},\nabla\sigma_h\bigg)_{\Omega} \nonumber \\
    &amp; \qquad + \Delta t^{(n)}_c \bigg(\mathbf{n}\cdot\nu\left(S_h^{(n-1)}\right)\nabla S^{(n-1)},\sigma_h\bigg)_{\partial\Omega}
-\end{align*}" src="form_4992.png"/></picture>
+\end{align*}" src="form_4976.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_4993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}_t^{*}$" src="form_4993.png"/></picture> is the velocity linearly extrapolated from <picture><source srcset="form_4994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}^{(n_p)}_t$" src="form_4994.png"/></picture> and <picture><source srcset="form_4995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}^{(n_{pp})}_t$" src="form_4995.png"/></picture> to the current time <picture><source srcset="form_4996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t^{(n)}$" src="form_4996.png"/></picture> if <picture><source srcset="form_4997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta&lt;\theta^*$" src="form_4997.png"/></picture> while <picture><source srcset="form_4993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}_t^{*}$" src="form_4993.png"/></picture> is <picture><source srcset="form_4994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}^{(n_p)}_t$" src="form_4994.png"/></picture> if <picture><source srcset="form_4998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta&gt;\theta^*$" src="form_4998.png"/></picture>. Consequently, the equation is linear in <picture><source srcset="form_4999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_h^{(n)}$" src="form_4999.png"/></picture> and all that is required is to solve with a <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> on the saturation space.</p>
+<p> where <picture><source srcset="form_4977_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}_t^{*}$" src="form_4977.png"/></picture> is the velocity linearly extrapolated from <picture><source srcset="form_4978_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}^{(n_p)}_t$" src="form_4978.png"/></picture> and <picture><source srcset="form_4979_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}^{(n_{pp})}_t$" src="form_4979.png"/></picture> to the current time <picture><source srcset="form_4980_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t^{(n)}$" src="form_4980.png"/></picture> if <picture><source srcset="form_4981_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta&lt;\theta^*$" src="form_4981.png"/></picture> while <picture><source srcset="form_4977_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}_t^{*}$" src="form_4977.png"/></picture> is <picture><source srcset="form_4978_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}^{(n_p)}_t$" src="form_4978.png"/></picture> if <picture><source srcset="form_4982_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta&gt;\theta^*$" src="form_4982.png"/></picture>. Consequently, the equation is linear in <picture><source srcset="form_4983_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_h^{(n)}$" src="form_4983.png"/></picture> and all that is required is to solve with a <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> on the saturation space.</p>
 <p>Since the Dirichlet boundary conditions for saturation are only imposed on the inflow boundaries, the third term on the left hand side of the equation above needs to be split further into two parts:  </p><p class="formulaDsp">
-<picture><source srcset="form_5000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_4984_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   &amp;\Delta t^{(n)}_c \Big(F\left(S_h^{(n-1)}\right)\left(\mathbf{n}\cdot\mathbf{u}^{(n)}_t\right),\sigma_h\Big)_{\partial\Omega} \nonumber \\
   &amp;\qquad= \Delta t^{(n)}_c \Big(F\left(S^{(n-1)}_{(+)}\right)\left(\mathbf{n}\cdot\mathbf{u}^{(n)}_{t(+)}\right),\sigma_h\Big)_{\partial\Omega_{(+)}} + \Delta t^{(n)}_c \Big(F\left(S^{(n-1)}_{(-)}\right)\left(\mathbf{n}\cdot\mathbf{u}^{(n)}_{t(-)}\right),\sigma_h\Big)_{\partial\Omega_{(-)}}
-\end{align*}" src="form_5000.png"/></picture>
+\end{align*}" src="form_4984.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_5001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega_{(-)} = \left\{\mathbf{x} \in \partial\Omega : \mathbf{n}
-  \cdot \mathbf{u}_t&lt;0\right\}$" src="form_5001.png"/></picture> and  <picture><source srcset="form_5002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega_{(+)} = \left\{\mathbf{x} \in \partial\Omega : \mathbf{n} \cdot
-  \mathbf{u}_t&gt;0\right\}$" src="form_5002.png"/></picture> represent inflow and outflow boundaries, respectively. We choose values using an upwind formulation, i.e. <picture><source srcset="form_5003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^{(n-1)}_{(+)}$" src="form_5003.png"/></picture> and <picture><source srcset="form_5004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}^{(n)}_{t(+)}$" src="form_5004.png"/></picture> correspond to the values taken from the present cell, while the values of <picture><source srcset="form_5005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^{(n-1)}_{(-)}$" src="form_5005.png"/></picture> and <picture><source srcset="form_5006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}^{(n)}_{t(-)}$" src="form_5006.png"/></picture> are those taken from the neighboring boundary <picture><source srcset="form_5007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega_{(-)}$" src="form_5007.png"/></picture>.</p>
+<p> where <picture><source srcset="form_4985_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega_{(-)} = \left\{\mathbf{x} \in \partial\Omega : \mathbf{n}
+  \cdot \mathbf{u}_t&lt;0\right\}$" src="form_4985.png"/></picture> and  <picture><source srcset="form_4986_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega_{(+)} = \left\{\mathbf{x} \in \partial\Omega : \mathbf{n} \cdot
+  \mathbf{u}_t&gt;0\right\}$" src="form_4986.png"/></picture> represent inflow and outflow boundaries, respectively. We choose values using an upwind formulation, i.e. <picture><source srcset="form_4987_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^{(n-1)}_{(+)}$" src="form_4987.png"/></picture> and <picture><source srcset="form_4988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}^{(n)}_{t(+)}$" src="form_4988.png"/></picture> correspond to the values taken from the present cell, while the values of <picture><source srcset="form_4989_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^{(n-1)}_{(-)}$" src="form_4989.png"/></picture> and <picture><source srcset="form_4990_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}^{(n)}_{t(-)}$" src="form_4990.png"/></picture> are those taken from the neighboring boundary <picture><source srcset="form_4991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega_{(-)}$" src="form_4991.png"/></picture>.</p>
 <p><a class="anchor" id="Adaptivemeshrefinement"></a></p><h3>Adaptive mesh refinement</h3>
 <p>Choosing meshes adaptively to resolve sharp saturation fronts is an essential ingredient to achieve efficiency in our algorithm. Here, we use the same shock-type refinement approach used in <b>[Chueh2013]</b> to select those cells that should be refined or coarsened. The refinement indicator for each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> of the triangulation is computed by  </p><p class="formulaDsp">
-<picture><source srcset="form_5008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_4992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \eta_{K} = |\nabla S_h(\mathbf x_K)|
-\]" src="form_5008.png"/></picture>
+\]" src="form_4992.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_5009_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla S_h(\mathbf x_K)$" src="form_5009.png"/></picture> is the gradient of the discrete saturation variable evaluated at the center <picture><source srcset="form_1480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_K$" src="form_1480.png"/></picture> of cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This approach is analogous to ones frequently used in compressible flow problems, where density gradients are used to indicate refinement. That said, as we will discuss at the end of the <a href="#href_anchor">results section</a>, this turns out to not be a very useful criterion since it leads to refinement basically everywhere. We only show it here for illustrative purposes.</p>
+<p> where <picture><source srcset="form_4993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla S_h(\mathbf x_K)$" src="form_4993.png"/></picture> is the gradient of the discrete saturation variable evaluated at the center <picture><source srcset="form_1481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_K$" src="form_1481.png"/></picture> of cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. This approach is analogous to ones frequently used in compressible flow problems, where density gradients are used to indicate refinement. That said, as we will discuss at the end of the <a href="#href_anchor">results section</a>, this turns out to not be a very useful criterion since it leads to refinement basically everywhere. We only show it here for illustrative purposes.</p>
 <p><a class="anchor" id="Thelinearsystemanditspreconditioning"></a></p><h3>The linear system and its preconditioning</h3>
-<p>Following the discretization of the governing equations discussed above, we obtain a linear system of equations in time step <picture><source srcset="form_5010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(n)$" src="form_5010.png"/></picture> of the following form:  </p><p class="formulaDsp">
-<picture><source srcset="form_5011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Following the discretization of the governing equations discussed above, we obtain a linear system of equations in time step <picture><source srcset="form_4994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(n)$" src="form_4994.png"/></picture> of the following form:  </p><p class="formulaDsp">
/usr/share/doc/packages/dealii/doxygen/deal.II/step_44.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_44.html	2024-03-17 21:57:46.707254457 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_44.html	2024-03-17 21:57:46.711254482 +0000
@@ -192,143 +192,143 @@
 </ol>
 <p><a class="anchor" id="Notation"></a></p><h3>Notation </h3>
 <p>One can think of fourth-order tensors as linear operators mapping second-order tensors (matrices) onto themselves in much the same way as matrices map vectors onto vectors. There are various fourth-order unit tensors that will be required in the forthcoming presentation. The fourth-order unit tensors <picture><source srcset="form_256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{I}$" src="form_256.png"/></picture> and <picture><source srcset="form_257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\overline{\mathcal{I}}$" src="form_257.png"/></picture> are defined by  </p><p class="formulaDsp">
-<picture><source srcset="form_5243_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_5040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \mathbf{A} = \mathcal{I}:\mathbf{A}
                 \qquad \text{and} \qquad
         \mathbf{A}^T = \overline{\mathcal{I}}:\mathbf{A} \, .
-\]" src="form_5243.png"/></picture>
+\]" src="form_5040.png"/></picture>
 </p>
 <p> Note <picture><source srcset="form_260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{I} \neq \overline{\mathcal{I}}^T$" src="form_260.png"/></picture>. Furthermore, we define the symmetric and skew-symmetric fourth-order unit tensors by  </p><p class="formulaDsp">
-<picture><source srcset="form_5244_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_5041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \mathcal{S} \dealcoloneq \dfrac{1}{2}[\mathcal{I} + \overline{\mathcal{I}}]
                 \qquad \text{and} \qquad
         \mathcal{W} \dealcoloneq \dfrac{1}{2}[\mathcal{I} - \overline{\mathcal{I}}] \, ,
-\]" src="form_5244.png"/></picture>
+\]" src="form_5041.png"/></picture>
 </p>
 <p> such that  </p><p class="formulaDsp">
-<picture><source srcset="form_5245_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_5042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \dfrac{1}{2}[\mathbf{A} + \mathbf{A}^T] = \mathcal{S}:\mathbf{A}
                 \qquad \text{and} \qquad
         \dfrac{1}{2}[\mathbf{A} - \mathbf{A}^T] = \mathcal{W}:\mathbf{A} \, .
-\]" src="form_5245.png"/></picture>
+\]" src="form_5042.png"/></picture>
 </p>
 <p> The fourth-order <code><a class="el" href="classSymmetricTensor.html">SymmetricTensor</a></code> returned by <a class="el" href="symmetric__tensor_8h.html#href_anchor">identity_tensor()</a> is <picture><source srcset="form_263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{S}$" src="form_263.png"/></picture>.</p>
 <p><a class="anchor" id="Kinematics"></a></p><h3>Kinematics</h3>
-<p>Let the time domain be denoted <picture><source srcset="form_5246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{T} = [0,T_{\textrm{end}}]$" src="form_5246.png"/></picture>, where <picture><source srcset="form_5247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t \in \mathbb{T}$" src="form_5247.png"/></picture> and <picture><source srcset="form_5248_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_{\textrm{end}}$" src="form_5248.png"/></picture> is the total problem duration. Consider a continuum body that occupies the reference configuration <picture><source srcset="form_5249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega_0$" src="form_5249.png"/></picture> at time <picture><source srcset="form_430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=0$" src="form_430.png"/></picture>. Particles in the reference configuration are identified by the position vector <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture>. The configuration of the body at a later time <picture><source srcset="form_3363_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t&gt;0$" src="form_3363.png"/></picture> is termed the current configuration, denoted <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, with particles identified by the vector <picture><source srcset="form_247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}$" src="form_247.png"/></picture>. The nonlinear map between the reference and current configurations, denoted <picture><source srcset="form_5250_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\varphi}$" src="form_5250.png"/></picture>, acts as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_5251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Let the time domain be denoted <picture><source srcset="form_5043_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{T} = [0,T_{\textrm{end}}]$" src="form_5043.png"/></picture>, where <picture><source srcset="form_5044_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t \in \mathbb{T}$" src="form_5044.png"/></picture> and <picture><source srcset="form_5045_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T_{\textrm{end}}$" src="form_5045.png"/></picture> is the total problem duration. Consider a continuum body that occupies the reference configuration <picture><source srcset="form_5046_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega_0$" src="form_5046.png"/></picture> at time <picture><source srcset="form_430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=0$" src="form_430.png"/></picture>. Particles in the reference configuration are identified by the position vector <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture>. The configuration of the body at a later time <picture><source srcset="form_3471_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t&gt;0$" src="form_3471.png"/></picture> is termed the current configuration, denoted <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, with particles identified by the vector <picture><source srcset="form_247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}$" src="form_247.png"/></picture>. The nonlinear map between the reference and current configurations, denoted <picture><source srcset="form_5047_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\varphi}$" src="form_5047.png"/></picture>, acts as follows:  </p><p class="formulaDsp">
+<picture><source srcset="form_5048_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \mathbf{x} = \boldsymbol{\varphi}(\mathbf{X},t) \, .
-\]" src="form_5251.png"/></picture>
+\]" src="form_5048.png"/></picture>
 </p>
 <p> The material description of the displacement of a particle is defined by  </p><p class="formulaDsp">
-<picture><source srcset="form_5252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_5049_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \mathbf{U}(\mathbf{X},t) = \mathbf{x}(\mathbf{X},t) - \mathbf{X} \, .
-\]" src="form_5252.png"/></picture>
+\]" src="form_5049.png"/></picture>
 </p>
 <p>The deformation gradient <picture><source srcset="form_240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{F}$" src="form_240.png"/></picture> is defined as the material gradient of the motion:  </p><p class="formulaDsp">
-<picture><source srcset="form_5253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_5050_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \mathbf{F}(\mathbf{X},t)
                 \dealcoloneq \dfrac{\partial \boldsymbol{\varphi}(\mathbf{X},t)}{\partial \mathbf{X}}
                 = \textrm{Grad}\ \mathbf{x}(\mathbf{X},t)
                 = \mathbf{I} + \textrm{Grad}\ \mathbf{U} \, .
-\]" src="form_5253.png"/></picture>
+\]" src="form_5050.png"/></picture>
 </p>
-<p> The determinant of the of the deformation gradient <picture><source srcset="form_5254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(\mathbf{X},t) \dealcoloneq \textrm{det}\ \mathbf{F}(\mathbf{X},t) &gt; 0$" src="form_5254.png"/></picture> maps corresponding volume elements in the reference and current configurations, denoted <picture><source srcset="form_5255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{d}V$" src="form_5255.png"/></picture> and <picture><source srcset="form_5256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{d}v$" src="form_5256.png"/></picture>, respectively, as  </p><p class="formulaDsp">
-<picture><source srcset="form_5257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> The determinant of the of the deformation gradient <picture><source srcset="form_5051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(\mathbf{X},t) \dealcoloneq \textrm{det}\ \mathbf{F}(\mathbf{X},t) &gt; 0$" src="form_5051.png"/></picture> maps corresponding volume elements in the reference and current configurations, denoted <picture><source srcset="form_5052_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{d}V$" src="form_5052.png"/></picture> and <picture><source srcset="form_5053_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{d}v$" src="form_5053.png"/></picture>, respectively, as  </p><p class="formulaDsp">
+<picture><source srcset="form_5054_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \textrm{d}v = J(\mathbf{X},t)\; \textrm{d}V \, .
-\]" src="form_5257.png"/></picture>
+\]" src="form_5054.png"/></picture>
 </p>
-<p>Two important measures of the deformation in terms of the spatial and material coordinates are the left and right Cauchy-Green tensors, respectively, and denoted <picture><source srcset="form_5258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{b} \dealcoloneq \mathbf{F}\mathbf{F}^T$" src="form_5258.png"/></picture> and <picture><source srcset="form_5259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} \dealcoloneq \mathbf{F}^T\mathbf{F}$" src="form_5259.png"/></picture>. They are both symmetric and positive definite.</p>
+<p>Two important measures of the deformation in terms of the spatial and material coordinates are the left and right Cauchy-Green tensors, respectively, and denoted <picture><source srcset="form_5055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{b} \dealcoloneq \mathbf{F}\mathbf{F}^T$" src="form_5055.png"/></picture> and <picture><source srcset="form_5056_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} \dealcoloneq \mathbf{F}^T\mathbf{F}$" src="form_5056.png"/></picture>. They are both symmetric and positive definite.</p>
 <p>The Green-Lagrange strain tensor is defined by  </p><p class="formulaDsp">
-<picture><source srcset="form_5260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_5057_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \mathbf{E} \dealcoloneq \frac{1}{2}[\mathbf{C} - \mathbf{I} ]
                 = \underbrace{\frac{1}{2}[\textrm{Grad}^T \mathbf{U} +  \textrm{Grad}\mathbf{U}]}_{\boldsymbol{\varepsilon}}
                         + \frac{1}{2}[\textrm{Grad}^T\ \mathbf{U}][\textrm{Grad}\ \mathbf{U}] \, .
-\]" src="form_5260.png"/></picture>
+\]" src="form_5057.png"/></picture>
 </p>
 <p> If the assumption of infinitesimal deformations is made, then the second term on the right can be neglected, and <picture><source srcset="form_792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\varepsilon}$" src="form_792.png"/></picture> (the linearised strain tensor) is the only component of the strain tensor. This assumption is, looking at the setup of the problem, not valid in <a class="el" href="step_18.html">step-18</a>, making the use of the linearized <picture><source srcset="form_792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\varepsilon}$" src="form_792.png"/></picture> as the strain measure in that tutorial program questionable.</p>
-<p>In order to handle the different response that materials exhibit when subjected to bulk and shear type deformations we consider the following decomposition of the deformation gradient <picture><source srcset="form_240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{F}$" src="form_240.png"/></picture> and the left Cauchy-Green tensor <picture><source srcset="form_3069_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{b}$" src="form_3069.png"/></picture> into volume-changing (volumetric) and volume-preserving (isochoric) parts:  </p><p class="formulaDsp">
-<picture><source srcset="form_5261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>In order to handle the different response that materials exhibit when subjected to bulk and shear type deformations we consider the following decomposition of the deformation gradient <picture><source srcset="form_240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{F}$" src="form_240.png"/></picture> and the left Cauchy-Green tensor <picture><source srcset="form_2997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{b}$" src="form_2997.png"/></picture> into volume-changing (volumetric) and volume-preserving (isochoric) parts:  </p><p class="formulaDsp">
+<picture><source srcset="form_5058_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \mathbf{F}
                 = (J^{1/3}\mathbf{I})\overline{\mathbf{F}}
         \qquad \text{and} \qquad
         \mathbf{b}
         = (J^{2/3}\mathbf{I})\overline{\mathbf{F}}\,\overline{\mathbf{F}}^T
                 =  (J^{2/3}\mathbf{I})\overline{\mathbf{b}} \, .
-\]" src="form_5261.png"/></picture>
+\]" src="form_5058.png"/></picture>
 </p>
-<p> Clearly, <picture><source srcset="form_5262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{det}\ \mathbf{F} = \textrm{det}\ (J^{1/3}\mathbf{I}) = J$" src="form_5262.png"/></picture>.</p>
-<p>The spatial velocity field is denoted <picture><source srcset="form_5263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}(\mathbf{x},t)$" src="form_5263.png"/></picture>. The derivative of the spatial velocity field with respect to the spatial coordinates gives the spatial velocity gradient <picture><source srcset="form_5264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{l}(\mathbf{x},t)$" src="form_5264.png"/></picture>, that is  </p><p class="formulaDsp">
-<picture><source srcset="form_5265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> Clearly, <picture><source srcset="form_5059_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{det}\ \mathbf{F} = \textrm{det}\ (J^{1/3}\mathbf{I}) = J$" src="form_5059.png"/></picture>.</p>
+<p>The spatial velocity field is denoted <picture><source srcset="form_5060_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}(\mathbf{x},t)$" src="form_5060.png"/></picture>. The derivative of the spatial velocity field with respect to the spatial coordinates gives the spatial velocity gradient <picture><source srcset="form_5061_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{l}(\mathbf{x},t)$" src="form_5061.png"/></picture>, that is  </p><p class="formulaDsp">
+<picture><source srcset="form_5062_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \mathbf{l}(\mathbf{x},t)
                 \dealcoloneq \dfrac{\partial \mathbf{v}(\mathbf{x},t)}{\partial \mathbf{x}}
                 = \textrm{grad}\ \mathbf{v}(\mathbf{x},t) \, ,
-\]" src="form_5265.png"/></picture>
+\]" src="form_5062.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_5266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{grad} \{\bullet \}
+<p> where <picture><source srcset="form_5063_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textrm{grad} \{\bullet \}
 = \frac{\partial \{ \bullet \} }{ \partial \mathbf{x}}
 = \frac{\partial \{ \bullet \} }{ \partial \mathbf{X}}\frac{\partial \mathbf{X} }{ \partial \mathbf{x}}
-= \textrm{Grad} \{ \bullet \} \mathbf{F}^{-1}$" src="form_5266.png"/></picture>.</p>
+= \textrm{Grad} \{ \bullet \} \mathbf{F}^{-1}$" src="form_5063.png"/></picture>.</p>
 <p><a class="anchor" id="Kinetics"></a></p><h3>Kinetics</h3>
-<p>Cauchy's stress theorem equates the Cauchy traction <picture><source srcset="form_2485_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{t}$" src="form_2485.png"/></picture> acting on an infinitesimal surface element in the current configuration <picture><source srcset="form_5267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{d}a$" src="form_5267.png"/></picture> to the product of the Cauchy stress tensor <picture><source srcset="form_793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\sigma}$" src="form_793.png"/></picture> (a spatial quantity) and the outward unit normal to the surface <picture><source srcset="form_2492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}$" src="form_2492.png"/></picture> as  </p><p class="formulaDsp">
-<picture><source srcset="form_5268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Cauchy's stress theorem equates the Cauchy traction <picture><source srcset="form_2485_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{t}$" src="form_2485.png"/></picture> acting on an infinitesimal surface element in the current configuration <picture><source srcset="form_5064_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{d}a$" src="form_5064.png"/></picture> to the product of the Cauchy stress tensor <picture><source srcset="form_793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\sigma}$" src="form_793.png"/></picture> (a spatial quantity) and the outward unit normal to the surface <picture><source srcset="form_2492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}$" src="form_2492.png"/></picture> as  </p><p class="formulaDsp">
+<picture><source srcset="form_5065_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \mathbf{t}(\mathbf{x},t, \mathbf{n}) = \boldsymbol{\sigma}\mathbf{n} \, .
-\]" src="form_5268.png"/></picture>
+\]" src="form_5065.png"/></picture>
 </p>
-<p> The Cauchy stress is symmetric. Similarly, the first Piola-Kirchhoff traction <picture><source srcset="form_2459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}$" src="form_2459.png"/></picture> which acts on an infinitesimal surface element in the reference configuration <picture><source srcset="form_5269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{d}A$" src="form_5269.png"/></picture> is the product of the first Piola-Kirchhoff stress tensor <picture><source srcset="form_5270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{P}$" src="form_5270.png"/></picture> (a two-point tensor) and the outward unit normal to the surface <picture><source srcset="form_2491_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{N}$" src="form_2491.png"/></picture> as  </p><p class="formulaDsp">
-<picture><source srcset="form_5271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> The Cauchy stress is symmetric. Similarly, the first Piola-Kirchhoff traction <picture><source srcset="form_2466_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}$" src="form_2466.png"/></picture> which acts on an infinitesimal surface element in the reference configuration <picture><source srcset="form_5066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{d}A$" src="form_5066.png"/></picture> is the product of the first Piola-Kirchhoff stress tensor <picture><source srcset="form_5067_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{P}$" src="form_5067.png"/></picture> (a two-point tensor) and the outward unit normal to the surface <picture><source srcset="form_2491_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{N}$" src="form_2491.png"/></picture> as  </p><p class="formulaDsp">
+<picture><source srcset="form_5068_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \mathbf{T}(\mathbf{X},t, \mathbf{N}) = \mathbf{P}\mathbf{N} \, .
-\]" src="form_5271.png"/></picture>
+\]" src="form_5068.png"/></picture>
 </p>
-<p> The Cauchy traction <picture><source srcset="form_2485_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{t}$" src="form_2485.png"/></picture> and the first Piola-Kirchhoff traction <picture><source srcset="form_2459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}$" src="form_2459.png"/></picture> are related as  </p><p class="formulaDsp">
-<picture><source srcset="form_5272_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> The Cauchy traction <picture><source srcset="form_2485_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{t}$" src="form_2485.png"/></picture> and the first Piola-Kirchhoff traction <picture><source srcset="form_2466_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{T}$" src="form_2466.png"/></picture> are related as  </p><p class="formulaDsp">
+<picture><source srcset="form_5069_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \mathbf{t}\mathrm{d}a = \mathbf{T}\mathrm{d}A \, .
-\]" src="form_5272.png"/></picture>
+\]" src="form_5069.png"/></picture>
 </p>
 <p> This can be demonstrated using <a href="http://en.wikipedia.org/wiki/Finite_strain_theory">Nanson's formula</a>.</p>
 <p>The first Piola-Kirchhoff stress tensor is related to the Cauchy stress as  </p><p class="formulaDsp">
-<picture><source srcset="form_5273_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_5070_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \mathbf{P} = J \boldsymbol{\sigma}\mathbf{F}^{-T} \, .
-\]" src="form_5273.png"/></picture>
+\]" src="form_5070.png"/></picture>
 </p>
-<p> Further important stress measures are the (spatial) Kirchhoff stress <picture><source srcset="form_5274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\tau} = J \boldsymbol{\sigma}$" src="form_5274.png"/></picture> and the (referential) second Piola-Kirchhoff stress <picture><source srcset="form_5275_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{S} = {\mathbf{F}}^{-1} \boldsymbol{\tau} {\mathbf{F}}^{-T}$" src="form_5275.png"/></picture>.</p>
+<p> Further important stress measures are the (spatial) Kirchhoff stress <picture><source srcset="form_5071_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\tau} = J \boldsymbol{\sigma}$" src="form_5071.png"/></picture> and the (referential) second Piola-Kirchhoff stress <picture><source srcset="form_5072_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{S} = {\mathbf{F}}^{-1} \boldsymbol{\tau} {\mathbf{F}}^{-T}$" src="form_5072.png"/></picture>.</p>
 <p><a class="anchor" id="Pushforwardandpullbackoperators"></a></p><h3>Push-forward and pull-back operators </h3>
 <p>Push-forward and pull-back operators allow one to transform various measures between the material and spatial settings. The stress measures used here are contravariant, while the strain measures are covariant.</p>
-<p>The push-forward and-pull back operations for second-order covariant tensors <picture><source srcset="form_5276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\bullet)^{\text{cov}}$" src="form_5276.png"/></picture> are respectively given by:  </p><p class="formulaDsp">
-<picture><source srcset="form_5277_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>The push-forward and-pull back operations for second-order covariant tensors <picture><source srcset="form_5073_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\bullet)^{\text{cov}}$" src="form_5073.png"/></picture> are respectively given by:  </p><p class="formulaDsp">
+<picture><source srcset="form_5074_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \chi_{*}(\bullet)^{\text{cov}} \dealcoloneq \mathbf{F}^{-T} (\bullet)^{\text{cov}} \mathbf{F}^{-1}
         \qquad \text{and} \qquad
         \chi^{-1}_{*}(\bullet)^{\text{cov}} \dealcoloneq \mathbf{F}^{T} (\bullet)^{\text{cov}} \mathbf{F} \, .
-\]" src="form_5277.png"/></picture>
+\]" src="form_5074.png"/></picture>
 </p>
-<p>The push-forward and pull back operations for second-order contravariant tensors <picture><source srcset="form_5278_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\bullet)^{\text{con}}$" src="form_5278.png"/></picture> are respectively given by:  </p><p class="formulaDsp">
-<picture><source srcset="form_5279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>The push-forward and pull back operations for second-order contravariant tensors <picture><source srcset="form_5075_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\bullet)^{\text{con}}$" src="form_5075.png"/></picture> are respectively given by:  </p><p class="formulaDsp">
+<picture><source srcset="form_5076_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \chi_{*}(\bullet)^{\text{con}} \dealcoloneq \mathbf{F} (\bullet)^{\text{con}} \mathbf{F}^T
         \qquad \text{and} \qquad
         \chi^{-1}_{*}(\bullet)^{\text{con}} \dealcoloneq \mathbf{F}^{-1} (\bullet)^{\text{con}} \mathbf{F}^{-T} \, .
-\]" src="form_5279.png"/></picture>
+\]" src="form_5076.png"/></picture>
 </p>
-<p> For example <picture><source srcset="form_5280_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\tau} = \chi_{*}(\mathbf{S})$" src="form_5280.png"/></picture>.</p>
+<p> For example <picture><source srcset="form_5077_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\tau} = \chi_{*}(\mathbf{S})$" src="form_5077.png"/></picture>.</p>
 <p><a class="anchor" id="Hyperelasticmaterials"></a></p><h3>Hyperelastic materials</h3>
-<p>A hyperelastic material response is governed by a Helmholtz free energy function <picture><source srcset="form_5281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi = \Psi(\mathbf{F}) = \Psi(\mathbf{C}) = \Psi(\mathbf{b})$" src="form_5281.png"/></picture> which serves as a potential for the stress. For example, if the Helmholtz free energy depends on the right Cauchy-Green tensor <picture><source srcset="form_1837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1837.png"/></picture> then the isotropic hyperelastic response is  </p><p class="formulaDsp">
-<picture><source srcset="form_5282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>A hyperelastic material response is governed by a Helmholtz free energy function <picture><source srcset="form_5078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi = \Psi(\mathbf{F}) = \Psi(\mathbf{C}) = \Psi(\mathbf{b})$" src="form_5078.png"/></picture> which serves as a potential for the stress. For example, if the Helmholtz free energy depends on the right Cauchy-Green tensor <picture><source srcset="form_1807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1807.png"/></picture> then the isotropic hyperelastic response is  </p><p class="formulaDsp">
+<picture><source srcset="form_5079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \mathbf{S}
                 = 2 \dfrac{\partial \Psi(\mathbf{C})}{\partial \mathbf{C}} \, .
-\]" src="form_5282.png"/></picture>
+\]" src="form_5079.png"/></picture>
 </p>
-<p> If the Helmholtz free energy depends on the left Cauchy-Green tensor <picture><source srcset="form_3069_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{b}$" src="form_3069.png"/></picture> then the isotropic hyperelastic response is  </p><p class="formulaDsp">
-<picture><source srcset="form_5283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> If the Helmholtz free energy depends on the left Cauchy-Green tensor <picture><source srcset="form_2997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{b}$" src="form_2997.png"/></picture> then the isotropic hyperelastic response is  </p><p class="formulaDsp">
+<picture><source srcset="form_5080_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \boldsymbol{\tau}
                 = 2 \dfrac{\partial \Psi(\mathbf{b})}{\partial \mathbf{b}} \mathbf{b}
                 =  2 \mathbf{b} \dfrac{\partial \Psi(\mathbf{b})}{\partial \mathbf{b}} \, .
-\]" src="form_5283.png"/></picture>
+\]" src="form_5080.png"/></picture>
 </p>
 <p>Following the multiplicative decomposition of the deformation gradient, the Helmholtz free energy can be decomposed as  </p><p class="formulaDsp">
-<picture><source srcset="form_5285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_5081_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
         \Psi(\mathbf{b}) = \Psi_{\text{vol}}(J) + \Psi_{\text{iso}}(\overline{\mathbf{b}}) \, .
-\]" src="form_5285.png"/></picture>
+\]" src="form_5081.png"/></picture>
 </p>
-<p> Similarly, the Kirchhoff stress can be decomposed into volumetric and isochoric parts as <picture><source srcset="form_5286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\tau} = \boldsymbol{\tau}_{\text{vol}} + \boldsymbol{\tau}_{\text{iso}}$" src="form_5286.png"/></picture> where:  </p><p class="formulaDsp">
-<picture><source srcset="form_5287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> Similarly, the Kirchhoff stress can be decomposed into volumetric and isochoric parts as <picture><source srcset="form_5082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\tau} = \boldsymbol{\tau}_{\text{vol}} + \boldsymbol{\tau}_{\text{iso}}$" src="form_5082.png"/></picture> where:  </p><p class="formulaDsp">
+<picture><source srcset="form_5083_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
/usr/share/doc/packages/dealii/doxygen/deal.II/step_45.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_45.html	2024-03-17 21:57:46.775254878 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_45.html	2024-03-17 21:57:46.779254902 +0000
@@ -132,14 +132,14 @@
 <div class="line">                                  first_vector_components = &lt;<span class="keywordflow">default</span> value&gt;);</div>
 <div class="ttc" id="anamespaceGridTools_html_a6d4746ce23da38b9b9bb9a3f83048289"><div class="ttname"><a href="namespaceGridTools.html#href_anchor">GridTools::collect_periodic_faces</a></div><div class="ttdeci">void collect_periodic_faces(const MeshType &amp;mesh, const types::boundary_id b_id1, const types::boundary_id b_id2, const unsigned int direction, std::vector&lt; PeriodicFacePair&lt; typename MeshType::cell_iterator &gt; &gt; &amp;matched_pairs, const Tensor&lt; 1, MeshType::space_dimension &gt; &amp;offset=::Tensor&lt; 1, MeshType::space_dimension &gt;(), const FullMatrix&lt; double &gt; &amp;matrix=FullMatrix&lt; double &gt;())</div><div class="ttdef"><b>Definition</b> <a href="grid__tools__dof__handlers_8cc_source.html#href_anchor">grid_tools_dof_handlers.cc:2232</a></div></div>
 </div><!-- fragment --><p>This call loops over all faces of the container dof_handler on the periodic boundaries with boundary indicator <code>b_id1</code> and <code>b_id2</code>, respectively. (You can assign these boundary indicators by hand after creating the coarse mesh, see <a class="el" href="DEALGlossary.html#href_anchor">Boundary indicator</a>. Alternatively, you can also let many of the functions in namespace <a class="el" href="namespaceGridGenerator.html">GridGenerator</a> do this for if you specify the "colorize" flag; in that case, these functions will assign different boundary indicators to different parts of the boundary, with the details typically spelled out in the documentation of these functions.)</p>
-<p>Concretely, if <picture><source srcset="form_4838_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_{1/2}$" src="form_4838.png"/></picture> are the vertices of two faces <picture><source srcset="form_4839_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{face}_{1/2}$" src="form_4839.png"/></picture>, then the function call above will match pairs of faces (and dofs) such that the difference between <picture><source srcset="form_4840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_2$" src="form_4840.png"/></picture> and <picture><source srcset="form_4841_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$matrix\cdot \text{vertices}_1+\text{offset}$" src="form_4841.png"/></picture> vanishes in every component apart from direction and stores the resulting pairs with associated data in <code>matched_pairs</code>. (See <a class="el" href="namespaceGridTools.html#href_anchor">GridTools::orthogonal_equality()</a> for detailed information about the matching process.)</p>
-<p>Consider, for example, the colored unit square <picture><source srcset="form_2801_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega=[0,1]^2$" src="form_2801.png"/></picture> with boundary indicator 0 on the left, 1 on the right, 2 on the bottom and 3 on the top faces. (See the documentation of <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_cube()</a> for this convention on how boundary indicators are assigned.) Then, </p><div class="fragment"><div class="line"><a class="code hl_function" href="namespaceGridTools.html#href_anchor">GridTools::collect_periodic_faces</a>(dof_handler,</div>
+<p>Concretely, if <picture><source srcset="form_5279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_{1/2}$" src="form_5279.png"/></picture> are the vertices of two faces <picture><source srcset="form_5280_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{face}_{1/2}$" src="form_5280.png"/></picture>, then the function call above will match pairs of faces (and dofs) such that the difference between <picture><source srcset="form_5281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_2$" src="form_5281.png"/></picture> and <picture><source srcset="form_5282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$matrix\cdot \text{vertices}_1+\text{offset}$" src="form_5282.png"/></picture> vanishes in every component apart from direction and stores the resulting pairs with associated data in <code>matched_pairs</code>. (See <a class="el" href="namespaceGridTools.html#href_anchor">GridTools::orthogonal_equality()</a> for detailed information about the matching process.)</p>
+<p>Consider, for example, the colored unit square <picture><source srcset="form_2794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega=[0,1]^2$" src="form_2794.png"/></picture> with boundary indicator 0 on the left, 1 on the right, 2 on the bottom and 3 on the top faces. (See the documentation of <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_cube()</a> for this convention on how boundary indicators are assigned.) Then, </p><div class="fragment"><div class="line"><a class="code hl_function" href="namespaceGridTools.html#href_anchor">GridTools::collect_periodic_faces</a>(dof_handler,</div>
 <div class="line">                                  <span class="comment">/*b_id1*/</span> 0,</div>
 <div class="line">                                  <span class="comment">/*b_id2*/</span> 1,</div>
 <div class="line">                                  <span class="comment">/*direction*/</span> 0,</div>
 <div class="line">                                  matched_pairs);</div>
-</div><!-- fragment --><p> would yield periodicity constraints such that <picture><source srcset="form_4842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(0,y)=u(1,y)$" src="form_4842.png"/></picture> for all <picture><source srcset="form_4843_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y\in[0,1]$" src="form_4843.png"/></picture>.</p>
-<p>If we instead consider the parallelogram given by the convex hull of <picture><source srcset="form_350_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0,0)$" src="form_350.png"/></picture>, <picture><source srcset="form_3470_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1,1)$" src="form_3470.png"/></picture>, <picture><source srcset="form_4443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1,2)$" src="form_4443.png"/></picture>, <picture><source srcset="form_347_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0,1)$" src="form_347.png"/></picture> we can achieve the constraints <picture><source srcset="form_1471_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(0,y)=u(1,y+1)$" src="form_1471.png"/></picture> by specifying an <code>offset:</code> </p><div class="fragment"><div class="line"><a class="code hl_function" href="namespaceGridTools.html#href_anchor">GridTools::collect_periodic_faces</a>(dof_handler,</div>
+</div><!-- fragment --><p> would yield periodicity constraints such that <picture><source srcset="form_5283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(0,y)=u(1,y)$" src="form_5283.png"/></picture> for all <picture><source srcset="form_5284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y\in[0,1]$" src="form_5284.png"/></picture>.</p>
+<p>If we instead consider the parallelogram given by the convex hull of <picture><source srcset="form_350_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0,0)$" src="form_350.png"/></picture>, <picture><source srcset="form_3334_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1,1)$" src="form_3334.png"/></picture>, <picture><source srcset="form_4582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1,2)$" src="form_4582.png"/></picture>, <picture><source srcset="form_347_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0,1)$" src="form_347.png"/></picture> we can achieve the constraints <picture><source srcset="form_1397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(0,y)=u(1,y+1)$" src="form_1397.png"/></picture> by specifying an <code>offset:</code> </p><div class="fragment"><div class="line"><a class="code hl_function" href="namespaceGridTools.html#href_anchor">GridTools::collect_periodic_faces</a>(dof_handler,</div>
 <div class="line">                                  <span class="comment">/*b_id1*/</span> 0,</div>
 <div class="line">                                  <span class="comment">/*b_id2*/</span> 1,</div>
 <div class="line">                                  <span class="comment">/*direction*/</span> 0,</div>
@@ -169,18 +169,18 @@
 </div><!-- fragment --><p> Here, we need to specify the orientation of the two faces using <code>face_orientation</code>, <code>face_flip</code> and <code>face_orientation</code>. For a closer description have a look at the documentation of <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::make_periodicity_constraints</a>. The remaining parameters are the same as for the high level interface apart from the self-explaining <code>component_mask</code> and <code>affine_constraints</code>.</p>
 <p><a class="anchor" id="problem"></a> <a class="anchor" id="Apracticalexample"></a></p><h1>A practical example</h1>
 <p>In the following, we show how to use the above functions in a more involved example. The task is to enforce rotated periodicity constraints for the velocity component of a Stokes flow.</p>
-<p>On a quarter-circle defined by <picture><source srcset="form_4844_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega=\{{\bf x}\in(0,1)^2:\|{\bf x}\|\in (0.5,1)\}$" src="form_4844.png"/></picture> we are going to solve the Stokes problem  </p><p class="formulaDsp">
-<picture><source srcset="form_4845_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>On a quarter-circle defined by <picture><source srcset="form_5285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega=\{{\bf x}\in(0,1)^2:\|{\bf x}\|\in (0.5,1)\}$" src="form_5285.png"/></picture> we are going to solve the Stokes problem  </p><p class="formulaDsp">
+<picture><source srcset="form_5286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   -\Delta \; \textbf{u} + \nabla p &amp;=&amp; (\exp(-100\|{\bf x}-(.75,0.1)^T\|^2),0)^T, \\
   -\textrm{div}\;  \textbf{u}&amp;=&amp;0,\\
   \textbf{u}|_{\Gamma_1}&amp;=&amp;{\bf 0},
-\end{eqnarray*}" src="form_4845.png"/></picture>
+\end{eqnarray*}" src="form_5286.png"/></picture>
 </p>
-<p> where the boundary <picture><source srcset="form_3730_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1$" src="form_3730.png"/></picture> is defined as <picture><source srcset="form_4846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1 \dealcoloneq \{x\in \partial\Omega: \|x\|\in\{0.5,1\}\}$" src="form_4846.png"/></picture>. For the remaining parts of the boundary we are going to use periodic boundary conditions, i.e.  </p><p class="formulaDsp">
-<picture><source srcset="form_4847_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> where the boundary <picture><source srcset="form_3834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1$" src="form_3834.png"/></picture> is defined as <picture><source srcset="form_5287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1 \dealcoloneq \{x\in \partial\Omega: \|x\|\in\{0.5,1\}\}$" src="form_5287.png"/></picture>. For the remaining parts of the boundary we are going to use periodic boundary conditions, i.e.  </p><p class="formulaDsp">
+<picture><source srcset="form_5288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   u_x(0,\nu)&amp;=-u_y(\nu,0)&amp;\nu&amp;\in[0,1]\\
   u_y(0,\nu)&amp;=u_x(\nu,0)&amp;\nu&amp;\in[0,1].
-\end{align*}" src="form_4847.png"/></picture>
+\end{align*}" src="form_5288.png"/></picture>
 </p>
 <p>The mesh will be generated by <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::quarter_hyper_shell()</a>, which also documents how it assigns boundary indicators to its various boundaries if its <code>colorize</code> argument is set to <code>true</code>.</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
@@ -205,15 +205,15 @@
 <div class="ttc" id="adata__out__base_8cc_html_a8188ef4709fc9a4cc076d37447783ba1"><div class="ttname"><a href="data__out__base_8cc.html#href_anchor">center</a></div><div class="ttdeci">Point&lt; 3 &gt; center</div><div class="ttdef"><b>Definition</b> <a href="data__out__base_8cc_source.html#href_anchor">data_out_base.cc:268</a></div></div>
 <div class="ttc" id="anamespaceGridGenerator_html_acd7c51b0e8032db65db9a5ff73ccca50"><div class="ttname"><a href="namespaceGridGenerator.html#href_anchor">GridGenerator::quarter_hyper_shell</a></div><div class="ttdeci">void quarter_hyper_shell(Triangulation&lt; dim &gt; &amp;tria, const Point&lt; dim &gt; &amp;center, const double inner_radius, const double outer_radius, const unsigned int n_cells=0, const bool colorize=false)</div></div>
 <div class="ttc" id="ap4est__wrappers_8cc_html_ace00f2f80d9780ef9aa1007e1c22c6a4"><div class="ttname"><a href="p4est__wrappers_8cc.html#href_anchor">triangulation</a></div><div class="ttdeci">const ::parallel::distributed::Triangulation&lt; dim, spacedim &gt; * triangulation</div><div class="ttdef"><b>Definition</b> <a href="p4est__wrappers_8cc_source.html#href_anchor">p4est_wrappers.cc:69</a></div></div>
-</div><!-- fragment --><p>Before we can prescribe periodicity constraints, we need to ensure that cells on opposite sides of the domain but connected by periodic faces are part of the ghost layer if one of them is stored on the local processor. At this point we need to think about how we want to prescribe periodicity. The vertices <picture><source srcset="form_4840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_2$" src="form_4840.png"/></picture> of a face on the left boundary should be matched to the vertices <picture><source srcset="form_4848_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_1$" src="form_4848.png"/></picture> of a face on the lower boundary given by <picture><source srcset="form_4849_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_2=R\cdot
-   \text{vertices}_1+b$" src="form_4849.png"/></picture> where the rotation matrix <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> and the offset <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> are given by  </p><p class="formulaDsp">
-<picture><source srcset="form_4850_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+</div><!-- fragment --><p>Before we can prescribe periodicity constraints, we need to ensure that cells on opposite sides of the domain but connected by periodic faces are part of the ghost layer if one of them is stored on the local processor. At this point we need to think about how we want to prescribe periodicity. The vertices <picture><source srcset="form_5281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_2$" src="form_5281.png"/></picture> of a face on the left boundary should be matched to the vertices <picture><source srcset="form_5289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_1$" src="form_5289.png"/></picture> of a face on the lower boundary given by <picture><source srcset="form_5290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_2=R\cdot
+   \text{vertices}_1+b$" src="form_5290.png"/></picture> where the rotation matrix <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> and the offset <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> are given by  </p><p class="formulaDsp">
+<picture><source srcset="form_5291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
    R=\begin{pmatrix}
    0&amp;1\\-1&amp;0
    \end{pmatrix},
    \quad
    b=\begin{pmatrix}0&amp;0\end{pmatrix}.
-   \end{align*}" src="form_4850.png"/></picture>
+   \end{align*}" src="form_5291.png"/></picture>
 </p>
 <p> The data structure we are saving the resulting information into is here based on the <a class="el" href="classTriangulation.html">Triangulation</a>.</p>
 <div class="fragment"><div class="line">      std::vector&lt;<a class="code hl_struct" href="structGridTools_1_1PeriodicFacePair.html">GridTools::PeriodicFacePair</a>&lt;</div>
@@ -295,23 +295,23 @@
 <div class="ttc" id="anamespaceDoFTools_html_a796721b56b3a90e4e3973c7caae4c3d8"><div class="ttname"><a href="namespaceDoFTools.html#href_anchor">DoFTools::count_dofs_per_fe_block</a></div><div class="ttdeci">std::vector&lt; types::global_dof_index &gt; count_dofs_per_fe_block(const DoFHandler&lt; dim, spacedim &gt; &amp;dof, const std::vector&lt; unsigned int &gt; &amp;target_block=std::vector&lt; unsigned int &gt;())</div><div class="ttdef"><b>Definition</b> <a href="dof__tools_8cc_source.html#href_anchor">dof_tools.cc:1973</a></div></div>
 <div class="ttc" id="anamespaceVectorTools_html_ab2562d41bb26f362043f9719a8cd9b87"><div class="ttname"><a href="namespaceVectorTools.html#href_anchor">VectorTools::interpolate_boundary_values</a></div><div class="ttdeci">void interpolate_boundary_values(const Mapping&lt; dim, spacedim &gt; &amp;mapping, const DoFHandler&lt; dim, spacedim &gt; &amp;dof, const std::map&lt; types::boundary_id, const Function&lt; spacedim, number &gt; * &gt; &amp;function_map, std::map&lt; types::global_dof_index, number &gt; &amp;boundary_values, const ComponentMask &amp;component_mask=ComponentMask())</div></div>
 <div class="ttc" id="astructFEValuesExtractors_1_1Vector_html"><div class="ttname"><a href="structFEValuesExtractors_1_1Vector.html">FEValuesExtractors::Vector</a></div><div class="ttdef"><b>Definition</b> <a href="fe__values__extractors_8h_source.html#href_anchor">fe_values_extractors.h:151</a></div></div>
-</div><!-- fragment --><p>After we provided the mesh with the necessary information for the periodicity constraints, we are now able to actual create them. For describing the matching we are using the same approach as before, i.e., the <picture><source srcset="form_4840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_2$" src="form_4840.png"/></picture> of a face on the left boundary should be matched to the vertices <picture><source srcset="form_4848_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_1$" src="form_4848.png"/></picture> of a face on the lower boundary given by <picture><source srcset="form_4851_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_2=R\cdot \text{vertices}_1+b$" src="form_4851.png"/></picture> where the rotation matrix <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> and the offset <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> are given by  </p><p class="formulaDsp">
-<picture><source srcset="form_4850_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+</div><!-- fragment --><p>After we provided the mesh with the necessary information for the periodicity constraints, we are now able to actual create them. For describing the matching we are using the same approach as before, i.e., the <picture><source srcset="form_5281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_2$" src="form_5281.png"/></picture> of a face on the left boundary should be matched to the vertices <picture><source srcset="form_5289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_1$" src="form_5289.png"/></picture> of a face on the lower boundary given by <picture><source srcset="form_5292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_2=R\cdot \text{vertices}_1+b$" src="form_5292.png"/></picture> where the rotation matrix <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> and the offset <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> are given by  </p><p class="formulaDsp">
+<picture><source srcset="form_5291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
    R=\begin{pmatrix}
    0&amp;1\\-1&amp;0
    \end{pmatrix},
    \quad
    b=\begin{pmatrix}0&amp;0\end{pmatrix}.
-   \end{align*}" src="form_4850.png"/></picture>
+   \end{align*}" src="form_5291.png"/></picture>
 </p>
-<p> These two objects not only describe how faces should be matched but also in which sense the solution should be transformed from <picture><source srcset="form_4852_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{face}_2$" src="form_4852.png"/></picture> to <picture><source srcset="form_4853_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{face}_1$" src="form_4853.png"/></picture>.</p>
+<p> These two objects not only describe how faces should be matched but also in which sense the solution should be transformed from <picture><source srcset="form_5293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{face}_2$" src="form_5293.png"/></picture> to <picture><source srcset="form_5294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{face}_1$" src="form_5294.png"/></picture>.</p>
 <div class="fragment"><div class="line">        <a class="code hl_class" href="classFullMatrix.html">FullMatrix&lt;double&gt;</a> rotation_matrix(dim);</div>
 <div class="line">        rotation_matrix[0][1] = 1.;</div>
 <div class="line">        rotation_matrix[1][0] = -1.;</div>
 <div class="line">  </div>
 <div class="line">        <a class="code hl_class" href="classTensor.html">Tensor&lt;1, dim&gt;</a> offset;</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>For setting up the constraints, we first store the periodicity information in an auxiliary object of type <code>std::vector&lt;<a class="el" href="structGridTools_1_1PeriodicFacePair.html">GridTools::PeriodicFacePair</a>&lt;typename <a class="el" href="classDoFHandler.html">DoFHandler</a>&lt;dim&gt;::cell_iterator&gt; </code>. The periodic boundaries have the boundary indicators 2 (x=0) and 3 (y=0). All the other parameters we have set up before. In this case the direction does not matter. Due to <picture><source srcset="form_4851_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_2=R\cdot \text{vertices}_1+b$" src="form_4851.png"/></picture> this is exactly what we want.</p>
+</div><!-- fragment --><p>For setting up the constraints, we first store the periodicity information in an auxiliary object of type <code>std::vector&lt;<a class="el" href="structGridTools_1_1PeriodicFacePair.html">GridTools::PeriodicFacePair</a>&lt;typename <a class="el" href="classDoFHandler.html">DoFHandler</a>&lt;dim&gt;::cell_iterator&gt; </code>. The periodic boundaries have the boundary indicators 2 (x=0) and 3 (y=0). All the other parameters we have set up before. In this case the direction does not matter. Due to <picture><source srcset="form_5292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{vertices}_2=R\cdot \text{vertices}_1+b$" src="form_5292.png"/></picture> this is exactly what we want.</p>
 <div class="fragment"><div class="line">        std::vector&lt;</div>
 <div class="line">          <a class="code hl_struct" href="structGridTools_1_1PeriodicFacePair.html">GridTools::PeriodicFacePair&lt;typename DoFHandler&lt;dim&gt;::cell_iterator</a>&gt;&gt;</div>
 <div class="line">          periodicity_vector;</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_46.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_46.html	2024-03-17 21:57:46.863255421 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_46.html	2024-03-17 21:57:46.863255421 +0000
@@ -152,60 +152,60 @@
 <p><a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p>This program deals with the problem of coupling different physics in different parts of the domain. Specifically, let us consider the following situation that couples a Stokes fluid with an elastic solid (these two problems were previously discussed separately in <a class="el" href="step_22.html">step-22</a> and <a class="el" href="step_8.html">step-8</a>, where you may want to read up on the individual equations):</p>
 <ul>
-<li>In a part <picture><source srcset="form_5056_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega_f$" src="form_5056.png"/></picture> of <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, we have a fluid flowing that satisfies the time independent Stokes equations (in the form that involves the strain tensor):  <p class="formulaDsp">
-<picture><source srcset="form_5057_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<li>In a part <picture><source srcset="form_5295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega_f$" src="form_5295.png"/></picture> of <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, we have a fluid flowing that satisfies the time independent Stokes equations (in the form that involves the strain tensor):  <p class="formulaDsp">
+<picture><source srcset="form_5296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     -2\eta\nabla \cdot \varepsilon(\mathbf v) + \nabla p &amp;= 0,
           \qquad \qquad &amp;&amp; \text{in}\ \Omega_f\\
     -\nabla \cdot \mathbf v &amp;= 0  &amp;&amp; \text{in}\ \Omega_f.
-  \end{align*}" src="form_5057.png"/></picture>
+  \end{align*}" src="form_5296.png"/></picture>
 </p>
- Here, <picture><source srcset="form_5058_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v, p$" src="form_5058.png"/></picture> are the fluid velocity and pressure, respectively. We prescribe the velocity on part of the external boundary,  <p class="formulaDsp">
-<picture><source srcset="form_5059_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+ Here, <picture><source srcset="form_5297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v, p$" src="form_5297.png"/></picture> are the fluid velocity and pressure, respectively. We prescribe the velocity on part of the external boundary,  <p class="formulaDsp">
+<picture><source srcset="form_5298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     \mathbf v = \mathbf v_0 \qquad\qquad
      \text{on}\ \Gamma_{f,1} \subset \partial\Omega \cap \partial\Omega_f
-  \end{align*}" src="form_5059.png"/></picture>
+  \end{align*}" src="form_5298.png"/></picture>
 </p>
  while we assume free-flow conditions on the remainder of the external boundary,  <p class="formulaDsp">
-<picture><source srcset="form_5060_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5299_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     (2\eta \varepsilon(\mathbf v) - p \mathbf 1) \cdot \mathbf n = 0
      \qquad\qquad
      \text{on}\ \Gamma_{f,2} = \partial\Omega \cap \partial\Omega_f \backslash
      \Gamma_{f,1}.
-  \end{align*}" src="form_5060.png"/></picture>
+  \end{align*}" src="form_5299.png"/></picture>
 </p>
 </li>
-<li>The remainder of the domain, <picture><source srcset="form_5061_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega_s = \Omega \backslash \Omega_f$" src="form_5061.png"/></picture> is occupied by a solid whose deformation field <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> satisfies the elasticity equation,  <p class="formulaDsp">
-<picture><source srcset="form_5062_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<li>The remainder of the domain, <picture><source srcset="form_5300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega_s = \Omega \backslash \Omega_f$" src="form_5300.png"/></picture> is occupied by a solid whose deformation field <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> satisfies the elasticity equation,  <p class="formulaDsp">
+<picture><source srcset="form_5301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     -\nabla \cdot C \varepsilon(\mathbf u) = 0 \qquad\qquad
     &amp; \text{in}\ \Omega_s,
-  \end{align*}" src="form_5062.png"/></picture>
+  \end{align*}" src="form_5301.png"/></picture>
 </p>
  where <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> is the rank-4 elasticity tensor (for which we will use a particularly simple form by assuming that the solid is isotropic). It deforms in reaction to the forces exerted by the fluid flowing along the boundary of the solid. We assume this deformation to be so small that it has no feedback effect on the fluid, i.e. the coupling is only in one direction. For simplicity, we will assume that the solid's external boundary is clamped, i.e.  <p class="formulaDsp">
-<picture><source srcset="form_5063_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     \mathbf u = \mathbf 0 \qquad\qquad
      \text{on}\ \Gamma_{s,1} = \partial\Omega \cap \partial\Omega_s
-  \end{align*}" src="form_5063.png"/></picture>
+  \end{align*}" src="form_5302.png"/></picture>
 </p>
 </li>
 <li>As a consequence of the small displacement assumption, we will pose the following boundary conditions on the interface between the fluid and solid: first, we have no slip boundary conditions for the fluid,  <p class="formulaDsp">
-<picture><source srcset="form_5064_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     \mathbf v = \mathbf 0 \qquad\qquad
      \text{on}\ \Gamma_{i} = \partial\Omega_s \cap \partial\Omega_f.
-  \end{align*}" src="form_5064.png"/></picture>
+  \end{align*}" src="form_5303.png"/></picture>
 </p>
  Secondly, the forces (traction) on the solid equal the normal stress from the fluid,  <p class="formulaDsp">
-<picture><source srcset="form_5065_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     (C \varepsilon(\mathbf u)) \mathbf n =
     (2 \eta \varepsilon(\mathbf v) - p \mathbf 1) \mathbf n \qquad\qquad
      \text{on}\ \Gamma_{i} = \partial\Omega_s \cap \partial\Omega_f,
-  \end{align*}" src="form_5065.png"/></picture>
+  \end{align*}" src="form_5304.png"/></picture>
 </p>
- where <picture><source srcset="form_2492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}$" src="form_2492.png"/></picture> is the normal vector on <picture><source srcset="form_5066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_{i}$" src="form_5066.png"/></picture> pointing from the solid to the fluid.</li>
+ where <picture><source srcset="form_2492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}$" src="form_2492.png"/></picture> is the normal vector on <picture><source srcset="form_5305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_{i}$" src="form_5305.png"/></picture> pointing from the solid to the fluid.</li>
 </ul>
-<p>We get a weak formulation of this problem by following our usual rule of multiplying from the left by a test function and integrating over the domain. It then looks like this: Find <picture><source srcset="form_5067_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = \{\mathbf v, p,
+<p>We get a weak formulation of this problem by following our usual rule of multiplying from the left by a test function and integrating over the domain. It then looks like this: Find <picture><source srcset="form_5306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = \{\mathbf v, p,
 \mathbf u\} \in Y \subset H^1(\Omega_f)^d \times L_2(\Omega_f) \times
-H^1(\Omega_s)^d$" src="form_5067.png"/></picture> such that  </p><p class="formulaDsp">
-<picture><source srcset="form_5068_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+H^1(\Omega_s)^d$" src="form_5306.png"/></picture> such that  </p><p class="formulaDsp">
+<picture><source srcset="form_5307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
         2 \eta (\varepsilon(\mathbf a), \varepsilon(\mathbf v))_{\Omega_f}
         - (\nabla \cdot \mathbf a, p)_{\Omega_f}
         - (q, \nabla \cdot \mathbf v)_{\Omega_f} &amp;
@@ -216,15 +216,15 @@
            (2 \eta \varepsilon(\mathbf v) - p \mathbf 1) \mathbf n)_{\Gamma_i}
         &amp;=
         0,
-\end{align*}" src="form_5068.png"/></picture>
+\end{align*}" src="form_5307.png"/></picture>
 </p>
-<p> for all test functions <picture><source srcset="form_5069_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf a, q, \mathbf b$" src="form_5069.png"/></picture>; the first, second, and third lines correspond to the fluid, solid, and interface contributions, respectively. Note that <picture><source srcset="form_506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Y$" src="form_506.png"/></picture> is only a subspace of the spaces listed above to accommodate for the various Dirichlet boundary conditions.</p>
+<p> for all test functions <picture><source srcset="form_5308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf a, q, \mathbf b$" src="form_5308.png"/></picture>; the first, second, and third lines correspond to the fluid, solid, and interface contributions, respectively. Note that <picture><source srcset="form_508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Y$" src="form_508.png"/></picture> is only a subspace of the spaces listed above to accommodate for the various Dirichlet boundary conditions.</p>
 <p>This sort of coupling is of course possible by simply having two <a class="el" href="classTriangulation.html">Triangulation</a> and two <a class="el" href="classDoFHandler.html">DoFHandler</a> objects, one each for each of the two subdomains. On the other hand, deal.II is much simpler to use if there is a single <a class="el" href="classDoFHandler.html">DoFHandler</a> object that knows about the discretization of the entire problem.</p>
 <p>This program is about how this can be achieved. Note that the goal is not to present a particularly useful physical model (a realistic fluid-structure interaction model would have to take into account the finite deformation of the solid and the effect this has on the fluid): this is, after all, just a tutorial program intended to demonstrate techniques, not to solve actual problems. Furthermore, we will make the assumption that the interface between the subdomains is aligned with coarse mesh cell faces.</p>
 <p><a class="anchor" id="Thegeneralidea"></a></p><h3>The general idea</h3>
 <p>Before going into more details let us state the obvious: this is a problem with multiple solution variables; for this, you will probably want to read the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> documentation module first, which presents the basic philosophical framework in which we address problems with more than one solution variable. But back to the problem at hand:</p>
-<p>The fundamental idea to implement these sort of problems in deal.II goes as follows: in the problem formulation, the velocity and pressure variables <picture><source srcset="form_5058_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v, p$" src="form_5058.png"/></picture> only live in the fluid subdomain <picture><source srcset="form_5056_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega_f$" src="form_5056.png"/></picture>. But let's assume that we extend them by zero to the entire domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> (in the general case this means that they will be discontinuous along <picture><source srcset="form_5070_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_i$" src="form_5070.png"/></picture>). So what is the appropriate function space for these variables? We know that on <picture><source srcset="form_5056_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega_f$" src="form_5056.png"/></picture> we should require <picture><source srcset="form_5071_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v \in H^1(\Omega_f)^d, p \in L_2(\Omega_f)$" src="form_5071.png"/></picture>, so for the extensions <picture><source srcset="form_5072_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\mathbf v}, \tilde p$" src="form_5072.png"/></picture> to the whole domain the following appears a useful set of function spaces:  </p><p class="formulaDsp">
-<picture><source srcset="form_5073_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>The fundamental idea to implement these sort of problems in deal.II goes as follows: in the problem formulation, the velocity and pressure variables <picture><source srcset="form_5297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v, p$" src="form_5297.png"/></picture> only live in the fluid subdomain <picture><source srcset="form_5295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega_f$" src="form_5295.png"/></picture>. But let's assume that we extend them by zero to the entire domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> (in the general case this means that they will be discontinuous along <picture><source srcset="form_5309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_i$" src="form_5309.png"/></picture>). So what is the appropriate function space for these variables? We know that on <picture><source srcset="form_5295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega_f$" src="form_5295.png"/></picture> we should require <picture><source srcset="form_5310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v \in H^1(\Omega_f)^d, p \in L_2(\Omega_f)$" src="form_5310.png"/></picture>, so for the extensions <picture><source srcset="form_5311_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\mathbf v}, \tilde p$" src="form_5311.png"/></picture> to the whole domain the following appears a useful set of function spaces:  </p><p class="formulaDsp">
+<picture><source srcset="form_5312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \tilde {\mathbf v} &amp;\in V
    = \{\tilde {\mathbf v}|_{\Omega_f} \in H^1(\Omega_f)^d, \quad
        \tilde {\mathbf v}|_{\Omega_s} = 0 \}
@@ -232,13 +232,13 @@
   \tilde p &amp;\in P
   = \{\tilde p|_{\Omega_f} \in L_2(\Omega_f), \quad
        \tilde p|_{\Omega_s} = 0 \}.
-\end{align*}" src="form_5073.png"/></picture>
+\end{align*}" src="form_5312.png"/></picture>
 </p>
-<p> (Since this is not important for the current discussion, we have omitted the question of boundary values from the choice of function spaces; this question also affects whether we can choose <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> for the pressure or whether we have to choose the space <picture><source srcset="form_5074_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_{2,0}(\Omega_f)=\{q\in L_2(\Omega_f): \int_{\Omega_f} q
-= 0\}$" src="form_5074.png"/></picture> for the pressure. None of these questions are relevant to the following discussion, however.)</p>
-<p>Note that these are indeed a linear function spaces with obvious norm. Since no confusion is possible in practice, we will henceforth omit the tilde again to denote the extension of a function to the whole domain and simply refer by <picture><source srcset="form_5058_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v, p$" src="form_5058.png"/></picture> to both the original and the extended function.</p>
-<p>For discretization, we need finite dimensional subspaces <picture><source srcset="form_5075_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h,P_h$" src="form_5075.png"/></picture> of <picture><source srcset="form_5076_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V, P$" src="form_5076.png"/></picture>. For Stokes, we know from <a class="el" href="step_22.html">step-22</a> that an appropriate choice is <picture><source srcset="form_5077_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_{p+1}^d\times Q_P$" src="form_5077.png"/></picture> but this only holds for that part of the domain occupied by the fluid. For the extended field, let's use the following subspaces defined on the triangulation <picture><source srcset="form_5078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb T$" src="form_5078.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_5079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> (Since this is not important for the current discussion, we have omitted the question of boundary values from the choice of function spaces; this question also affects whether we can choose <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> for the pressure or whether we have to choose the space <picture><source srcset="form_5313_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_{2,0}(\Omega_f)=\{q\in L_2(\Omega_f): \int_{\Omega_f} q
+= 0\}$" src="form_5313.png"/></picture> for the pressure. None of these questions are relevant to the following discussion, however.)</p>
+<p>Note that these are indeed a linear function spaces with obvious norm. Since no confusion is possible in practice, we will henceforth omit the tilde again to denote the extension of a function to the whole domain and simply refer by <picture><source srcset="form_5297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf v, p$" src="form_5297.png"/></picture> to both the original and the extended function.</p>
+<p>For discretization, we need finite dimensional subspaces <picture><source srcset="form_5314_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h,P_h$" src="form_5314.png"/></picture> of <picture><source srcset="form_5315_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V, P$" src="form_5315.png"/></picture>. For Stokes, we know from <a class="el" href="step_22.html">step-22</a> that an appropriate choice is <picture><source srcset="form_5316_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_{p+1}^d\times Q_P$" src="form_5316.png"/></picture> but this only holds for that part of the domain occupied by the fluid. For the extended field, let's use the following subspaces defined on the triangulation <picture><source srcset="form_5317_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb T$" src="form_5317.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_5318_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   V_h
    &amp;= \{{\mathbf v}_h \quad | \quad
        \forall K \in {\mathbb T}:
@@ -254,23 +254,23 @@
        p_h|_{\Omega_f}\ \text{is continuous}, \quad
        p_h|_K = 0\ \text{if}\ K\subset {\Omega_s}\ \}
    &amp;&amp; \subset P.
-\end{align*}" src="form_5079.png"/></picture>
+\end{align*}" src="form_5318.png"/></picture>
 </p>
-<p> In other words, on <picture><source srcset="form_5056_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega_f$" src="form_5056.png"/></picture> we choose the usual discrete spaces but we keep the (discontinuous) extension by zero. The point to make is that we now need a description of a finite element space for functions that are zero on a cell &mdash; and this is where the <a class="el" href="classFE__Nothing.html">FE_Nothing</a> class comes in: it describes a finite dimensional function space of functions that are constant zero. A particular property of this peculiar linear vector space is that it has no degrees of freedom: it isn't just finite dimensional, it is in fact zero dimensional, and consequently for objects of this type, <a class="el" href="classFiniteElementData.html#href_anchor">FiniteElement::n_dofs_per_cell()</a> will return zero. For discussion below, let us give this space a proper symbol:  </p><p class="formulaDsp">
-<picture><source srcset="form_5080_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> In other words, on <picture><source srcset="form_5295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega_f$" src="form_5295.png"/></picture> we choose the usual discrete spaces but we keep the (discontinuous) extension by zero. The point to make is that we now need a description of a finite element space for functions that are zero on a cell &mdash; and this is where the <a class="el" href="classFE__Nothing.html">FE_Nothing</a> class comes in: it describes a finite dimensional function space of functions that are constant zero. A particular property of this peculiar linear vector space is that it has no degrees of freedom: it isn't just finite dimensional, it is in fact zero dimensional, and consequently for objects of this type, <a class="el" href="classFiniteElementData.html#href_anchor">FiniteElement::n_dofs_per_cell()</a> will return zero. For discussion below, let us give this space a proper symbol:  </p><p class="formulaDsp">
+<picture><source srcset="form_5319_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   Z = \{ \varphi: \varphi(x)=0 \}.
-\]" src="form_5080.png"/></picture>
+\]" src="form_5319.png"/></picture>
 </p>
-<p> The symbol <picture><source srcset="form_504_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Z$" src="form_504.png"/></picture> reminds of the fact that functions in this space are zero. Obviously, we choose <picture><source srcset="form_5081_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Z_h=Z$" src="form_5081.png"/></picture>.</p>
+<p> The symbol <picture><source srcset="form_506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Z$" src="form_506.png"/></picture> reminds of the fact that functions in this space are zero. Obviously, we choose <picture><source srcset="form_5320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Z_h=Z$" src="form_5320.png"/></picture>.</p>
 <p>This entire discussion above can be repeated for the variables we use to describe the elasticity equation. Here, for the extended variables, we have  </p><p class="formulaDsp">
-<picture><source srcset="form_5082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \tilde {\mathbf u} &amp;\in U
    = \{\tilde {\mathbf u}|_{\Omega_s} \in H^1(\Omega_f)^d, \quad
        \tilde {\mathbf u}|_{\Omega_f} \in Z(\Omega_s)^d \},
-\end{align*}" src="form_5082.png"/></picture>
+\end{align*}" src="form_5321.png"/></picture>
 </p>
 <p> and we will typically use a finite element space of the kind  </p><p class="formulaDsp">
-<picture><source srcset="form_5083_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5322_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   U_h
    &amp;= \{{\mathbf u}_h \quad | \quad
        \forall K \in {\mathbb T}:
@@ -278,25 +278,25 @@
        {\mathbf u}_h|_{\Omega_f}\ \text{is continuous}, \quad
        {\mathbf u}_h|_K \in Z^d\ \text{if}\ K\subset {\Omega_f}\}
    &amp;&amp; \subset U
-\end{align*}" src="form_5083.png"/></picture>
+\end{align*}" src="form_5322.png"/></picture>
 </p>
-<p> of polynomial degree <picture><source srcset="form_414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_414.png"/></picture>.</p>
-<p>So to sum up, we are going to look for a discrete vector-valued solution <picture><source srcset="form_5084_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_h = \{\mathbf v_h, p_h, \mathbf u_h\}$" src="form_5084.png"/></picture> in the following space:  </p><p class="formulaDsp">
-<picture><source srcset="form_5085_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> of polynomial degree <picture><source srcset="form_378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r$" src="form_378.png"/></picture>.</p>
+<p>So to sum up, we are going to look for a discrete vector-valued solution <picture><source srcset="form_5323_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_h = \{\mathbf v_h, p_h, \mathbf u_h\}$" src="form_5323.png"/></picture> in the following space:  </p><p class="formulaDsp">
+<picture><source srcset="form_5324_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   Y_h = \{
       &amp; y_h = \{\mathbf v_h, p_h, \mathbf u_h\} : \\
       &amp; y_h|_{\Omega_f} \in Q_{p+1}^d \times Q_p \times Z^d, \\
       &amp; y_h|_{\Omega_s} \in Z^d \times Z \times Q_r^d \}.
-\end{align*}" src="form_5085.png"/></picture>
+\end{align*}" src="form_5324.png"/></picture>
 </p>
 <p><a class="anchor" id="Implementation"></a></p><h3>Implementation</h3>
-<p>So how do we implement this sort of thing? First, we realize that the discrete space <picture><source srcset="form_5086_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Y_h$" src="form_5086.png"/></picture> essentially calls for two different finite elements: First, on the fluid subdomain, we need the element <picture><source srcset="form_5087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_{p+1}^d \times Q_p \times Z^d$" src="form_5087.png"/></picture> which in deal.II is readily implemented by </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFESystem.html">FESystem&lt;dim&gt;</a> (<a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(p+1), dim,</div>
+<p>So how do we implement this sort of thing? First, we realize that the discrete space <picture><source srcset="form_5325_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Y_h$" src="form_5325.png"/></picture> essentially calls for two different finite elements: First, on the fluid subdomain, we need the element <picture><source srcset="form_5326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_{p+1}^d \times Q_p \times Z^d$" src="form_5326.png"/></picture> which in deal.II is readily implemented by </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFESystem.html">FESystem&lt;dim&gt;</a> (<a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(p+1), dim,</div>
 <div class="line">               <a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(p), 1,</div>
 <div class="line">               <a class="code hl_class" href="classFE__Nothing.html">FE_Nothing&lt;dim&gt;</a>(), dim),</div>
 <div class="ttc" id="aclassFESystem_html"><div class="ttname"><a href="classFESystem.html">FESystem</a></div><div class="ttdef"><b>Definition</b> <a href="fe__system_8h_source.html#href_anchor">fe_system.h:209</a></div></div>
 <div class="ttc" id="aclassFE__Nothing_html"><div class="ttname"><a href="classFE__Nothing.html">FE_Nothing</a></div><div class="ttdef"><b>Definition</b> <a href="fe__nothing_8h_source.html#href_anchor">fe_nothing.h:132</a></div></div>
 <div class="ttc" id="aclassFE__Q_html"><div class="ttname"><a href="classFE__Q.html">FE_Q</a></div><div class="ttdef"><b>Definition</b> <a href="fe__q_8h_source.html#href_anchor">fe_q.h:551</a></div></div>
-</div><!-- fragment --><p> where <code><a class="el" href="classFE__Nothing.html">FE_Nothing</a></code> implements the space of functions that are always zero. Second, on the solid subdomain, we need the element <picture><source srcset="form_5088_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\in Z^d \times Z \times Q_r^d$" src="form_5088.png"/></picture>, which we get using </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFESystem.html">FESystem&lt;dim&gt;</a> (<a class="code hl_class" href="classFE__Nothing.html">FE_Nothing&lt;dim&gt;</a>(), dim,</div>
+</div><!-- fragment --><p> where <code><a class="el" href="classFE__Nothing.html">FE_Nothing</a></code> implements the space of functions that are always zero. Second, on the solid subdomain, we need the element <picture><source srcset="form_5327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\in Z^d \times Z \times Q_r^d$" src="form_5327.png"/></picture>, which we get using </p><div class="fragment"><div class="line"><a class="code hl_class" href="classFESystem.html">FESystem&lt;dim&gt;</a> (<a class="code hl_class" href="classFE__Nothing.html">FE_Nothing&lt;dim&gt;</a>(), dim,</div>
 <div class="line">               <a class="code hl_class" href="classFE__Nothing.html">FE_Nothing&lt;dim&gt;</a>(), 1,</div>
 <div class="line">               <a class="code hl_class" href="classFE__Q.html">FE_Q&lt;dim&gt;</a>(r), dim),</div>
 </div><!-- fragment --><p>The next step is that we associate each of these two elements with the cells that occupy each of the two subdomains. For this we realize that in a sense the two elements are just variations of each other in that they have the same number of vector components but have different polynomial degrees &mdash; this smells very much like what one would do in <picture><source srcset="form_79_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$hp$" src="form_79.png"/></picture> finite element methods, and it is exactly what we are going to do here: we are going to (ab)use the classes and facilities of the hp-namespace to assign different elements to different cells. In other words, we will use collect the two finite elements in an <a class="el" href="classhp_1_1FECollection.html">hp::FECollection</a>, will integrate with an appropriate <a class="el" href="classhp_1_1QCollection.html">hp::QCollection</a> using an <a class="el" href="classhp_1_1FEValues.html">hp::FEValues</a> object, and our <a class="el" href="classDoFHandler.html">DoFHandler</a> will be in <em>hp</em>-mode. You may wish to take a look at <a class="el" href="step_27.html">step-27</a> for an overview of all of these concepts.</p>
@@ -309,11 +309,11 @@
 <p><a class="anchor" id="Specificsoftheimplementation"></a></p><h3>Specifics of the implementation </h3>
 <p>More specifically, in the program we have to address the following points:</p><ul>
 <li>Implementing the bilinear form, and in particular dealing with the interface term, both in the matrix and the sparsity pattern.</li>
-<li>Implementing Dirichlet boundary conditions on the external and internal parts of the boundaries <picture><source srcset="form_5089_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega_f,\partial\Omega_s$" src="form_5089.png"/></picture>.</li>
+<li>Implementing Dirichlet boundary conditions on the external and internal parts of the boundaries <picture><source srcset="form_5328_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega_f,\partial\Omega_s$" src="form_5328.png"/></picture>.</li>
 </ul>
 <p><a class="anchor" id="Dealingwiththeinterfaceterms"></a></p><h4>Dealing with the interface terms</h4>
 <p>Let us first discuss implementing the bilinear form, which at the discrete level we recall to be  </p><p class="formulaDsp">
-<picture><source srcset="form_5090_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5329_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
/usr/share/doc/packages/dealii/doxygen/deal.II/step_47.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_47.html	2024-03-17 21:57:46.947255940 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_47.html	2024-03-17 21:57:46.947255940 +0000
@@ -139,70 +139,70 @@
 <p><em>The first author would like to acknowledge the support of NSF Grant No. DMS-1520862. Timo Heister and Wolfgang Bangerth acknowledge support through NSF awards DMS-1821210, EAR-1550901, and OAC-1835673. </em></p>
 <p><a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p>This program deals with the <a href="https://en.wikipedia.org/wiki/Biharmonic_equation">biharmonic equation</a>,  </p><p class="formulaDsp">
-<picture><source srcset="form_5123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5362_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \Delta^2 u(\mathbf x) &amp;= f(\mathbf x)
   \qquad \qquad &amp;&amp;\forall \mathbf x \in \Omega.
-\end{align*}" src="form_5123.png"/></picture>
+\end{align*}" src="form_5362.png"/></picture>
 </p>
 <p> This equation appears in the modeling of thin structures such as roofs of stadiums. These objects are of course in reality three-dimensional with a large aspect ratio of lateral extent to perpendicular thickness, but one can often very accurately model these structures as two dimensional by making assumptions about how internal forces vary in the perpendicular direction. These assumptions lead to the equation above.</p>
 <p>The model typically comes in two different kinds, depending on what kinds of boundary conditions are imposed. The first case,  </p><p class="formulaDsp">
-<picture><source srcset="form_5124_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5363_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   u(\mathbf x) &amp;= g(\mathbf x) \qquad \qquad
   &amp;&amp;\forall \mathbf x \in \partial\Omega, \\
   \Delta u(\mathbf x) &amp;= h(\mathbf x) \qquad \qquad
   &amp;&amp;\forall \mathbf x \in \partial\Omega,
-\end{align*}" src="form_5124.png"/></picture>
+\end{align*}" src="form_5363.png"/></picture>
 </p>
-<p> corresponds to the edges of the thin structure attached to the top of a wall of height <picture><source srcset="form_24_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(\mathbf x)$" src="form_24.png"/></picture> in such a way that the bending forces that act on the structure are <picture><source srcset="form_5125_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h(\mathbf x)$" src="form_5125.png"/></picture>; in most physical situations, one will have <picture><source srcset="form_5126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h=0$" src="form_5126.png"/></picture>, corresponding to the structure simply sitting atop the wall.</p>
+<p> corresponds to the edges of the thin structure attached to the top of a wall of height <picture><source srcset="form_39_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g(\mathbf x)$" src="form_39.png"/></picture> in such a way that the bending forces that act on the structure are <picture><source srcset="form_5364_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h(\mathbf x)$" src="form_5364.png"/></picture>; in most physical situations, one will have <picture><source srcset="form_5365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h=0$" src="form_5365.png"/></picture>, corresponding to the structure simply sitting atop the wall.</p>
 <p>In the second possible case of boundary values, one would have  </p><p class="formulaDsp">
-<picture><source srcset="form_5127_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5366_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   u(\mathbf x) &amp;= g(\mathbf x) \qquad \qquad
   &amp;&amp;\forall \mathbf x \in \partial\Omega, \\
   \frac{\partial u(\mathbf x)}{\partial \mathbf n} &amp;= j(\mathbf x) \qquad \qquad
   &amp;&amp;\forall \mathbf x \in \partial\Omega.
-\end{align*}" src="form_5127.png"/></picture>
+\end{align*}" src="form_5366.png"/></picture>
 </p>
-<p> This corresponds to a "clamped" structure for which a nonzero <picture><source srcset="form_5128_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j(\mathbf x)$" src="form_5128.png"/></picture> implies a certain angle against the horizontal.</p>
+<p> This corresponds to a "clamped" structure for which a nonzero <picture><source srcset="form_5367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j(\mathbf x)$" src="form_5367.png"/></picture> implies a certain angle against the horizontal.</p>
 <p>As with Dirichlet and Neumann boundary conditions for the Laplace equation, it is of course possible to have one kind of boundary conditions on one part of the boundary, and the other on the remainder.</p>
 <p><a class="anchor" id="Whatstheissue"></a></p><h3>What's the issue? </h3>
 <p>The fundamental issue with the equation is that it takes four derivatives of the solution. In the case of the Laplace equation we treated in <a class="el" href="step_3.html">step-3</a>, <a class="el" href="step_4.html">step-4</a>, and several other tutorial programs, one multiplies by a test function, integrates, integrates by parts, and ends up with only one derivative on both the test function and trial function &ndash; something one can do with functions that are continuous globally, but may have kinks at the interfaces between cells: The derivative may not be defined at the interfaces, but that is on a lower-dimensional manifold (and so doesn't show up in the integrated value).</p>
-<p>But for the biharmonic equation, if one followed the same procedure using integrals over the entire domain (i.e., the union of all cells), one would end up with two derivatives on the test functions and trial functions each. If one were to use the usual piecewise polynomial functions with their kinks on cell interfaces, the first derivative would yield a discontinuous gradient, and the second derivative with delta functions on the interfaces &ndash; but because both the second derivatives of the test functions and of the trial functions yield a delta function, we would try to integrate the product of two delta functions. For example, in 1d, where <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> are the usual piecewise linear "hat functions", we would get integrals of the sort  </p><p class="formulaDsp">
-<picture><source srcset="form_5129_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>But for the biharmonic equation, if one followed the same procedure using integrals over the entire domain (i.e., the union of all cells), one would end up with two derivatives on the test functions and trial functions each. If one were to use the usual piecewise polynomial functions with their kinks on cell interfaces, the first derivative would yield a discontinuous gradient, and the second derivative with delta functions on the interfaces &ndash; but because both the second derivatives of the test functions and of the trial functions yield a delta function, we would try to integrate the product of two delta functions. For example, in 1d, where <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> are the usual piecewise linear "hat functions", we would get integrals of the sort  </p><p class="formulaDsp">
+<picture><source srcset="form_5368_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \int_0^L (\Delta \varphi_i) (\Delta \varphi_j)
   =
   \int_0^L
   \frac 1h \left[\delta(x-x_{i-1}) - 2\delta(x-x_i) + \delta(x-x_{i+1})\right]
   \frac 1h \left[\delta(x-x_{j-1}) - 2\delta(x-x_j) + \delta(x-x_{j+1})\right]
-\end{align*}" src="form_5129.png"/></picture>
+\end{align*}" src="form_5368.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture> is the node location at which the shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> is defined, and <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> is the mesh size (assumed uniform). The problem is that delta functions in integrals are defined using the relationship  </p><p class="formulaDsp">
-<picture><source srcset="form_5130_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> where <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture> is the node location at which the shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> is defined, and <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> is the mesh size (assumed uniform). The problem is that delta functions in integrals are defined using the relationship  </p><p class="formulaDsp">
+<picture><source srcset="form_5369_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \int_0^L \delta(x-\hat x) f(x) \; dx
   =
   f(\hat x).
-\end{align*}" src="form_5130.png"/></picture>
+\end{align*}" src="form_5369.png"/></picture>
 </p>
-<p> But that only works if (i) <picture><source srcset="form_5131_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\cdot)$" src="form_5131.png"/></picture> is actually well defined at <picture><source srcset="form_5132_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat x$" src="form_5132.png"/></picture>, and (ii) if it is finite. On the other hand, an integral of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_5133_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> But that only works if (i) <picture><source srcset="form_5370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(\cdot)$" src="form_5370.png"/></picture> is actually well defined at <picture><source srcset="form_5371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat x$" src="form_5371.png"/></picture>, and (ii) if it is finite. On the other hand, an integral of the form  </p><p class="formulaDsp">
+<picture><source srcset="form_5372_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 \int_0^L \delta(x-x_i) \delta (x-x_i)
-\end{align*}" src="form_5133.png"/></picture>
+\end{align*}" src="form_5372.png"/></picture>
 </p>
 <p> does not make sense. Similar reasoning can be applied for 2d and 3d situations.</p>
 <p>In other words: This approach of trying to integrate over the entire domain and then integrating by parts can't work.</p>
 <p>Historically, numerical analysts have tried to address this by inventing finite elements that are "C&lt;sup&gt;1&lt;/sup&gt; continuous", i.e., that use shape functions that are not just continuous but also have continuous first derivatives. This is the realm of elements such as the Argyris element, the Clough-Tocher element and others, all developed in the late 1960s. From a twenty-first century perspective, they can only be described as bizarre in their construction. They are also exceedingly cumbersome to implement if one wants to use general meshes. As a consequence, they have largely fallen out of favor and deal.II currently does not contain implementations of these shape functions.</p>
 <p><a class="anchor" id="Whattodoinstead"></a></p><h3>What to do instead? </h3>
 <p>So how does one approach solving such problems then? That depends a bit on the boundary conditions. If one has the first set of boundary conditions, i.e., if the equation is  </p><p class="formulaDsp">
-<picture><source srcset="form_5134_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5373_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \Delta^2 u(\mathbf x) &amp;= f(\mathbf x)
   \qquad \qquad &amp;&amp;\forall \mathbf x \in \Omega, \\
   u(\mathbf x) &amp;= g(\mathbf x) \qquad \qquad
   &amp;&amp;\forall \mathbf x \in \partial\Omega, \\
   \Delta u(\mathbf x) &amp;= h(\mathbf x) \qquad \qquad
   &amp;&amp;\forall \mathbf x \in \partial\Omega,
-\end{align*}" src="form_5134.png"/></picture>
+\end{align*}" src="form_5373.png"/></picture>
 </p>
-<p> then the following trick works (at least if the domain is convex, see below): In the same way as we obtained the mixed Laplace equation of <a class="el" href="step_20.html">step-20</a> from the regular Laplace equation by introducing a second variable, we can here introduce a variable <picture><source srcset="form_5135_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v=\Delta u$" src="form_5135.png"/></picture> and can then replace the equations above by the following, "mixed" system:  </p><p class="formulaDsp">
-<picture><source srcset="form_5136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> then the following trick works (at least if the domain is convex, see below): In the same way as we obtained the mixed Laplace equation of <a class="el" href="step_20.html">step-20</a> from the regular Laplace equation by introducing a second variable, we can here introduce a variable <picture><source srcset="form_5374_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v=\Delta u$" src="form_5374.png"/></picture> and can then replace the equations above by the following, "mixed" system:  </p><p class="formulaDsp">
+<picture><source srcset="form_5375_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   -\Delta u(\mathbf x) +v(\mathbf x) &amp;= 0
   \qquad \qquad &amp;&amp;\forall \mathbf x \in \Omega, \\
   -\Delta v(\mathbf x) &amp;= -f(\mathbf x)
@@ -211,28 +211,28 @@
   &amp;&amp;\forall \mathbf x \in \partial\Omega, \\
   v(\mathbf x) &amp;= h(\mathbf x) \qquad \qquad
   &amp;&amp;\forall \mathbf x \in \partial\Omega.
-\end{align*}" src="form_5136.png"/></picture>
+\end{align*}" src="form_5375.png"/></picture>
 </p>
-<p> In other words, we end up with what is in essence a system of two coupled Laplace equations for <picture><source srcset="form_5137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u,v$" src="form_5137.png"/></picture>, each with Dirichlet-type boundary conditions. We know how to solve such problems, and it should not be very difficult to construct good solvers and preconditioners for this system either using the techniques of <a class="el" href="step_20.html">step-20</a> or <a class="el" href="step_22.html">step-22</a>. So this case is pretty simple to deal with.</p>
-<dl class="section note"><dt>Note</dt><dd>It is worth pointing out that this only works for domains whose boundary has corners if the domain is also convex &ndash; in other words, if there are no re-entrant corners. This sounds like a rather random condition, but it makes sense in view of the following two facts: The solution of the original biharmonic equation must satisfy <picture><source srcset="form_4745_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in H^2(\Omega)$" src="form_4745.png"/></picture>. On the other hand, the mixed system reformulation above suggests that both <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> and <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> satisfy <picture><source srcset="form_5138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u,v\in H^1(\Omega)$" src="form_5138.png"/></picture> because both variables only solve a Poisson equation. In other words, if we want to ensure that the solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> of the mixed problem is also a solution of the original biharmonic equation, then we need to be able to somehow guarantee that the solution of <picture><source srcset="form_5139_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u=v$" src="form_5139.png"/></picture> is in fact more smooth than just <picture><source srcset="form_3502_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Omega)$" src="form_3502.png"/></picture>. This can be argued as follows: For convex domains, <a href="https://en.wikipedia.org/wiki/Elliptic_operator#href_anchor">"elliptic
-  regularity"</a> implies that if the right hand side <picture><source srcset="form_5140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v\in H^s$" src="form_5140.png"/></picture>, then <picture><source srcset="form_5141_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in H^{s+2}$" src="form_5141.png"/></picture> if the domain is convex and the boundary is smooth enough. (This could also be guaranteed if the domain boundary is sufficiently smooth &ndash; but domains whose boundaries have no corners are not very practical in real life.) We know that <picture><source srcset="form_5142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v\in H^1$" src="form_5142.png"/></picture> because it solves the equation <picture><source srcset="form_5143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta v=f$" src="form_5143.png"/></picture>, but we are still left with the condition on convexity of the boundary; one can show that polygonal, convex domains are good enough to guarantee that <picture><source srcset="form_5144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in H^2$" src="form_5144.png"/></picture> in this case (smoothly bounded, convex domains would result in <picture><source srcset="form_5145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in H^3$" src="form_5145.png"/></picture>, but we don't need this much regularity). On the other hand, if the domain is not convex, we can not guarantee that the solution of the mixed system is in <picture><source srcset="form_2778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^2$" src="form_2778.png"/></picture>, and consequently may obtain a solution that can't be equal to the solution of the original biharmonic equation.</dd></dl>
+<p> In other words, we end up with what is in essence a system of two coupled Laplace equations for <picture><source srcset="form_5376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u,v$" src="form_5376.png"/></picture>, each with Dirichlet-type boundary conditions. We know how to solve such problems, and it should not be very difficult to construct good solvers and preconditioners for this system either using the techniques of <a class="el" href="step_20.html">step-20</a> or <a class="el" href="step_22.html">step-22</a>. So this case is pretty simple to deal with.</p>
+<dl class="section note"><dt>Note</dt><dd>It is worth pointing out that this only works for domains whose boundary has corners if the domain is also convex &ndash; in other words, if there are no re-entrant corners. This sounds like a rather random condition, but it makes sense in view of the following two facts: The solution of the original biharmonic equation must satisfy <picture><source srcset="form_4745_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in H^2(\Omega)$" src="form_4745.png"/></picture>. On the other hand, the mixed system reformulation above suggests that both <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> and <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> satisfy <picture><source srcset="form_5377_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u,v\in H^1(\Omega)$" src="form_5377.png"/></picture> because both variables only solve a Poisson equation. In other words, if we want to ensure that the solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> of the mixed problem is also a solution of the original biharmonic equation, then we need to be able to somehow guarantee that the solution of <picture><source srcset="form_5378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u=v$" src="form_5378.png"/></picture> is in fact more smooth than just <picture><source srcset="form_3510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Omega)$" src="form_3510.png"/></picture>. This can be argued as follows: For convex domains, <a href="https://en.wikipedia.org/wiki/Elliptic_operator#href_anchor">"elliptic
+  regularity"</a> implies that if the right hand side <picture><source srcset="form_5379_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v\in H^s$" src="form_5379.png"/></picture>, then <picture><source srcset="form_5380_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in H^{s+2}$" src="form_5380.png"/></picture> if the domain is convex and the boundary is smooth enough. (This could also be guaranteed if the domain boundary is sufficiently smooth &ndash; but domains whose boundaries have no corners are not very practical in real life.) We know that <picture><source srcset="form_5381_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v\in H^1$" src="form_5381.png"/></picture> because it solves the equation <picture><source srcset="form_5382_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta v=f$" src="form_5382.png"/></picture>, but we are still left with the condition on convexity of the boundary; one can show that polygonal, convex domains are good enough to guarantee that <picture><source srcset="form_5383_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in H^2$" src="form_5383.png"/></picture> in this case (smoothly bounded, convex domains would result in <picture><source srcset="form_5384_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in H^3$" src="form_5384.png"/></picture>, but we don't need this much regularity). On the other hand, if the domain is not convex, we can not guarantee that the solution of the mixed system is in <picture><source srcset="form_2802_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^2$" src="form_2802.png"/></picture>, and consequently may obtain a solution that can't be equal to the solution of the original biharmonic equation.</dd></dl>
 <p>The more complicated situation is if we have the "clamped" boundary conditions, i.e., if the equation looks like this:  </p><p class="formulaDsp">
-<picture><source srcset="form_5146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \Delta^2 u(\mathbf x) &amp;= f(\mathbf x)
   \qquad \qquad &amp;&amp;\forall \mathbf x \in \Omega, \\
   u(\mathbf x) &amp;= g(\mathbf x) \qquad \qquad
   &amp;&amp;\forall \mathbf x \in \partial\Omega, \\
   \frac{\partial u(\mathbf x)}{\partial \mathbf n} &amp;= j(\mathbf x) \qquad \qquad
   &amp;&amp;\forall \mathbf x \in \partial\Omega.
-\end{align*}" src="form_5146.png"/></picture>
+\end{align*}" src="form_5385.png"/></picture>
 </p>
-<p> The same trick with the mixed system does not work here, because we would end up with <em>both</em> Dirichlet and Neumann boundary conditions for <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture>, but none for <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture>.</p>
-<p>The solution to this conundrum arrived with the Discontinuous Galerkin method wave in the 1990s and early 2000s: In much the same way as one can use <em>discontinuous</em> shape functions for the Laplace equation by penalizing the size of the discontinuity to obtain a scheme for an equation that has one derivative on each shape function, we can use a scheme that uses <em>continuous</em> (but not <picture><source srcset="form_478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^1$" src="form_478.png"/></picture> continuous) shape functions and penalize the jump in the derivative to obtain a scheme for an equation that has two derivatives on each shape function. In analogy to the Interior Penalty (IP) method for the Laplace equation, this scheme for the biharmonic equation is typically called the <picture><source srcset="form_1094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1094.png"/></picture> IP (or C0IP) method, since it uses <picture><source srcset="form_1094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1094.png"/></picture> (continuous but not continuously differentiable) shape functions with an interior penalty formulation.</p>
+<p> The same trick with the mixed system does not work here, because we would end up with <em>both</em> Dirichlet and Neumann boundary conditions for <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture>, but none for <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture>.</p>
+<p>The solution to this conundrum arrived with the Discontinuous Galerkin method wave in the 1990s and early 2000s: In much the same way as one can use <em>discontinuous</em> shape functions for the Laplace equation by penalizing the size of the discontinuity to obtain a scheme for an equation that has one derivative on each shape function, we can use a scheme that uses <em>continuous</em> (but not <picture><source srcset="form_478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^1$" src="form_478.png"/></picture> continuous) shape functions and penalize the jump in the derivative to obtain a scheme for an equation that has two derivatives on each shape function. In analogy to the Interior Penalty (IP) method for the Laplace equation, this scheme for the biharmonic equation is typically called the <picture><source srcset="form_1087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1087.png"/></picture> IP (or C0IP) method, since it uses <picture><source srcset="form_1087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1087.png"/></picture> (continuous but not continuously differentiable) shape functions with an interior penalty formulation.</p>
 <p>It is worth noting that the C0IP method is not the only one that has been developed for the biharmonic equation. <a class="el" href="step_82.html">step-82</a> shows an alternative method.</p>
 <p><a class="anchor" id="DerivationoftheC0IPmethod"></a></p><h3>Derivation of the C0IP method </h3>
-<p>We base this program on the <picture><source srcset="form_1094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1094.png"/></picture> IP method presented by Susanne Brenner and Li-Yeng Sung in the paper "C \_form#href_anchor" <b>[Brenner2005]</b> where the method is derived for the biharmonic equation with "clamped" boundary conditions.</p>
-<p>As mentioned, this method relies on the use of <picture><source srcset="form_1094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1094.png"/></picture> Lagrange finite elements where the <picture><source srcset="form_478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^1$" src="form_478.png"/></picture> continuity requirement is relaxed and has been replaced with interior penalty techniques. To derive this method, we consider a <picture><source srcset="form_1094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1094.png"/></picture> shape function <picture><source srcset="form_2788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2788.png"/></picture> which vanishes on <picture><source srcset="form_3116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3116.png"/></picture>. We introduce notation <picture><source srcset="form_5148_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbb{F} $" src="form_5148.png"/></picture> as the set of all faces of <picture><source srcset="form_5149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{T}$" src="form_5149.png"/></picture>, <picture><source srcset="form_5150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbb{F}^b $" src="form_5150.png"/></picture> as the set of boundary faces, and <picture><source srcset="form_5151_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbb{F}^i $" src="form_5151.png"/></picture> as the set of interior faces for use further down below. Since the higher order derivatives of <picture><source srcset="form_2788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2788.png"/></picture> have two values on each interface <picture><source srcset="form_5152_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e\in \mathbb{F}$" src="form_5152.png"/></picture> (shared by the two cells <picture><source srcset="form_5153_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{+},K_{-} \in \mathbb{T}$" src="form_5153.png"/></picture>), we cope with this discontinuity by defining the following single-valued functions on <picture><source srcset="form_2237_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e$" src="form_2237.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_5154_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>We base this program on the <picture><source srcset="form_1087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1087.png"/></picture> IP method presented by Susanne Brenner and Li-Yeng Sung in the paper "C \_form#href_anchor" <b>[Brenner2005]</b> where the method is derived for the biharmonic equation with "clamped" boundary conditions.</p>
+<p>As mentioned, this method relies on the use of <picture><source srcset="form_1087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1087.png"/></picture> Lagrange finite elements where the <picture><source srcset="form_478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^1$" src="form_478.png"/></picture> continuity requirement is relaxed and has been replaced with interior penalty techniques. To derive this method, we consider a <picture><source srcset="form_1087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1087.png"/></picture> shape function <picture><source srcset="form_2781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2781.png"/></picture> which vanishes on <picture><source srcset="form_3192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3192.png"/></picture>. We introduce notation <picture><source srcset="form_5387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbb{F} $" src="form_5387.png"/></picture> as the set of all faces of <picture><source srcset="form_5388_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{T}$" src="form_5388.png"/></picture>, <picture><source srcset="form_5389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbb{F}^b $" src="form_5389.png"/></picture> as the set of boundary faces, and <picture><source srcset="form_5390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbb{F}^i $" src="form_5390.png"/></picture> as the set of interior faces for use further down below. Since the higher order derivatives of <picture><source srcset="form_2781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2781.png"/></picture> have two values on each interface <picture><source srcset="form_5391_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e\in \mathbb{F}$" src="form_5391.png"/></picture> (shared by the two cells <picture><source srcset="form_5392_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{+},K_{-} \in \mathbb{T}$" src="form_5392.png"/></picture>), we cope with this discontinuity by defining the following single-valued functions on <picture><source srcset="form_2286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e$" src="form_2286.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_5393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \jump{\frac{\partial^k v_h}{\partial \mathbf n^k}}
   &amp;=
   \frac{\partial^k v_h|_{K_+}}{\partial \mathbf n^k} \bigg |_e
@@ -243,29 +243,29 @@
   \frac{1}{2}
   \bigg( \frac{\partial^k v_h|_{K_+}}{\partial \mathbf n^k} \bigg |_e
   + \frac{\partial^k v_h|_{K_-}}{\partial \mathbf n^k} \bigg |_e \bigg )
-\end{align*}" src="form_5154.png"/></picture>
+\end{align*}" src="form_5393.png"/></picture>
 </p>
-<p> for <picture><source srcset="form_5155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k =1,2$" src="form_5155.png"/></picture> (i.e., for the gradient and the matrix of second derivatives), and where <picture><source srcset="form_2957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n$" src="form_2957.png"/></picture> denotes a unit vector normal to <picture><source srcset="form_2237_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e$" src="form_2237.png"/></picture> pointing from <picture><source srcset="form_5156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_+$" src="form_5156.png"/></picture> to <picture><source srcset="form_5157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_-$" src="form_5157.png"/></picture>. In the literature, these functions are referred to as the "jump" and "average" operations, respectively.</p>
-<p>To obtain the <picture><source srcset="form_1094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1094.png"/></picture> IP approximation <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture>, we left multiply the biharmonic equation by <picture><source srcset="form_2788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2788.png"/></picture>, and then integrate over <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>. As explained above, we can't do the integration by parts on all of <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> with these shape functions, but we can do it on each cell individually since the shape functions are just polynomials on each cell. Consequently, we start by using the following integration-by-parts formula on each mesh cell <picture><source srcset="form_5158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K \in {\mathbb{T}}$" src="form_5158.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_5159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> for <picture><source srcset="form_5394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k =1,2$" src="form_5394.png"/></picture> (i.e., for the gradient and the matrix of second derivatives), and where <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n$" src="form_3020.png"/></picture> denotes a unit vector normal to <picture><source srcset="form_2286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e$" src="form_2286.png"/></picture> pointing from <picture><source srcset="form_5395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_+$" src="form_5395.png"/></picture> to <picture><source srcset="form_5396_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_-$" src="form_5396.png"/></picture>. In the literature, these functions are referred to as the "jump" and "average" operations, respectively.</p>
+<p>To obtain the <picture><source srcset="form_1087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1087.png"/></picture> IP approximation <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture>, we left multiply the biharmonic equation by <picture><source srcset="form_2781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2781.png"/></picture>, and then integrate over <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>. As explained above, we can't do the integration by parts on all of <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> with these shape functions, but we can do it on each cell individually since the shape functions are just polynomials on each cell. Consequently, we start by using the following integration-by-parts formula on each mesh cell <picture><source srcset="form_5397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K \in {\mathbb{T}}$" src="form_5397.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_5398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \int_K v_h (\Delta^2 w_h)
   &amp;= \int_K v_h (\nabla\cdot\nabla) (\Delta w_h)
   \\
   &amp;= -\int_K \nabla v_h \cdot (\nabla \Delta w_h)
      +\int_{\partial K} v_h (\nabla \Delta w_h \cdot \mathbf n).
-\end{align*}" src="form_5159.png"/></picture>
+\end{align*}" src="form_5398.png"/></picture>
 </p>
-<p> At this point, we have two options: We can integrate the domain term's <picture><source srcset="form_5160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\Delta w_h$" src="form_5160.png"/></picture> one more time to obtain  </p><p class="formulaDsp">
-<picture><source srcset="form_5161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> At this point, we have two options: We can integrate the domain term's <picture><source srcset="form_5399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\Delta w_h$" src="form_5399.png"/></picture> one more time to obtain  </p><p class="formulaDsp">
+<picture><source srcset="form_5400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \int_K v_h (\Delta^2 w_h)
   &amp;= \int_K (\Delta v_h) (\Delta w_h)
      +\int_{\partial K} v_h (\nabla \Delta w_h \cdot \mathbf n)
      -\int_{\partial K} (\nabla v_h \cdot \mathbf n) \Delta w_h.
-\end{align*}" src="form_5161.png"/></picture>
+\end{align*}" src="form_5400.png"/></picture>
 </p>
 <p> For a variety of reasons, this turns out to be a variation that is not useful for our purposes.</p>
-<p>Instead, what we do is recognize that <picture><source srcset="form_5162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\Delta w_h = \text{grad}\,(\text{div}\,\text{grad}\, w_h)$" src="form_5162.png"/></picture>, and we can re-sort these operations as <picture><source srcset="form_5163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\Delta w_h = \text{div}\,(\text{grad}\,\text{grad}\, w_h)$" src="form_5163.png"/></picture> where we typically write <picture><source srcset="form_5164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{grad}\,\text{grad}\, w_h = D^2 w_h$" src="form_5164.png"/></picture> to indicate that this is the "Hessian" matrix of second derivatives. With this re-ordering, we can now integrate the divergence, rather than the gradient operator, and we get the following instead:  </p><p class="formulaDsp">
-<picture><source srcset="form_5165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>Instead, what we do is recognize that <picture><source srcset="form_5401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\Delta w_h = \text{grad}\,(\text{div}\,\text{grad}\, w_h)$" src="form_5401.png"/></picture>, and we can re-sort these operations as <picture><source srcset="form_5402_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\Delta w_h = \text{div}\,(\text{grad}\,\text{grad}\, w_h)$" src="form_5402.png"/></picture> where we typically write <picture><source srcset="form_5403_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{grad}\,\text{grad}\, w_h = D^2 w_h$" src="form_5403.png"/></picture> to indicate that this is the "Hessian" matrix of second derivatives. With this re-ordering, we can now integrate the divergence, rather than the gradient operator, and we get the following instead:  </p><p class="formulaDsp">
+<picture><source srcset="form_5404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \int_K v_h (\Delta^2 w_h)
   &amp;= \int_K (\nabla \nabla v_h) : (\nabla \nabla w_h)
      +\int_{\partial K} v_h (\nabla \Delta w_h \cdot \mathbf n)
@@ -274,11 +274,11 @@
   &amp;= \int_K (D^2 v_h) : (D^2 w_h)
      +\int_{\partial K} v_h (\nabla \Delta w_h \cdot \mathbf n)
      -\int_{\partial K} (\nabla v_h) \cdot (D^2 w_h \mathbf n).
-\end{align*}" src="form_5165.png"/></picture>
+\end{align*}" src="form_5404.png"/></picture>
 </p>
-<p> Here, the colon indicates a double-contraction over the indices of the matrices to its left and right, i.e., the scalar product between two tensors. The outer product of two vectors <picture><source srcset="form_5166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a \otimes b$" src="form_5166.png"/></picture> yields the matrix <picture><source srcset="form_5167_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(a \otimes b)_{ij} = a_i b_j$" src="form_5167.png"/></picture>.</p>
-<p>Then, we sum over all cells <picture><source srcset="form_5168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K \in  \mathbb{T}$" src="form_5168.png"/></picture>, and take into account that this means that every interior face appears twice in the sum. If we therefore split everything into a sum of integrals over cell interiors and a separate sum over cell interfaces, we can use the jump and average operators defined above. There are two steps left: First, because our shape functions are continuous, the gradients of the shape functions may be discontinuous, but the continuity guarantees that really only the normal component of the gradient is discontinuous across faces whereas the tangential component(s) are continuous. Second, the discrete formulation that results is not stable as the mesh size goes to zero, and to obtain a stable formulation that converges to the correct solution, we need to add the following terms:  </p><p class="formulaDsp">
-<picture><source srcset="form_5169_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> Here, the colon indicates a double-contraction over the indices of the matrices to its left and right, i.e., the scalar product between two tensors. The outer product of two vectors <picture><source srcset="form_5405_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a \otimes b$" src="form_5405.png"/></picture> yields the matrix <picture><source srcset="form_5406_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(a \otimes b)_{ij} = a_i b_j$" src="form_5406.png"/></picture>.</p>
+<p>Then, we sum over all cells <picture><source srcset="form_5407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K \in  \mathbb{T}$" src="form_5407.png"/></picture>, and take into account that this means that every interior face appears twice in the sum. If we therefore split everything into a sum of integrals over cell interiors and a separate sum over cell interfaces, we can use the jump and average operators defined above. There are two steps left: First, because our shape functions are continuous, the gradients of the shape functions may be discontinuous, but the continuity guarantees that really only the normal component of the gradient is discontinuous across faces whereas the tangential component(s) are continuous. Second, the discrete formulation that results is not stable as the mesh size goes to zero, and to obtain a stable formulation that converges to the correct solution, we need to add the following terms:  </p><p class="formulaDsp">
+<picture><source srcset="form_5408_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 -\sum_{e \in \mathbb{F}} \int_{e}
   \average{\frac{\partial^2 v_h}{\partial \mathbf n^2}}
   \jump{\frac{\partial u_h}{\partial \mathbf n}}
@@ -286,16 +286,16 @@
   \frac{\gamma}{h_e}\int_e
   \jump{\frac{\partial v_h}{\partial \mathbf n}}
   \jump{\frac{\partial u_h}{\partial \mathbf n}}.
-\end{align*}" src="form_5169.png"/></picture>
+\end{align*}" src="form_5408.png"/></picture>
 </p>
-<p> Then, after making cancellations that arise, we arrive at the following C0IP formulation of the biharmonic equation: find <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> such that <picture><source srcset="form_5170_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h =
-g$" src="form_5170.png"/></picture> on <picture><source srcset="form_2866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega$" src="form_2866.png"/></picture> and  </p><p class="formulaDsp">
-<picture><source srcset="form_5171_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
/usr/share/doc/packages/dealii/doxygen/deal.II/step_48.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_48.html	2024-03-17 21:57:47.011256335 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_48.html	2024-03-17 21:57:47.019256385 +0000
@@ -134,24 +134,24 @@
 <p><em> This program was contributed by Katharina Kormann and Martin Kronbichler.</em></p>
 <p><em>The algorithm for the matrix-vector product is based on the article <a href="http://dx.doi.org/10.1016/j.compfluid.2012.04.012">A generic interface for parallel cell-based finite element operator application</a> by Martin Kronbichler and Katharina Kormann, Computers and Fluids 63:135&ndash;147, 2012, and the paper &quot;Parallel finite element operator application: Graph partitioning and coloring&quot; by Katharina Kormann and Martin Kronbichler in: Proceedings of the 7th IEEE International Conference on e-Science, 2011. </em></p>
 <p><a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
-<p>This program demonstrates how to use the cell-based implementation of finite element operators with the <a class="el" href="classMatrixFree.html">MatrixFree</a> class, first introduced in <a class="el" href="step_37.html">step-37</a>, to solve nonlinear partial differential equations. Moreover, we have another look at the handling of constraints within the matrix-free framework. Finally, we will use an explicit time-stepping method to solve the problem and introduce Gauss-Lobatto finite elements that are very convenient in this case since their <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> can be accurately approximated by a diagonal, and thus trivially invertible, matrix. The two ingredients to this property are firstly a distribution of the nodal points of Lagrange polynomials according to the point distribution of the Gauss-Lobatto quadrature rule. Secondly, the quadrature is done with the same Gauss-Lobatto quadrature rule. In this formula, the integrals <picture><source srcset="form_5284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_K \varphi_i \varphi_j
-dx\approx \sum_q \varphi_i \varphi_j \mathrm{det}(J) \big |_{x_q}$" src="form_5284.png"/></picture> become zero whenever <picture><source srcset="form_892_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i\neq j$" src="form_892.png"/></picture>, because exactly one function <picture><source srcset="form_1017_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j$" src="form_1017.png"/></picture> is one and all others zero in the points defining the Lagrange polynomials. Moreover, the Gauss-Lobatto distribution of nodes of Lagrange polynomials clusters the nodes towards the element boundaries. This results in a well-conditioned polynomial basis for high-order discretization methods. Indeed, the condition number of an <a class="el" href="classFE__Q.html">FE_Q</a> elements with equidistant nodes grows exponentially with the degree, which destroys any benefit for orders of about five and higher. For this reason, Gauss-Lobatto points are the default distribution for the <a class="el" href="classFE__Q.html">FE_Q</a> element (but at degrees one and two, those are equivalent to the equidistant points).</p>
+<p>This program demonstrates how to use the cell-based implementation of finite element operators with the <a class="el" href="classMatrixFree.html">MatrixFree</a> class, first introduced in <a class="el" href="step_37.html">step-37</a>, to solve nonlinear partial differential equations. Moreover, we have another look at the handling of constraints within the matrix-free framework. Finally, we will use an explicit time-stepping method to solve the problem and introduce Gauss-Lobatto finite elements that are very convenient in this case since their <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> can be accurately approximated by a diagonal, and thus trivially invertible, matrix. The two ingredients to this property are firstly a distribution of the nodal points of Lagrange polynomials according to the point distribution of the Gauss-Lobatto quadrature rule. Secondly, the quadrature is done with the same Gauss-Lobatto quadrature rule. In this formula, the integrals <picture><source srcset="form_5482_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_K \varphi_i \varphi_j
+dx\approx \sum_q \varphi_i \varphi_j \mathrm{det}(J) \big |_{x_q}$" src="form_5482.png"/></picture> become zero whenever <picture><source srcset="form_892_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i\neq j$" src="form_892.png"/></picture>, because exactly one function <picture><source srcset="form_971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j$" src="form_971.png"/></picture> is one and all others zero in the points defining the Lagrange polynomials. Moreover, the Gauss-Lobatto distribution of nodes of Lagrange polynomials clusters the nodes towards the element boundaries. This results in a well-conditioned polynomial basis for high-order discretization methods. Indeed, the condition number of an <a class="el" href="classFE__Q.html">FE_Q</a> elements with equidistant nodes grows exponentially with the degree, which destroys any benefit for orders of about five and higher. For this reason, Gauss-Lobatto points are the default distribution for the <a class="el" href="classFE__Q.html">FE_Q</a> element (but at degrees one and two, those are equivalent to the equidistant points).</p>
 <p><a class="anchor" id="Problemstatementanddiscretization"></a></p><h3>Problem statement and discretization </h3>
 <p>As an example, we choose to solve the sine-Gordon soliton equation  </p><p class="formulaDsp">
-<picture><source srcset="form_5289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_5483_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 u_{tt} &amp;=&amp; \Delta u -\sin(u) \quad\mbox{for}\quad (x,t) \in
 \Omega \times (t_0,t_f],\\
 {\mathbf n} \cdot \nabla u &amp;=&amp; 0
 \quad\mbox{for}\quad (x,t) \in \partial\Omega \times (t_0,t_f],\\
 u(x,t_0) &amp;=&amp; u_0(x).
-\end{eqnarray*}" src="form_5289.png"/></picture>
+\end{eqnarray*}" src="form_5483.png"/></picture>
 </p>
 <p>that was already introduced in <a class="el" href="step_25.html">step-25</a>. As a simple explicit time integration method, we choose leap frog scheme using the second-order formulation of the equation. With this time stepping, the scheme reads in weak form</p>
 <p class="formulaDsp">
-<picture><source srcset="form_5290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_5484_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 (v,u^{n+1}) = (v,2 u^n-u^{n-1} -
 (\Delta t)^2 \sin(u^n)) - (\nabla v, (\Delta t)^2 \nabla u^n),
-\end{eqnarray*}" src="form_5290.png"/></picture>
+\end{eqnarray*}" src="form_5484.png"/></picture>
 </p>
 <p> where <em> v</em> denotes a test function and the index <em>n</em> stands for the time step number.</p>
 <p>For the spatial discretization, we choose <a class="el" href="classFE__Q.html">FE_Q</a> elements with basis functions defined to interpolate the support points of the Gauss-Lobatto quadrature rule. Moreover, when we compute the integrals over the basis functions to form the mass matrix and the operator on the right hand side of the equation above, we use the Gauss-Lobatto quadrature rule with the same support points as the node points of the finite element to evaluate the integrals. Since the finite element is Lagrangian, this will yield a diagonal mass matrix on the left hand side of the equation, making the solution of the linear system in each time step trivial.</p>
@@ -159,19 +159,19 @@
 <p>Apart from the fact that we avoid solving linear systems with this type of elements when using explicit time-stepping, they come with two other advantages. When we are using the sum-factorization approach to evaluate the finite element operator (cf. <a class="el" href="step_37.html">step-37</a>), we have to evaluate the function at the quadrature points. In the case of Gauss-Lobatto elements, where quadrature points and node points of the finite element coincide, this operation is trivial since the value of the function at the quadrature points is given by its one-dimensional coefficients. In this way, the arithmetic work for the finite element operator evaluation is reduced by approximately a factor of two compared to the generic Gaussian quadrature.</p>
 <p>To sum up the discussion, by using the right finite element and quadrature rule combination, we end up with a scheme where we only need to compute the right hand side vector corresponding to the formulation above and then multiply it by the inverse of the diagonal mass matrix in each time step. In practice, of course, we extract the diagonal elements and invert them only once at the beginning of the program.</p>
 <p><a class="anchor" id="Implementationofconstraints"></a></p><h3>Implementation of constraints</h3>
-<p>The usual way to handle constraints in <code>deal.II</code> is to use the <a class="el" href="classAffineConstraints.html">AffineConstraints</a> class that builds a sparse matrix storing information about which degrees of freedom (DoF) are constrained and how they are constrained. This format uses an unnecessarily large amount of memory since there are not so many different types of constraints: for example, in the case of hanging nodes when using linear finite element on every cell, most constraints have the form <picture><source srcset="form_5304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_k = \frac 12 x_i + \frac 12 x_j$" src="form_5304.png"/></picture> where the coefficients <picture><source srcset="form_3079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 12$" src="form_3079.png"/></picture> are always the same and only <picture><source srcset="form_5305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i,j,k$" src="form_5305.png"/></picture> are different. While storing this redundant information is not a problem in general because it is only needed once during matrix and right hand side assembly, it becomes a bottleneck in the matrix-free approach since there this information has to be accessed every time we apply the operator, and the remaining components of the operator evaluation are so fast. Thus, instead of an <a class="el" href="classAffineConstraints.html">AffineConstraints</a> object, <a class="el" href="classMatrixFree.html">MatrixFree</a> uses a variable that we call <code>constraint_pool</code> that collects the weights of the different constraints. Then, only an identifier of each constraint in the mesh instead of all the weights have to be stored. Moreover, the constraints are not applied in a pre- and postprocessing step but rather as we evaluate the finite element operator. Therefore, the constraint information is embedded into the variable <code>indices_local_to_global</code> that is used to extract the cell information from the global vector. If a DoF is constrained, the <code>indices_local_to_global</code> variable contains the global indices of the DoFs that it is constrained to. Then, we have another variable <code>constraint_indicator</code> at hand that holds, for each cell, the local indices of DoFs that are constrained as well as the identifier of the type of constraint. Fortunately, you will not see these data structures in the example program since the class <code><a class="el" href="classFEEvaluation.html">FEEvaluation</a></code> takes care of the constraints without user interaction.</p>
+<p>The usual way to handle constraints in <code>deal.II</code> is to use the <a class="el" href="classAffineConstraints.html">AffineConstraints</a> class that builds a sparse matrix storing information about which degrees of freedom (DoF) are constrained and how they are constrained. This format uses an unnecessarily large amount of memory since there are not so many different types of constraints: for example, in the case of hanging nodes when using linear finite element on every cell, most constraints have the form <picture><source srcset="form_5485_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_k = \frac 12 x_i + \frac 12 x_j$" src="form_5485.png"/></picture> where the coefficients <picture><source srcset="form_3007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 12$" src="form_3007.png"/></picture> are always the same and only <picture><source srcset="form_5486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i,j,k$" src="form_5486.png"/></picture> are different. While storing this redundant information is not a problem in general because it is only needed once during matrix and right hand side assembly, it becomes a bottleneck in the matrix-free approach since there this information has to be accessed every time we apply the operator, and the remaining components of the operator evaluation are so fast. Thus, instead of an <a class="el" href="classAffineConstraints.html">AffineConstraints</a> object, <a class="el" href="classMatrixFree.html">MatrixFree</a> uses a variable that we call <code>constraint_pool</code> that collects the weights of the different constraints. Then, only an identifier of each constraint in the mesh instead of all the weights have to be stored. Moreover, the constraints are not applied in a pre- and postprocessing step but rather as we evaluate the finite element operator. Therefore, the constraint information is embedded into the variable <code>indices_local_to_global</code> that is used to extract the cell information from the global vector. If a DoF is constrained, the <code>indices_local_to_global</code> variable contains the global indices of the DoFs that it is constrained to. Then, we have another variable <code>constraint_indicator</code> at hand that holds, for each cell, the local indices of DoFs that are constrained as well as the identifier of the type of constraint. Fortunately, you will not see these data structures in the example program since the class <code><a class="el" href="classFEEvaluation.html">FEEvaluation</a></code> takes care of the constraints without user interaction.</p>
 <p>In the presence of hanging nodes, the diagonal mass matrix obtained on the element level via the Gauss-Lobatto quadrature/node point procedure does not directly translate to a diagonal global mass matrix, as following the constraints on rows and columns would also add off-diagonal entries. As explained in <a href="https://dx.doi.org/10.4208/cicp.101214.021015a">Kormann (2016)</a>, interpolating constraints on a vector, which maintains the diagonal shape of the mass matrix, is consistent with the equations up to an error of the same magnitude as the quadrature error. In the program below, we will simply assemble the diagonal of the mass matrix as if it were a vector to enable this approximation.</p>
 <p><a class="anchor" id="Parallelization"></a></p><h3>Parallelization </h3>
 <p>The <a class="el" href="classMatrixFree.html">MatrixFree</a> class comes with the option to be parallelized on three levels: MPI parallelization on clusters of distributed nodes, thread parallelization scheduled by the Threading Building Blocks library, and finally with a vectorization by working on a batch of two (or more) cells via SIMD data type (sometimes called cross-element or external vectorization). As we have already discussed in <a class="el" href="step_37.html">step-37</a>, you will get best performance by using an instruction set specific to your system, e.g. with the cmake variable <code>-DCMAKE_CXX_FLAGS="-march=native"</code>. The MPI parallelization was already exploited in <a class="el" href="step_37.html">step-37</a>. Here, we additionally consider thread parallelization with TBB. This is fairly simple, as all we need to do is to tell the initialization of the <a class="el" href="classMatrixFree.html">MatrixFree</a> object about the fact that we want to use a thread parallel scheme through the variable MatrixFree::AdditionalData::thread_parallel_scheme. During setup, a dependency graph is set up similar to the one described in the <a class="el" href="DEALGlossary.html#href_anchor">workstream_paper</a> , which allows to schedule the work of the <code>local_apply</code> function on chunks of cells without several threads accessing the same vector indices. As opposed to the <a class="el" href="namespaceWorkStream.html">WorkStream</a> loops, some additional clever tricks to avoid global synchronizations as described in <a href="https://dx.doi.org/10.1109/eScience.2011.53">Kormann and Kronbichler (2011)</a> are also applied.</p>
 <p>Note that this program is designed to be run with a distributed triangulation (<a class="el" href="classparallel_1_1distributed_1_1Triangulation.html">parallel::distributed::Triangulation</a>), which requires deal.II to be configured with <a href="http://www.p4est.org/">p4est</a> as described in the <a href="../../readme.html">deal.II ReadMe</a> file. However, a non-distributed triangulation is also supported, in which case the computation will be run in serial.</p>
 <p><a class="anchor" id="Thetestcase"></a></p><h3>The test case </h3>
 <p>In our example, we choose the initial value to be </p><p class="formulaDsp">
-<picture><source srcset="form_5325_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*} u(x,t) =
+<picture><source srcset="form_5487_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*} u(x,t) =
 \prod_{i=1}^{d} -4 \arctan \left(
 \frac{m}{\sqrt{1-m^2}}\frac{\sin\left(\sqrt{1-m^2} t +c_2\right)}{\cosh(mx_i+c_1)}\right)
-\end{eqnarray*}" src="form_5325.png"/></picture>
+\end{eqnarray*}" src="form_5487.png"/></picture>
 </p>
-<p> and solve the equation over the time interval [-10,10]. The constants are chosen to be <picture><source srcset="form_5326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_1=c_1=0$" src="form_5326.png"/></picture> and <em> m=0.5</em>. As mentioned in <a class="el" href="step_25.html">step-25</a>, in one dimension <em>u</em> as a function of <em>t</em> is the exact solution of the sine-Gordon equation. For higher dimension, this is however not the case.</p>
+<p> and solve the equation over the time interval [-10,10]. The constants are chosen to be <picture><source srcset="form_5488_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_1=c_1=0$" src="form_5488.png"/></picture> and <em> m=0.5</em>. As mentioned in <a class="el" href="step_25.html">step-25</a>, in one dimension <em>u</em> as a function of <em>t</em> is the exact solution of the sine-Gordon equation. For higher dimension, this is however not the case.</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
 <p>The necessary files from the deal.II library.</p>
 <div class="fragment"><div class="line">  #href_anchor"line">  #include &lt;deal.II/base/multithread_info.h&gt;</div>
@@ -443,7 +443,7 @@
 <div class="ttc" id="anamespaceUtilities_html"><div class="ttname"><a href="namespaceUtilities.html">Utilities</a></div><div class="ttdef"><b>Definition</b> <a href="base_2communication__pattern__base_8h_source.html#href_anchor">communication_pattern_base.h:31</a></div></div>
 <div class="ttc" id="anamespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div><div class="ttdoc">STL namespace.</div></div>
 </div><!-- fragment --><p><a class="anchor" id="SineGordonProblemmake_grid_and_dofs"></a> </p><h4>SineGordonProblem::make_grid_and_dofs</h4>
-<p>As in <a class="el" href="step_25.html">step-25</a> this functions sets up a cube grid in <code>dim</code> dimensions of extent <picture><source srcset="form_5376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-15,15]$" src="form_5376.png"/></picture>. We refine the mesh more in the center of the domain since the solution is concentrated there. We first refine all cells whose center is within a radius of 11, and then refine once more for a radius 6. This simple ad hoc refinement could be done better by adapting the mesh to the solution using error estimators during the time stepping as done in other example programs, and using <a class="el" href="classparallel_1_1distributed_1_1SolutionTransfer.html">parallel::distributed::SolutionTransfer</a> to transfer the solution to the new mesh.</p>
+<p>As in <a class="el" href="step_25.html">step-25</a> this functions sets up a cube grid in <code>dim</code> dimensions of extent <picture><source srcset="form_5489_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-15,15]$" src="form_5489.png"/></picture>. We refine the mesh more in the center of the domain since the solution is concentrated there. We first refine all cells whose center is within a radius of 11, and then refine once more for a radius 6. This simple ad hoc refinement could be done better by adapting the mesh to the solution using error estimators during the time stepping as done in other example programs, and using <a class="el" href="classparallel_1_1distributed_1_1SolutionTransfer.html">parallel::distributed::SolutionTransfer</a> to transfer the solution to the new mesh.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> SineGordonProblem&lt;dim&gt;::make_grid_and_dofs()</div>
 <div class="line">    {</div>
@@ -711,13 +711,13 @@
 <tr>
 <th>&#160; </th><th>MF </th><th>SpMV </th><th>dealii </th><th>MF </th><th>dealii  </th></tr>
 <tr>
-<td>2D, <picture><source srcset="form_5386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{Q}_2$" src="form_5386.png"/></picture> </td><td align="right">0.0106 </td><td align="right">0.00971 </td><td align="right">0.109 </td><td align="right">0.0243 </td><td align="right">0.124  </td></tr>
+<td>2D, <picture><source srcset="form_5490_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{Q}_2$" src="form_5490.png"/></picture> </td><td align="right">0.0106 </td><td align="right">0.00971 </td><td align="right">0.109 </td><td align="right">0.0243 </td><td align="right">0.124  </td></tr>
 <tr>
-<td>2D, <picture><source srcset="form_5387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{Q}_4$" src="form_5387.png"/></picture> </td><td align="right">0.0328 </td><td align="right">0.0706 </td><td align="right">0.528 </td><td align="right">0.0714 </td><td align="right">0.502  </td></tr>
+<td>2D, <picture><source srcset="form_5491_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{Q}_4$" src="form_5491.png"/></picture> </td><td align="right">0.0328 </td><td align="right">0.0706 </td><td align="right">0.528 </td><td align="right">0.0714 </td><td align="right">0.502  </td></tr>
 <tr>
-<td>3D, <picture><source srcset="form_5386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{Q}_2$" src="form_5386.png"/></picture> </td><td align="right">0.0151 </td><td align="right">0.0320 </td><td align="right">0.331 </td><td align="right">0.0376 </td><td align="right">0.364  </td></tr>
+<td>3D, <picture><source srcset="form_5490_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{Q}_2$" src="form_5490.png"/></picture> </td><td align="right">0.0151 </td><td align="right">0.0320 </td><td align="right">0.331 </td><td align="right">0.0376 </td><td align="right">0.364  </td></tr>
 <tr>
-<td>3D, <picture><source srcset="form_5387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{Q}_4$" src="form_5387.png"/></picture> </td><td align="right">0.0918 </td><td align="right">0.844 </td><td align="right">6.83 </td><td align="right">0.194 </td><td align="right">6.95  </td></tr>
+<td>3D, <picture><source srcset="form_5491_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{Q}_4$" src="form_5491.png"/></picture> </td><td align="right">0.0918 </td><td align="right">0.844 </td><td align="right">6.83 </td><td align="right">0.194 </td><td align="right">6.95  </td></tr>
 </table>
 <p>It is apparent that the matrix-free code outperforms the standard assembly routines in deal.II by far. In 3D and for fourth order elements, one operator evaluation is also almost ten times as fast as a sparse matrix-vector product.</p>
 <p><a class="anchor" id="Parallelrunin2Dand3D"></a></p><h3>Parallel run in 2D and 3D</h3>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_49.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_49.html	2024-03-17 21:57:47.067256681 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_49.html	2024-03-17 21:57:47.071256706 +0000
@@ -189,7 +189,7 @@
 <div class="line">...</div>
 <div class="ttc" id="aclassPoint_html"><div class="ttname"><a href="classPoint.html">Point</a></div><div class="ttdef"><b>Definition</b> <a href="base_2point_8h_source.html#href_anchor">point.h:112</a></div></div>
 <div class="ttc" id="anamespacePhysics_1_1Elasticity_1_1Kinematics_html_a85ec995f892fbfa61268d84cbe2fefea"><div class="ttname"><a href="namespacePhysics_1_1Elasticity_1_1Kinematics.html#href_anchor">Physics::Elasticity::Kinematics::b</a></div><div class="ttdeci">SymmetricTensor&lt; 2, dim, Number &gt; b(const Tensor&lt; 2, dim, Number &gt; &amp;F)</div></div>
-</div><!-- fragment --><p>It is relevant to note that all points in Gmsh are three-dimensional objects. Since we here want to generate a two-dimensional mesh, the points simply have a zero <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> coordinate. The fourth number in the curly braces for each point (equal to 1.0 for all of the points above) indicates the desired mesh size in the vicinity of this point. Gmsh's graphical user interfaces writes this into the <code>.geo</code> file automatically, but it can be omitted and one would probably do that if one were to write this file by hand.</p>
+</div><!-- fragment --><p>It is relevant to note that all points in Gmsh are three-dimensional objects. Since we here want to generate a two-dimensional mesh, the points simply have a zero <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> coordinate. The fourth number in the curly braces for each point (equal to 1.0 for all of the points above) indicates the desired mesh size in the vicinity of this point. Gmsh's graphical user interfaces writes this into the <code>.geo</code> file automatically, but it can be omitted and one would probably do that if one were to write this file by hand.</p>
 <p>The file contains many more points than just these six. If you look into the file, you will also realize that one does not have to enumerate points consecutively: One can number them in whichever way one wants, which is often useful when constructing complex geometries. In such cases, one might for example want to number all points for one particular part of the geometry starting at zero, and the points for another part at, say, 1000. It does not matter whether all numbers between zero and 1000 are used.</p>
 <p><a class="anchor" id="Linesonouterdomain"></a></p><h5>Lines on outer domain</h5>
 <p>To create lines of the mesh, go to <code>Geometry -&gt; Elementary entities -&gt; Add -&gt; Line</code>. You do not get a prompt to enter in specific coordinates, rather you simply click a starting point and ending point for each line.</p>
@@ -441,7 +441,7 @@
 <div class="ttc" id="anamespaceGridGenerator_html_ae6b11dc96dd9165e25495f74def3655d"><div class="ttname"><a href="namespaceGridGenerator.html#href_anchor">GridGenerator::merge_triangulations</a></div><div class="ttdeci">void merge_triangulations(const Triangulation&lt; dim, spacedim &gt; &amp;triangulation_1, const Triangulation&lt; dim, spacedim &gt; &amp;triangulation_2, Triangulation&lt; dim, spacedim &gt; &amp;result, const double duplicated_vertex_tolerance=1.0e-12, const bool copy_manifold_ids=false, const bool copy_boundary_ids=false)</div></div>
 </div><!-- fragment --><p><a class="anchor" id="grid_3Movingvertices"></a> </p><h4>grid_3: Moving vertices</h4>
 <p>In this function, we move vertices of a mesh. This is simpler than one usually expects: if you ask a cell using <code>cell-&gt;vertex(i)</code> for the coordinates of its <code>i</code>th vertex, it doesn't just provide the location of this vertex but in fact a reference to the location where these coordinates are stored. We can then modify the value stored there.</p>
-<p>So this is what we do in the first part of this function: We create a square of geometry <picture><source srcset="form_3258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^2$" src="form_3258.png"/></picture> with a circular hole with radius 0.25 located at the origin. We then loop over all cells and all vertices and if a vertex has a <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> coordinate equal to one, we move it upward by 0.5.</p>
+<p>So this is what we do in the first part of this function: We create a square of geometry <picture><source srcset="form_3400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^2$" src="form_3400.png"/></picture> with a circular hole with radius 0.25 located at the origin. We then loop over all cells and all vertices and if a vertex has a <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> coordinate equal to one, we move it upward by 0.5.</p>
 <p>Note that this sort of procedure does not usually work this way because one will typically encounter the same vertices multiple times and may move them more than once. It works here because we select the vertices we want to use based on their geometric location, and a vertex moved once will fail this test in the future. A more general approach to this problem would have been to keep a std::set of those vertex indices that we have already moved (which we can obtain using <code>cell-&gt;vertex_index(i)</code> and only move those vertices whose index isn't in the set yet.</p>
 <div class="fragment"><div class="line">  <span class="keywordtype">void</span> grid_3()</div>
 <div class="line">  {</div>
@@ -481,8 +481,8 @@
 <div class="line">  </div>
 <div class="ttc" id="anamespaceGridGenerator_html_a6cc0ff3b4e5226c3e06a4aa6ac79f90c"><div class="ttname"><a href="namespaceGridGenerator.html#href_anchor">GridGenerator::extrude_triangulation</a></div><div class="ttdeci">void extrude_triangulation(const Triangulation&lt; 2, 2 &gt; &amp;input, const unsigned int n_slices, const double height, Triangulation&lt; 3, 3 &gt; &amp;result, const bool copy_manifold_ids=false, const std::vector&lt; types::manifold_id &gt; &amp;manifold_priorities={})</div></div>
 </div><!-- fragment --><p><a class="anchor" id="grid_5DemonstratingGridToolstransformpart1"></a> </p><h4>grid_5: Demonstrating <a class="el" href="namespaceGridTools.html#href_anchor">GridTools::transform</a>, part 1</h4>
-<p>This and the next example first create a mesh and then transform it by moving every node of the mesh according to a function that takes a point and returns a mapped point. In this case, we transform <picture><source srcset="form_5496_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x,y) \mapsto
-   (x,y+\sin(\pi x/5))$" src="form_5496.png"/></picture>.</p>
+<p>This and the next example first create a mesh and then transform it by moving every node of the mesh according to a function that takes a point and returns a mapped point. In this case, we transform <picture><source srcset="form_5493_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x,y) \mapsto
+   (x,y+\sin(\pi x/5))$" src="form_5493.png"/></picture>.</p>
 <p><a class="el" href="namespaceGridTools.html#href_anchor">GridTools::transform()</a> takes a triangulation and an argument that can be called like a function taking a <a class="el" href="classPoint.html">Point</a> and returning a <a class="el" href="classPoint.html">Point</a>. There are different ways of providing such an argument: It could be a pointer to a function; it could be an object of a class that has an <code>operator()</code>; it could be a lambda function; or it could be anything that is described via a <code>std::function&lt;<a class="el" href="classPoint.html">Point</a>&lt;2&gt;(const <a class="el" href="classPoint.html">Point</a>&lt;2&gt;)&gt;</code> object.</p>
 <p>Decidedly the more modern way is to use a lambda function that takes a <a class="el" href="classPoint.html">Point</a> and returns a <a class="el" href="classPoint.html">Point</a>, and that is what we do in the following:</p>
 <div class="fragment"><div class="line">  <span class="keywordtype">void</span> grid_5()</div>
@@ -510,7 +510,7 @@
 <div class="ttc" id="anamespacenumbers_html_a3e24f194a9cb9b6ff4442b8a7a877d4a"><div class="ttname"><a href="namespacenumbers.html#href_anchor">numbers::PI</a></div><div class="ttdeci">static constexpr double PI</div><div class="ttdef"><b>Definition</b> <a href="numbers_8h_source.html#href_anchor">numbers.h:259</a></div></div>
 <div class="ttc" id="anamespacestd_html_a8f997d77755b36a819873b85f9f57375"><div class="ttname"><a href="namespacestd.html#href_anchor">std::sin</a></div><div class="ttdeci">::VectorizedArray&lt; Number, width &gt; sin(const ::VectorizedArray&lt; Number, width &gt; &amp;)</div><div class="ttdef"><b>Definition</b> <a href="vectorization_8h_source.html#href_anchor">vectorization.h:5831</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="grid_6DemonstratingGridToolstransformpart2"></a> </p><h4>grid_6: Demonstrating <a class="el" href="namespaceGridTools.html#href_anchor">GridTools::transform</a>, part 2</h4>
-<p>In this second example of transforming points from an original to a new mesh, we will use the mapping <picture><source srcset="form_5497_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x,y) \mapsto (x,\tanh(2y)/\tanh(2))$" src="form_5497.png"/></picture>. To make things more interesting, rather than doing so in a single function as in the previous example, we here create an object with an <code>operator()</code> that will be called by <a class="el" href="namespaceGridTools.html#href_anchor">GridTools::transform</a>. Of course, this object may in reality be much more complex: the object may have member variables that play a role in computing the new locations of vertices.</p>
+<p>In this second example of transforming points from an original to a new mesh, we will use the mapping <picture><source srcset="form_5494_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x,y) \mapsto (x,\tanh(2y)/\tanh(2))$" src="form_5494.png"/></picture>. To make things more interesting, rather than doing so in a single function as in the previous example, we here create an object with an <code>operator()</code> that will be called by <a class="el" href="namespaceGridTools.html#href_anchor">GridTools::transform</a>. Of course, this object may in reality be much more complex: the object may have member variables that play a role in computing the new locations of vertices.</p>
 <div class="fragment"><div class="line">  <span class="keyword">struct </span>Grid6Func</div>
 <div class="line">  {</div>
 <div class="line">    <span class="keywordtype">double</span> trans(<span class="keyword">const</span> <span class="keywordtype">double</span> y) <span class="keyword">const</span></div>
@@ -783,9 +783,9 @@
 <div class="ttc" id="astructSubCellData_html"><div class="ttname"><a href="structSubCellData.html">SubCellData</a></div><div class="ttdef"><b>Definition</b> <a href="tria__description_8h_source.html#href_anchor">tria_description.h:239</a></div></div>
 </div><!-- fragment --><p>This creates the following mesh:</p>
 <p><img src="https://www.dealii.org/images/steps/developer/step-49.yuhan.8.png" alt="" width="400" height="355" class="inline"/></p>
-<p>This mesh has the right general shape, but the top cells are now polygonal: their edges are no longer along circles and we do not have a very accurate representation of the original geometry. The next step is to teach the top part of the domain that it should be curved. Put another way, all calculations done on the top boundary cells should be done in cylindrical coordinates rather than Cartesian coordinates. We can do this by creating a <a class="el" href="classCylindricalManifold.html">CylindricalManifold</a> object and associating it with the cells above <picture><source srcset="form_5498_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = 3$" src="form_5498.png"/></picture>. This way, when we refine the cells on top, we will place new points along concentric circles instead of straight lines.</p>
-<p>In deal.II we describe all geometries with classes that inherit from <a class="el" href="classManifold.html">Manifold</a>. The default geometry is Cartesian and is implemented in the <a class="el" href="classFlatManifold.html">FlatManifold</a> class. As the name suggests, <a class="el" href="classManifold.html">Manifold</a> and its inheriting classes provide a way to describe curves and curved cells in a general way with ideas and terminology from differential geometry: for example, <a class="el" href="classCylindricalManifold.html">CylindricalManifold</a> inherits from <a class="el" href="classChartManifold.html">ChartManifold</a>, which describes a geometry through pull backs and push forwards. In general, one should think that the <a class="el" href="classTriangulation.html">Triangulation</a> class describes the topology of a domain (in addition, of course, to storing the locations of the vertices) while the <a class="el" href="classManifold.html">Manifold</a> classes describe the geometry of a domain (e.g., whether or not a pair of vertices lie along a circular arc or a straight line). A <a class="el" href="classTriangulation.html">Triangulation</a> will refine cells by doing computations with the <a class="el" href="classManifold.html">Manifold</a> associated with that cell regardless of whether or not the cell is on the boundary. Put another way: the <a class="el" href="classManifold.html">Manifold</a> classes do not need any information about where the boundary of the <a class="el" href="classTriangulation.html">Triangulation</a> actually is: it is up to the <a class="el" href="classTriangulation.html">Triangulation</a> to query the right <a class="el" href="classManifold.html">Manifold</a> for calculations on a cell. Most <a class="el" href="classManifold.html">Manifold</a> functions (e.g., <a class="el" href="classManifold.html#href_anchor">Manifold::get_intermediate_point</a>) know nothing about the domain itself and just assume that the points given to it lie along a geodesic. In this case, with the <a class="el" href="classCylindricalManifold.html">CylindricalManifold</a> constructed below, the geodesics are arcs along circles orthogonal to the <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>-axis centered along the line <picture><source srcset="form_5499_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0, 3, z)$" src="form_5499.png"/></picture>.</p>
-<p>Since all three top parts of the domain use the same geodesics, we will mark all cells with centers above the <picture><source srcset="form_5498_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = 3$" src="form_5498.png"/></picture> line as being cylindrical in nature:</p>
+<p>This mesh has the right general shape, but the top cells are now polygonal: their edges are no longer along circles and we do not have a very accurate representation of the original geometry. The next step is to teach the top part of the domain that it should be curved. Put another way, all calculations done on the top boundary cells should be done in cylindrical coordinates rather than Cartesian coordinates. We can do this by creating a <a class="el" href="classCylindricalManifold.html">CylindricalManifold</a> object and associating it with the cells above <picture><source srcset="form_5495_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = 3$" src="form_5495.png"/></picture>. This way, when we refine the cells on top, we will place new points along concentric circles instead of straight lines.</p>
+<p>In deal.II we describe all geometries with classes that inherit from <a class="el" href="classManifold.html">Manifold</a>. The default geometry is Cartesian and is implemented in the <a class="el" href="classFlatManifold.html">FlatManifold</a> class. As the name suggests, <a class="el" href="classManifold.html">Manifold</a> and its inheriting classes provide a way to describe curves and curved cells in a general way with ideas and terminology from differential geometry: for example, <a class="el" href="classCylindricalManifold.html">CylindricalManifold</a> inherits from <a class="el" href="classChartManifold.html">ChartManifold</a>, which describes a geometry through pull backs and push forwards. In general, one should think that the <a class="el" href="classTriangulation.html">Triangulation</a> class describes the topology of a domain (in addition, of course, to storing the locations of the vertices) while the <a class="el" href="classManifold.html">Manifold</a> classes describe the geometry of a domain (e.g., whether or not a pair of vertices lie along a circular arc or a straight line). A <a class="el" href="classTriangulation.html">Triangulation</a> will refine cells by doing computations with the <a class="el" href="classManifold.html">Manifold</a> associated with that cell regardless of whether or not the cell is on the boundary. Put another way: the <a class="el" href="classManifold.html">Manifold</a> classes do not need any information about where the boundary of the <a class="el" href="classTriangulation.html">Triangulation</a> actually is: it is up to the <a class="el" href="classTriangulation.html">Triangulation</a> to query the right <a class="el" href="classManifold.html">Manifold</a> for calculations on a cell. Most <a class="el" href="classManifold.html">Manifold</a> functions (e.g., <a class="el" href="classManifold.html#href_anchor">Manifold::get_intermediate_point</a>) know nothing about the domain itself and just assume that the points given to it lie along a geodesic. In this case, with the <a class="el" href="classCylindricalManifold.html">CylindricalManifold</a> constructed below, the geodesics are arcs along circles orthogonal to the <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>-axis centered along the line <picture><source srcset="form_5496_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0, 3, z)$" src="form_5496.png"/></picture>.</p>
+<p>Since all three top parts of the domain use the same geodesics, we will mark all cells with centers above the <picture><source srcset="form_5495_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y = 3$" src="form_5495.png"/></picture> line as being cylindrical in nature:</p>
 <div class="fragment"><div class="line"><span class="keyword">const</span> <a class="code hl_class" href="classTensor.html">Tensor&lt;1, 3&gt;</a>           axis({0.0, 0.0, 1.0});</div>
 <div class="line"><span class="keyword">const</span> <a class="code hl_class" href="classPoint.html">Point&lt;3&gt;</a>               axial_point(0, 3.0, 0.0);</div>
 <div class="line"><span class="keyword">const</span> <a class="code hl_class" href="classCylindricalManifold.html">CylindricalManifold&lt;3&gt;</a> cylinder(axis, axial_point);</div>
@@ -806,7 +806,7 @@
 <div class="ttc" id="adata__out__base_8cc_html_a8188ef4709fc9a4cc076d37447783ba1"><div class="ttname"><a href="data__out__base_8cc.html#href_anchor">center</a></div><div class="ttdeci">Point&lt; 3 &gt; center</div><div class="ttdef"><b>Definition</b> <a href="data__out__base_8cc_source.html#href_anchor">data_out_base.cc:268</a></div></div>
 </div><!-- fragment --><p>With this code, we get a mesh that looks like this:</p>
 <p><img src="https://www.dealii.org/images/steps/developer/step-49.yuhan.9.png" alt="" width="400" height="355" class="inline"/></p>
-<p>This change fixes the boundary but creates a new problem: the cells adjacent to the cylinder's axis are badly distorted. We should use Cartesian coordinates for calculations on these central cells to avoid this issue. The cells along the center line all have a face that touches the line <picture><source srcset="form_5499_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0, 3, z)$" src="form_5499.png"/></picture> so, to implement this, we go back and overwrite the <code>manifold_id</code>s on these cells to be zero (which is the default):</p>
+<p>This change fixes the boundary but creates a new problem: the cells adjacent to the cylinder's axis are badly distorted. We should use Cartesian coordinates for calculations on these central cells to avoid this issue. The cells along the center line all have a face that touches the line <picture><source srcset="form_5496_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0, 3, z)$" src="form_5496.png"/></picture> so, to implement this, we go back and overwrite the <code>manifold_id</code>s on these cells to be zero (which is the default):</p>
 <div class="fragment"><div class="line"><span class="keyword">const</span> <a class="code hl_class" href="classTensor.html">Tensor&lt;1, 3&gt;</a>           axis({0.0, 0.0, 1.0});</div>
 <div class="line"><span class="keyword">const</span> <a class="code hl_class" href="classPoint.html">Point&lt;3&gt;</a>               axial_point(0, 3.0, 0.0);</div>
 <div class="line"><span class="keyword">const</span> <a class="code hl_class" href="classCylindricalManifold.html">CylindricalManifold&lt;3&gt;</a> cylinder(axis, axial_point);</div>
@@ -838,7 +838,7 @@
 <p><a class="anchor" id="Possibilitiesforextensions"></a></p><h3>Possibilities for extensions </h3>
 <p><a class="anchor" id="Assigningdifferentboundaryids"></a></p><h4>Assigning different boundary ids </h4>
 <p>It is often useful to assign different boundary ids to a mesh that is generated in one form or another as described in this tutorial to apply different boundary conditions.</p>
-<p>For example, you might want to apply a different boundary condition for the right boundary of the first grid in this program. To do this, iterate over the cells and their faces and identify the correct faces (for example using <code>cell-&gt;<a class="el" href="data__out__base_8cc.html#href_anchor">center()</a></code> to query the coordinates of the center of a cell as we do in <a class="el" href="step_1.html">step-1</a>, or using <code>cell-&gt;face(f)-&gt;get_boundary_id()</code> to query the current boundary indicator of the <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture>th face of the cell). You can then use <code>cell-&gt;face(f)-&gt;set_boundary_id()</code> to set the boundary id to something different. You can take a look back at <a class="el" href="step_1.html">step-1</a> how iteration over the meshes is done there.</p>
+<p>For example, you might want to apply a different boundary condition for the right boundary of the first grid in this program. To do this, iterate over the cells and their faces and identify the correct faces (for example using <code>cell-&gt;<a class="el" href="data__out__base_8cc.html#href_anchor">center()</a></code> to query the coordinates of the center of a cell as we do in <a class="el" href="step_1.html">step-1</a>, or using <code>cell-&gt;face(f)-&gt;get_boundary_id()</code> to query the current boundary indicator of the <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture>th face of the cell). You can then use <code>cell-&gt;face(f)-&gt;set_boundary_id()</code> to set the boundary id to something different. You can take a look back at <a class="el" href="step_1.html">step-1</a> how iteration over the meshes is done there.</p>
 <p><a class="anchor" id="Extractingaboundarymesh"></a></p><h4>Extracting a boundary mesh </h4>
 <p>Computations on manifolds, like they are done in <a class="el" href="step_38.html">step-38</a>, require a surface mesh embedded into a higher dimensional space. While some can be constructed using the <a class="el" href="namespaceGridGenerator.html">GridGenerator</a> namespace or loaded from a file, it is sometimes useful to extract a surface mesh from a volume mesh.</p>
 <p>Use the function <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::extract_boundary_mesh()</a> to extract the surface elements of a mesh. Using the function on a 3d mesh (a <code><a class="el" href="classTriangulation.html">Triangulation</a>&lt;3,3&gt;</code>, for example from <code>grid_4()</code>), this will return a <code><a class="el" href="classTriangulation.html">Triangulation</a>&lt;2,3&gt;</code> that you can use in <a class="el" href="step_38.html">step-38</a>. Also try extracting the boundary mesh of a <code><a class="el" href="classTriangulation.html">Triangulation</a>&lt;2,2&gt;</code>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_5.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_5.html	2024-03-17 21:57:47.115256977 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_5.html	2024-03-17 21:57:47.119257002 +0000
@@ -136,22 +136,22 @@
 Regarding the mathematical side, we show how to support a variable coefficient in the elliptic operator and how to use preconditioned iterative solvers for the linear systems of equations. </li>
 </ul>
 <p>The equation to solve here is as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_5493_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5497_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   -\nabla \cdot a(\mathbf x) \nabla u(\mathbf x) &amp;= 1 \qquad\qquad &amp; \text{in}\ \Omega,
   \\
   u &amp;= 0 \qquad\qquad &amp; \text{on}\ \partial\Omega.
-\end{align*}" src="form_5493.png"/></picture>
+\end{align*}" src="form_5497.png"/></picture>
 </p>
-<p> If <picture><source srcset="form_2178_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)$" src="form_2178.png"/></picture> was a constant coefficient, this would simply be the Poisson equation. However, if it is indeed spatially variable, it is a more complex equation (often referred to as the "extended Poisson equation"). Depending on what the variable <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> refers to it models a variety of situations with wide applicability:</p>
+<p> If <picture><source srcset="form_2158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)$" src="form_2158.png"/></picture> was a constant coefficient, this would simply be the Poisson equation. However, if it is indeed spatially variable, it is a more complex equation (often referred to as the "extended Poisson equation"). Depending on what the variable <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> refers to it models a variety of situations with wide applicability:</p>
 <ul>
-<li>If <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> is the electric potential, then <picture><source srcset="form_5494_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-a\nabla u$" src="form_5494.png"/></picture> is the electric current in a medium and the coefficient <picture><source srcset="form_1010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_1010.png"/></picture> is the conductivity of the medium at any given point. (In this situation, the right hand side of the equation would be the electric source density and would usually be zero or consist of localized, Delta-like, functions.)</li>
-<li>If <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> is the vertical deflection of a thin membrane, then <picture><source srcset="form_1010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_1010.png"/></picture> would be a measure of the local stiffness. This is the interpretation that will allow us to interpret the images shown in the results section below.</li>
+<li>If <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> is the electric potential, then <picture><source srcset="form_5498_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-a\nabla u$" src="form_5498.png"/></picture> is the electric current in a medium and the coefficient <picture><source srcset="form_964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_964.png"/></picture> is the conductivity of the medium at any given point. (In this situation, the right hand side of the equation would be the electric source density and would usually be zero or consist of localized, Delta-like, functions.)</li>
+<li>If <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> is the vertical deflection of a thin membrane, then <picture><source srcset="form_964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_964.png"/></picture> would be a measure of the local stiffness. This is the interpretation that will allow us to interpret the images shown in the results section below.</li>
 </ul>
 <p>Since the Laplace/Poisson equation appears in so many contexts, there are many more interpretations than just the two listed above.</p>
 <p>When assembling the linear system for this equation, we need the weak form which here reads as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_5495_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5499_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   (a \nabla \varphi, \nabla u) &amp;= (\varphi, 1) \qquad \qquad \forall \varphi.
-\end{align*}" src="form_5495.png"/></picture>
+\end{align*}" src="form_5499.png"/></picture>
 </p>
 <p> The implementation in the <code>assemble_system</code> function follows immediately from this.</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_50.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_50.html	2024-03-17 21:57:47.219257620 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_50.html	2024-03-17 21:57:47.223257645 +0000
@@ -154,14 +154,14 @@
  (\epsilon \nabla u, \nabla v) = (f,v) \quad \forall v \in V_h
 \end{align*}" src="form_5500.png"/></picture>
 </p>
-<p> on the domain <picture><source srcset="form_5501_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega = [-1,1]^\text{dim} \setminus [0,1]^\text{dim}$" src="form_5501.png"/></picture> (an L-shaped domain for 2D and a Fichera corner for 3D) with <picture><source srcset="form_5502_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon = 1$" src="form_5502.png"/></picture> if <picture><source srcset="form_5503_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\min(x,y,z)&gt;-\frac{1}{2}$" src="form_5503.png"/></picture> and <picture><source srcset="form_5504_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon = 100$" src="form_5504.png"/></picture> otherwise. In other words, <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1433.png"/></picture> is small along the edges or faces of the domain that run into the reentrant corner, as will be visible in the figure below.</p>
-<p>The boundary conditions are <picture><source srcset="form_3486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=0$" src="form_3486.png"/></picture> on the whole boundary and the right-hand side is <picture><source srcset="form_5505_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=1$" src="form_5505.png"/></picture>. We use continuous <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> elements for the discrete finite element space <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture>, and use a residual-based, cell-wise a posteriori error estimator <picture><source srcset="form_5506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e(K) = e_{\text{cell}}(K) + e_{\text{face}}(K)$" src="form_5506.png"/></picture> from <b>[karakashian2003posteriori]</b> with  </p><p class="formulaDsp">
+<p> on the domain <picture><source srcset="form_5501_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega = [-1,1]^\text{dim} \setminus [0,1]^\text{dim}$" src="form_5501.png"/></picture> (an L-shaped domain for 2D and a Fichera corner for 3D) with <picture><source srcset="form_5502_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon = 1$" src="form_5502.png"/></picture> if <picture><source srcset="form_5503_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\min(x,y,z)&gt;-\frac{1}{2}$" src="form_5503.png"/></picture> and <picture><source srcset="form_5504_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon = 100$" src="form_5504.png"/></picture> otherwise. In other words, <picture><source srcset="form_1435_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1435.png"/></picture> is small along the edges or faces of the domain that run into the reentrant corner, as will be visible in the figure below.</p>
+<p>The boundary conditions are <picture><source srcset="form_3495_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=0$" src="form_3495.png"/></picture> on the whole boundary and the right-hand side is <picture><source srcset="form_5505_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=1$" src="form_5505.png"/></picture>. We use continuous <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> elements for the discrete finite element space <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture>, and use a residual-based, cell-wise a posteriori error estimator <picture><source srcset="form_5506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e(K) = e_{\text{cell}}(K) + e_{\text{face}}(K)$" src="form_5506.png"/></picture> from <b>[karakashian2003posteriori]</b> with  </p><p class="formulaDsp">
 <picture><source srcset="form_5507_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
  e_{\text{cell}}(K) &amp;= h^2 \| f + \epsilon \triangle u \|_K^2, \\
  e_{\text{face}}(K) &amp;= \sum_F h_F \| \jump{ \epsilon \nabla u \cdot n } \|_F^2,
 \end{align*}" src="form_5507.png"/></picture>
 </p>
-<p> to adaptively refine the mesh. (This is a generalization of the Kelly error estimator used in the <a class="el" href="classKellyErrorEstimator.html">KellyErrorEstimator</a> class that drives mesh refinement in most of the other tutorial programs.) The following figure visualizes the solution and refinement for 2D: <img src="https://www.dealii.org/images/steps/developer/step-50-2d-solution.png" alt="" width="400px" class="inline"/> In 3D, the solution looks similar (see below). On the left you can see the solution and on the right we show a slice for <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> close to the center of the domain showing the adaptively refined mesh. </p><table width="60%" align="center">
+<p> to adaptively refine the mesh. (This is a generalization of the Kelly error estimator used in the <a class="el" href="classKellyErrorEstimator.html">KellyErrorEstimator</a> class that drives mesh refinement in most of the other tutorial programs.) The following figure visualizes the solution and refinement for 2D: <img src="https://www.dealii.org/images/steps/developer/step-50-2d-solution.png" alt="" width="400px" class="inline"/> In 3D, the solution looks similar (see below). On the left you can see the solution and on the right we show a slice for <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> close to the center of the domain showing the adaptively refined mesh. </p><table width="60%" align="center">
 <tr>
 <td align="center"><img src="https://www.dealii.org/images/steps/developer/step-50-3d-solution.png" alt="" width="400px" class="inline"/>  </td><td align="center"><img src="https://www.dealii.org/images/steps/developer/step-50-refinement.png" alt="" width="400px" class="inline"/>   </td></tr>
 </table>
@@ -170,41 +170,41 @@
 <p>As mentioned above, the purpose of this program is to demonstrate the use of algebraic and geometric multigrid methods for this problem, and to do so for parallel computations. An important component of making algorithms scale to large parallel machines is ensuring that every processor has the same amount of work to do. (More precisely, what matters is that there are no small fraction of processors that have substantially more work than the rest since, if that were so, a large fraction of processors will sit idle waiting for the small fraction to finish. Conversely, a small fraction of processors having substantially <em>less</em> work is not a problem because the majority of processors continues to be productive and only the small fraction sits idle once finished with their work.)</p>
 <p>For the active mesh, we use the <a class="el" href="classparallel_1_1distributed_1_1Triangulation.html">parallel::distributed::Triangulation</a> class as done in <a class="el" href="step_40.html">step-40</a> which uses functionality in the external library <a href="http://www.p4est.org/">p4est</a> for the distribution of the active cells among processors. For the non-active cells in the multilevel hierarchy, deal.II implements what we will refer to as the "first-child rule" where, for each cell in the hierarchy, we recursively assign the parent of a cell to the owner of the first child cell. The following figures give an example of such a distribution. Here the left image represents the active cells for a sample 2D mesh partitioned using a space-filling curve (which is what p4est uses to partition cells); the center image gives the tree representation of the active mesh; and the right image gives the multilevel hierarchy of cells. The colors and numbers represent the different processors. The circular nodes in the tree are the non-active cells which are distributed using the "first-child rule".</p>
 <p><img src="https://www.dealii.org/images/steps/developer/step-50-workload-example.png" alt="" width="800px" class="inline"/></p>
-<p>Included among the output to screen in this example is a value "Partition efficiency" given by one over <a class="el" href="namespaceMGTools.html#href_anchor">MGTools::workload_imbalance()</a>. This value, which will be denoted by <picture><source srcset="form_5510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5510.png"/></picture>, quantifies the overhead produced by not having a perfect work balance on each level of the multigrid hierarchy. This imbalance is evident from the example above: while level <picture><source srcset="form_5511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ell=2$" src="form_5511.png"/></picture> is about as well balanced as is possible with four cells among three processors, the coarse level <picture><source srcset="form_5512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ell=0$" src="form_5512.png"/></picture> has work for only one processor, and level <picture><source srcset="form_5513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ell=1$" src="form_5513.png"/></picture> has work for only two processors of which one has three times as much work as the other.</p>
-<p>For defining <picture><source srcset="form_5510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5510.png"/></picture>, it is important to note that, as we are using local smoothing to define the multigrid hierarchy (see the <a class="el" href="DEALGlossary.html#href_anchor">multigrid paper</a> for a description of local smoothing), the refinement level of a cell corresponds to that cell's multigrid level. Now, let <picture><source srcset="form_5518_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N_{\ell}$" src="form_5518.png"/></picture> be the number of cells on level <picture><source srcset="form_5519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ell$" src="form_5519.png"/></picture> (both active and non-active cells) and <picture><source srcset="form_5521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N_{\ell,p}$" src="form_5521.png"/></picture> be the subset owned by process <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>. We will also denote by <picture><source srcset="form_175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_175.png"/></picture> the total number of processors. Assuming that the workload for any one processor is proportional to the number of cells owned by that processor, the optimal workload per processor is given by  </p><p class="formulaDsp">
-<picture><source srcset="form_5525_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>Included among the output to screen in this example is a value "Partition efficiency" given by one over <a class="el" href="namespaceMGTools.html#href_anchor">MGTools::workload_imbalance()</a>. This value, which will be denoted by <picture><source srcset="form_5508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5508.png"/></picture>, quantifies the overhead produced by not having a perfect work balance on each level of the multigrid hierarchy. This imbalance is evident from the example above: while level <picture><source srcset="form_5509_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ell=2$" src="form_5509.png"/></picture> is about as well balanced as is possible with four cells among three processors, the coarse level <picture><source srcset="form_5510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ell=0$" src="form_5510.png"/></picture> has work for only one processor, and level <picture><source srcset="form_5511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ell=1$" src="form_5511.png"/></picture> has work for only two processors of which one has three times as much work as the other.</p>
+<p>For defining <picture><source srcset="form_5508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5508.png"/></picture>, it is important to note that, as we are using local smoothing to define the multigrid hierarchy (see the <a class="el" href="DEALGlossary.html#href_anchor">multigrid paper</a> for a description of local smoothing), the refinement level of a cell corresponds to that cell's multigrid level. Now, let <picture><source srcset="form_5512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N_{\ell}$" src="form_5512.png"/></picture> be the number of cells on level <picture><source srcset="form_5513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ell$" src="form_5513.png"/></picture> (both active and non-active cells) and <picture><source srcset="form_5514_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N_{\ell,p}$" src="form_5514.png"/></picture> be the subset owned by process <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>. We will also denote by <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_149.png"/></picture> the total number of processors. Assuming that the workload for any one processor is proportional to the number of cells owned by that processor, the optimal workload per processor is given by  </p><p class="formulaDsp">
+<picture><source srcset="form_5515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 W_{\text{opt}} = \frac1{P}\sum_{\ell} N_{\ell} = \sum_{\ell}\left(\frac1{P}\sum_{p}N_{\ell,p}\right).
-\end{align*}" src="form_5525.png"/></picture>
+\end{align*}" src="form_5515.png"/></picture>
 </p>
 <p> Next, assuming a synchronization of work on each level (i.e., on each level of a V-cycle, work must be completed by all processors before moving on to the next level), the limiting effort on each level is given by  </p><p class="formulaDsp">
-<picture><source srcset="form_5527_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5516_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 W_\ell = \max_{p} N_{\ell,p},
-\end{align*}" src="form_5527.png"/></picture>
+\end{align*}" src="form_5516.png"/></picture>
 </p>
 <p> and the total parallel complexity  </p><p class="formulaDsp">
-<picture><source srcset="form_5528_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 W = \sum_{\ell} W_\ell.
-\end{align*}" src="form_5528.png"/></picture>
+\end{align*}" src="form_5517.png"/></picture>
 </p>
-<p> Then we define <picture><source srcset="form_5510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5510.png"/></picture> as a ratio of the optimal partition to the parallel complexity of the current partition  </p><p class="formulaDsp">
-<picture><source srcset="form_5539_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> Then we define <picture><source srcset="form_5508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5508.png"/></picture> as a ratio of the optimal partition to the parallel complexity of the current partition  </p><p class="formulaDsp">
+<picture><source srcset="form_5518_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \mathbb{E} = \frac{W_{\text{opt}}}{W}.
-\end{align*}" src="form_5539.png"/></picture>
+\end{align*}" src="form_5518.png"/></picture>
 </p>
 <p> For the example distribution above, we have  </p><p class="formulaDsp">
-<picture><source srcset="form_5540_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 W_{\text{opt}}&amp;=\frac{1}{P}\sum_{\ell} N_{\ell} = \frac{1}{3} \left(1+4+4\right)= 3 \qquad
 \\
 W &amp;= \sum_\ell W_\ell = 1 + 2 + 3 = 6
 \\
 \mathbb{E} &amp;= \frac{W_{\text{opt}}}{W} = \frac12.
-\end{align*}" src="form_5540.png"/></picture>
+\end{align*}" src="form_5519.png"/></picture>
 </p>
-<p> The value <a class="el" href="namespaceMGTools.html#href_anchor">MGTools::workload_imbalance()</a> <picture><source srcset="form_5541_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$= 1/\mathbb{E}$" src="form_5541.png"/></picture> then represents the factor increase in timings we expect for GMG methods (vmults, assembly, etc.) due to the imbalance of the mesh partition compared to a perfectly load-balanced workload. We will report on these in the results section below for a sequence of meshes, and compare with the observed slow-downs as we go to larger and larger processor numbers (where, typically, the load imbalance becomes larger as well).</p>
-<p>These sorts of considerations are considered in much greater detail in <b>[clevenger_par_gmg]</b>, which contains a full discussion of the partition efficiency model and the effect the imbalance has on the GMG V-cycle timing. In summary, the value of <picture><source srcset="form_5510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5510.png"/></picture> is highly dependent on the degree of local mesh refinement used and has an optimal value <picture><source srcset="form_5546_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E} \approx 1$" src="form_5546.png"/></picture> for globally refined meshes. Typically for adaptively refined meshes, the number of processors used to distribute a single mesh has a negative impact on <picture><source srcset="form_5510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5510.png"/></picture> but only up to a leveling off point, where the imbalance remains relatively constant for an increasing number of processors, and further refinement has very little impact on <picture><source srcset="form_5510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5510.png"/></picture>. Finally, <picture><source srcset="form_5548_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/\mathbb{E}$" src="form_5548.png"/></picture> was shown to give an accurate representation of the slowdown in parallel scaling expected for the timing of a V-cycle.</p>
+<p> The value <a class="el" href="namespaceMGTools.html#href_anchor">MGTools::workload_imbalance()</a> <picture><source srcset="form_5520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$= 1/\mathbb{E}$" src="form_5520.png"/></picture> then represents the factor increase in timings we expect for GMG methods (vmults, assembly, etc.) due to the imbalance of the mesh partition compared to a perfectly load-balanced workload. We will report on these in the results section below for a sequence of meshes, and compare with the observed slow-downs as we go to larger and larger processor numbers (where, typically, the load imbalance becomes larger as well).</p>
+<p>These sorts of considerations are considered in much greater detail in <b>[clevenger_par_gmg]</b>, which contains a full discussion of the partition efficiency model and the effect the imbalance has on the GMG V-cycle timing. In summary, the value of <picture><source srcset="form_5508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5508.png"/></picture> is highly dependent on the degree of local mesh refinement used and has an optimal value <picture><source srcset="form_5521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E} \approx 1$" src="form_5521.png"/></picture> for globally refined meshes. Typically for adaptively refined meshes, the number of processors used to distribute a single mesh has a negative impact on <picture><source srcset="form_5508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5508.png"/></picture> but only up to a leveling off point, where the imbalance remains relatively constant for an increasing number of processors, and further refinement has very little impact on <picture><source srcset="form_5508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5508.png"/></picture>. Finally, <picture><source srcset="form_5522_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/\mathbb{E}$" src="form_5522.png"/></picture> was shown to give an accurate representation of the slowdown in parallel scaling expected for the timing of a V-cycle.</p>
 <p>It should be noted that there is potential for some asynchronous work between multigrid levels, specifically with purely nearest neighbor MPI communication, and an adaptive mesh could be constructed such that the efficiency model would far overestimate the V-cycle slowdown due to the asynchronous work "covering up" the imbalance (which assumes synchronization over levels). However, for most realistic adaptive meshes the expectation is that this asynchronous work will only cover up a very small portion of the imbalance and the efficiency model will describe the slowdown very well.</p>
 <p><a class="anchor" id="Workloadimbalanceforalgebraicmultigridmethods"></a></p><h3>Workload imbalance for algebraic multigrid methods</h3>
-<p>The considerations above show that one has to expect certain limits on the scalability of the geometric multigrid algorithm as it is implemented in deal.II because even in cases where the finest levels of a mesh are perfectly load balanced, the coarser levels may not be. At the same time, the coarser levels are weighted less (the contributions of <picture><source srcset="form_5551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W_\ell$" src="form_5551.png"/></picture> to <picture><source srcset="form_192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W$" src="form_192.png"/></picture> are small) because coarser levels have fewer cells and, consequently, do not contribute to the overall run time as much as finer levels. In other words, imbalances in the coarser levels may not lead to large effects in the big picture.</p>
+<p>The considerations above show that one has to expect certain limits on the scalability of the geometric multigrid algorithm as it is implemented in deal.II because even in cases where the finest levels of a mesh are perfectly load balanced, the coarser levels may not be. At the same time, the coarser levels are weighted less (the contributions of <picture><source srcset="form_5523_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W_\ell$" src="form_5523.png"/></picture> to <picture><source srcset="form_166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W$" src="form_166.png"/></picture> are small) because coarser levels have fewer cells and, consequently, do not contribute to the overall run time as much as finer levels. In other words, imbalances in the coarser levels may not lead to large effects in the big picture.</p>
 <p>Algebraic multigrid methods are of course based on an entirely different approach to creating a hierarchy of levels. In particular, they create these purely based on analyzing the system matrix, and very sophisticated algorithms for ensuring that the problem is well load-balanced on every level are implemented in both the hypre and ML/MueLu packages that underly the <a class="el" href="classTrilinosWrappers_1_1PreconditionAMG.html">TrilinosWrappers::PreconditionAMG</a> and <a class="el" href="classPETScWrappers_1_1PreconditionBoomerAMG.html">PETScWrappers::PreconditionBoomerAMG</a> classes. In some sense, these algorithms are simpler than for geometric multigrid methods because they only deal with the matrix itself, rather than all of the connotations of meshes, neighbors, parents, and other geometric entities. At the same time, much work has also been put into making algebraic multigrid methods scale to very large problems, including questions such as reducing the number of processors that work on a given level of the hierarchy to a subset of all processors, if otherwise processors would spend less time on computations than on communication. (One might note that it is of course possible to implement these same kinds of ideas also in geometric multigrid algorithms where one purposefully idles some processors on coarser levels to reduce the amount of communication. deal.II just doesn't do this at this time.)</p>
 <p>These are not considerations we typically have to worry about here, however: For most purposes, we use algebraic multigrid methods as black-box methods.</p>
 <p><a class="anchor" id="Runningtheprogram"></a></p><h3>Running the program</h3>
@@ -1079,9 +1079,9 @@
 <p>The result is a function that is similar to the one found in the "Use FEEvaluation::read_dof_values_plain()
    to avoid resolving constraints" subsection in the "Possibilities
    for extensions" section of <a class="el" href="step_37.html">step-37</a>.</p>
-<p>The reason for this function is that the <a class="el" href="classMatrixFree.html">MatrixFree</a> operators do not take into account non-homogeneous Dirichlet constraints, instead treating all Dirichlet constraints as homogeneous. To account for this, the right-hand side here is assembled as the residual <picture><source srcset="form_5583_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r_0 = f-Au_0$" src="form_5583.png"/></picture>, where <picture><source srcset="form_2560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0$" src="form_2560.png"/></picture> is a zero vector except in the Dirichlet values. Then when solving, we have that the solution is <picture><source srcset="form_5584_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u = u_0 + A^{-1}r_0$" src="form_5584.png"/></picture>. This can be seen as a Newton iteration on a linear system with initial guess <picture><source srcset="form_2560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0$" src="form_2560.png"/></picture>. The CG solve in the <code>solve()</code> function below computes <picture><source srcset="form_5585_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^{-1}r_0$" src="form_5585.png"/></picture> and the call to <code>constraints.distribute()</code> (which directly follows) adds the <picture><source srcset="form_2560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0$" src="form_2560.png"/></picture>.</p>
+<p>The reason for this function is that the <a class="el" href="classMatrixFree.html">MatrixFree</a> operators do not take into account non-homogeneous Dirichlet constraints, instead treating all Dirichlet constraints as homogeneous. To account for this, the right-hand side here is assembled as the residual <picture><source srcset="form_5524_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r_0 = f-Au_0$" src="form_5524.png"/></picture>, where <picture><source srcset="form_2649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0$" src="form_2649.png"/></picture> is a zero vector except in the Dirichlet values. Then when solving, we have that the solution is <picture><source srcset="form_5525_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u = u_0 + A^{-1}r_0$" src="form_5525.png"/></picture>. This can be seen as a Newton iteration on a linear system with initial guess <picture><source srcset="form_2649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0$" src="form_2649.png"/></picture>. The CG solve in the <code>solve()</code> function below computes <picture><source srcset="form_5526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^{-1}r_0$" src="form_5526.png"/></picture> and the call to <code>constraints.distribute()</code> (which directly follows) adds the <picture><source srcset="form_2649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0$" src="form_2649.png"/></picture>.</p>
 <p>Obviously, since we are considering a problem with zero Dirichlet boundary, we could have taken a similar approach to <a class="el" href="step_37.html">step-37</a> <code>assemble_rhs()</code>, but this additional work allows us to change the problem declaration if we so choose.</p>
-<p>This function has two parts in the integration loop: applying the negative of matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> to <picture><source srcset="form_2560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0$" src="form_2560.png"/></picture> by submitting the negative of the gradient, and adding the right-hand side contribution by submitting the value <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture>. We must be sure to use <code>read_dof_values_plain()</code> for evaluating <picture><source srcset="form_2560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0$" src="form_2560.png"/></picture> as <code>read_dof_values()</code> would set all Dirichlet values to zero.</p>
+<p>This function has two parts in the integration loop: applying the negative of matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> to <picture><source srcset="form_2649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0$" src="form_2649.png"/></picture> by submitting the negative of the gradient, and adding the right-hand side contribution by submitting the value <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture>. We must be sure to use <code>read_dof_values_plain()</code> for evaluating <picture><source srcset="form_2649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0$" src="form_2649.png"/></picture> as <code>read_dof_values()</code> would set all Dirichlet values to zero.</p>
 <p>Finally, the system_rhs vector is of type LA::MPI::Vector, but the <a class="el" href="classMatrixFree.html">MatrixFree</a> class only work for <a class="el" href="classLinearAlgebra_1_1distributed_1_1Vector.html">LinearAlgebra::distributed::Vector</a>. Therefore we must compute the right-hand side using <a class="el" href="classMatrixFree.html">MatrixFree</a> functionality and then use the functions in the <code>ChangeVectorType</code> namespace to copy it to the correct type.</p>
 <div class="fragment"><div class="line">  <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim, <span class="keywordtype">int</span> degree&gt;</div>
 <div class="line">  <span class="keywordtype">void</span> LaplaceProblem&lt;dim, degree&gt;::assemble_rhs()</div>
@@ -1452,7 +1452,7 @@
 <div class="ttc" id="agroup__Iterators_html_ga6b8bbcafed8847f3030ea30c6990eb2d"><div class="ttname"><a href="group__Iterators.html#href_anchor">DoFHandler::active_cell_iterator</a></div><div class="ttdeci">typename ActiveSelector::active_cell_iterator active_cell_iterator</div><div class="ttdef"><b>Definition</b> <a href="dof__handler_8h_source.html#href_anchor">dof_handler.h:441</a></div></div>
 <div class="ttc" id="agroup__feaccess_html_gaa94b67d2fdcc390690c523f28019e52f"><div class="ttname"><a href="group__feaccess.html#href_anchor">UpdateFlags</a></div><div class="ttdeci">UpdateFlags</div><div class="ttdef"><b>Definition</b> <a href="fe__update__flags_8h_source.html#href_anchor">fe_update_flags.h:65</a></div></div>
 <div class="ttc" id="anamespacenumbers_html"><div class="ttname"><a href="namespacenumbers.html">numbers</a></div><div class="ttdef"><b>Definition</b> <a href="numbers_8h_source.html#href_anchor">numbers.h:230</a></div></div>
-</div><!-- fragment --><p>Assembler for cell residual <picture><source srcset="form_5586_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^2 \| f + \epsilon \triangle u \|_K^2$" src="form_5586.png"/></picture></p>
+</div><!-- fragment --><p>Assembler for cell residual <picture><source srcset="form_5527_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^2 \| f + \epsilon \triangle u \|_K^2$" src="form_5527.png"/></picture></p>
 <div class="fragment"><div class="line">    <span class="keyword">auto</span> cell_worker = [&amp;](<span class="keyword">const</span> Iterator &amp;  cell,</div>
 <div class="line">                           ScratchData&lt;dim&gt; &amp;scratch_data,</div>
 <div class="line">                           CopyData &amp;        copy_data) {</div>
@@ -1482,8 +1482,8 @@
 <div class="line">  </div>
 <div class="ttc" id="aclassFEValues_html_acc8fe9d042c6b5e5da89858400feb24f"><div class="ttname"><a href="classFEValues.html#href_anchor">FEValues::reinit</a></div><div class="ttdeci">void reinit(const TriaIterator&lt; DoFCellAccessor&lt; dim, spacedim, level_dof_access &gt; &gt; &amp;cell)</div></div>
 <div class="ttc" id="asymmetric__tensor_8h_html_a82808d9c285700b167c758f42c79e833"><div class="ttname"><a href="symmetric__tensor_8h.html#href_anchor">trace</a></div><div class="ttdeci">DEAL_II_HOST constexpr Number trace(const SymmetricTensor&lt; 2, dim2, Number &gt; &amp;)</div></div>
-</div><!-- fragment --><p>Assembler for face term <picture><source srcset="form_5587_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sum_F h_F \| \jump{\epsilon \nabla u \cdot n}
-   \|_F^2$" src="form_5587.png"/></picture></p>
+</div><!-- fragment --><p>Assembler for face term <picture><source srcset="form_5528_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sum_F h_F \| \jump{\epsilon \nabla u \cdot n}
+   \|_F^2$" src="form_5528.png"/></picture></p>
 <div class="fragment"><div class="line">    <span class="keyword">auto</span> face_worker = [&amp;](<span class="keyword">const</span> Iterator &amp;    cell,</div>
 <div class="line">                           <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;f,</div>
 <div class="line">                           <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;sf,</div>
@@ -1860,12 +1860,12 @@
 </div><!-- fragment --><p> Here, the timing of the <code>solve()</code> function is split up in 3 parts: setting up the multigrid preconditioner, execution of a single multigrid V-cycle, and the CG solver. The V-cycle that is timed is unnecessary for the overall solve and only meant to give an insight at the different costs for AMG and GMG. Also it should be noted that when using the AMG solver, "Workload imbalance" is not included in the output since the hierarchy of coarse meshes is not required.</p>
 <p>All results in this section are gathered on Intel Xeon Platinum 8280 (Cascade Lake) nodes which have 56 cores and 192GB per node and support AVX-512 instructions, allowing for vectorization over 8 doubles (vectorization used only in the matrix-free computations). The code is compiled using gcc 7.1.0 with intel-mpi 17.0.3. Trilinos 12.10.1 is used for the matrix-based GMG/AMG computations.</p>
 <p>We can then gather a variety of information by calling the program with the input files that are provided in the directory in which <a class="el" href="step_50.html">step-50</a> is located. Using these, and adjusting the number of mesh refinement steps, we can produce information about how well the program scales.</p>
-<p>The following table gives weak scaling timings for this program on up to 256M DoFs and 7,168 processors. (Recall that weak scaling keeps the number of degrees of freedom per processor constant while increasing the number of processors; i.e., it considers larger and larger problems.) Here, <picture><source srcset="form_5510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5510.png"/></picture> is the partition efficiency from the introduction (also equal to 1.0/workload imbalance), "Setup" is a combination of setup, setup multigrid, assemble, and assemble multigrid from the timing blocks, and "Prec" is the preconditioner setup. Ideally all times would stay constant over each problem size for the individual solvers, but since the partition efficiency decreases from 0.371 to 0.161 from largest to smallest problem size, we expect to see an approximately <picture><source srcset="form_5610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0.371/0.161=2.3$" src="form_5610.png"/></picture> times increase in timings for GMG. This is, in fact, pretty close to what we really get:</p>
+<p>The following table gives weak scaling timings for this program on up to 256M DoFs and 7,168 processors. (Recall that weak scaling keeps the number of degrees of freedom per processor constant while increasing the number of processors; i.e., it considers larger and larger problems.) Here, <picture><source srcset="form_5508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5508.png"/></picture> is the partition efficiency from the introduction (also equal to 1.0/workload imbalance), "Setup" is a combination of setup, setup multigrid, assemble, and assemble multigrid from the timing blocks, and "Prec" is the preconditioner setup. Ideally all times would stay constant over each problem size for the individual solvers, but since the partition efficiency decreases from 0.371 to 0.161 from largest to smallest problem size, we expect to see an approximately <picture><source srcset="form_5529_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0.371/0.161=2.3$" src="form_5529.png"/></picture> times increase in timings for GMG. This is, in fact, pretty close to what we really get:</p>
 <table align="center" class="doxtable">
 <tr>
 <th colspan="4"></th><th></th><th colspan="4">MF-GMG </th><th></th><th colspan="4">MB-GMG </th><th></th><th colspan="4">AMG  </th></tr>
 <tr>
-<th align="right">Procs </th><th align="right">Cycle </th><th align="right">DoFs </th><th align="right"><picture><source srcset="form_5510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5510.png"/></picture> </th><th></th><th align="right">Setup </th><th align="right">Prec </th><th align="right">Solve </th><th align="right">Total </th><th></th><th align="right">Setup </th><th align="right">Prec </th><th align="right">Solve </th><th align="right">Total </th><th></th><th align="right">Setup </th><th align="right">Prec </th><th align="right">Solve </th><th align="right">Total  </th></tr>
+<th align="right">Procs </th><th align="right">Cycle </th><th align="right">DoFs </th><th align="right"><picture><source srcset="form_5508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5508.png"/></picture> </th><th></th><th align="right">Setup </th><th align="right">Prec </th><th align="right">Solve </th><th align="right">Total </th><th></th><th align="right">Setup </th><th align="right">Prec </th><th align="right">Solve </th><th align="right">Total </th><th></th><th align="right">Setup </th><th align="right">Prec </th><th align="right">Solve </th><th align="right">Total  </th></tr>
 <tr>
 <td align="right">112 </td><td align="right">13 </td><td align="right">4M </td><td align="right">0.37 </td><td></td><td align="right">0.742 </td><td align="right">0.393 </td><td align="right">0.200 </td><td align="right">1.335 </td><td></td><td align="right">1.714 </td><td align="right">2.934 </td><td align="right">0.716 </td><td align="right">5.364 </td><td></td><td align="right">1.544 </td><td align="right">0.456 </td><td align="right">1.150 </td><td align="right">3.150  </td></tr>
 <tr>
@@ -1875,8 +1875,8 @@
 <tr>
 <td align="right">7,168 </td><td align="right">19 </td><td align="right">256M </td><td align="right">0.16 </td><td></td><td align="right">1.214 </td><td align="right">0.893 </td><td align="right">0.521 </td><td align="right">2.628 </td><td></td><td align="right">2.386 </td><td align="right">7.260 </td><td align="right">2.560 </td><td align="right">12.206 </td><td></td><td align="right">1.844 </td><td align="right">1.010 </td><td align="right">1.890 </td><td align="right">4.744  </td></tr>
 </table>
-<p>On the other hand, the algebraic multigrid in the last set of columns is relatively unaffected by the increasing imbalance of the mesh hierarchy (because it doesn't use the mesh hierarchy) and the growth in time is rather driven by other factors that are well documented in the literature (most notably that the algorithmic complexity of some parts of algebraic multigrid methods appears to be <picture><source srcset="form_5612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N
-\log N)$" src="form_5612.png"/></picture> instead of <picture><source srcset="form_183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_183.png"/></picture> for geometric multigrid).</p>
+<p>On the other hand, the algebraic multigrid in the last set of columns is relatively unaffected by the increasing imbalance of the mesh hierarchy (because it doesn't use the mesh hierarchy) and the growth in time is rather driven by other factors that are well documented in the literature (most notably that the algorithmic complexity of some parts of algebraic multigrid methods appears to be <picture><source srcset="form_5530_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N
+\log N)$" src="form_5530.png"/></picture> instead of <picture><source srcset="form_157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_157.png"/></picture> for geometric multigrid).</p>
 <p>The upshort of the table above is that the matrix-free geometric multigrid method appears to be the fastest approach to solving this equation if not by a huge margin. Matrix-based methods, on the other hand, are consistently the worst.</p>
 <p>The following figure provides strong scaling results for each method, i.e., we solve the same problem on more and more processors. Specifically, we consider the problems after 16 mesh refinement cycles (32M DoFs) and 19 cycles (256M DoFs), on between 56 to 28,672 processors:</p>
 <p><img src="https://www.dealii.org/images/steps/developer/step-50-strong-scaling.png" alt="" width="600px" class="inline"/></p>
@@ -1886,7 +1886,7 @@
 <p>The finite element degree is currently hard-coded as 2, see the template arguments of the main class. It is easy to change. To test, it would be interesting to switch to a test problem with a reference solution. This way, you can compare error rates.</p>
 <p><a class="anchor" id="Coarsesolver"></a></p><h4>Coarse solver </h4>
 <p>A more interesting example would involve a more complicated coarse mesh (see <a class="el" href="step_49.html">step-49</a> for inspiration). The issue in that case is that the coarsest level of the mesh hierarchy is actually quite large, and one would have to think about ways to solve the coarse level problem efficiently. (This is not an issue for algebraic multigrid methods because they would just continue to build coarser and coarser levels of the matrix, regardless of their geometric origin.)</p>
-<p>In the program here, we simply solve the coarse level problem with a Conjugate Gradient method without any preconditioner. That is acceptable if the coarse problem is really small &ndash; for example, if the coarse mesh had a single cell, then the coarse mesh problems has a <picture><source srcset="form_5618_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$9\times 9$" src="form_5618.png"/></picture> matrix in 2d, and a <picture><source srcset="form_5619_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$27\times 27$" src="form_5619.png"/></picture> matrix in 3d; for the coarse mesh we use on the <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture>-shaped domain of the current program, these sizes are <picture><source srcset="form_5620_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$21\times 21$" src="form_5620.png"/></picture> in 2d and <picture><source srcset="form_5621_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$117\times 117$" src="form_5621.png"/></picture> in 3d. But if the coarse mesh consists of hundreds or thousands of cells, this approach will no longer work and might start to dominate the overall run-time of each V-cycle. A common approach is then to solve the coarse mesh problem using an algebraic multigrid preconditioner; this would then, however, require assembling the coarse matrix (even for the matrix-free version) as input to the AMG implementation.</p>
+<p>In the program here, we simply solve the coarse level problem with a Conjugate Gradient method without any preconditioner. That is acceptable if the coarse problem is really small &ndash; for example, if the coarse mesh had a single cell, then the coarse mesh problems has a <picture><source srcset="form_5531_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$9\times 9$" src="form_5531.png"/></picture> matrix in 2d, and a <picture><source srcset="form_5532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$27\times 27$" src="form_5532.png"/></picture> matrix in 3d; for the coarse mesh we use on the <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture>-shaped domain of the current program, these sizes are <picture><source srcset="form_5533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$21\times 21$" src="form_5533.png"/></picture> in 2d and <picture><source srcset="form_5534_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$117\times 117$" src="form_5534.png"/></picture> in 3d. But if the coarse mesh consists of hundreds or thousands of cells, this approach will no longer work and might start to dominate the overall run-time of each V-cycle. A common approach is then to solve the coarse mesh problem using an algebraic multigrid preconditioner; this would then, however, require assembling the coarse matrix (even for the matrix-free version) as input to the AMG implementation.</p>
 <p><a class="anchor" id="PlainProg"></a> </p><h1>The plain program</h1>
 <div class="fragment"><div class="line"><span class="comment">/* ---------------------------------------------------------------------</span></div>
 <div class="line"><span class="comment"> *</span></div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_51.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_51.html	2024-03-17 21:57:47.327258287 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_51.html	2024-03-17 21:57:47.327258287 +0000
@@ -157,7 +157,7 @@
 <p><a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p>This tutorial program presents the implementation of a hybridizable discontinuous Galkerin method for the convection-diffusion equation.</p>
 <p><a class="anchor" id="HybridizablediscontinuousGalerkinmethods"></a></p><h3>Hybridizable discontinuous Galerkin methods </h3>
-<p>One common argument against the use of discontinuous Galerkin elements is the large number of globally coupled degrees of freedom that one must solve in an implicit system. This is because, unlike continuous finite elements, in typical discontinuous elements there is one degree of freedom at each vertex <em>for each of the adjacent elements</em>, rather than just one, and similarly for edges and faces. As an example of how fast the number of unknowns grows, consider the <a class="el" href="classFE__DGPMonomial.html">FE_DGPMonomial</a> basis: each scalar solution component is represented by polynomials of degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> with <picture><source srcset="form_5635_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1/\text{dim}!) \prod_{i=1}^{\text{dim}}(p+i)$" src="form_5635.png"/></picture> degrees of freedom per element. Typically, all degrees of freedom in an element are coupled to all of the degrees of freedom in the adjacent elements. The resulting discrete equations yield very large linear systems very quickly, especially for systems of equations in 2 or 3 dimensions.</p>
+<p>One common argument against the use of discontinuous Galerkin elements is the large number of globally coupled degrees of freedom that one must solve in an implicit system. This is because, unlike continuous finite elements, in typical discontinuous elements there is one degree of freedom at each vertex <em>for each of the adjacent elements</em>, rather than just one, and similarly for edges and faces. As an example of how fast the number of unknowns grows, consider the <a class="el" href="classFE__DGPMonomial.html">FE_DGPMonomial</a> basis: each scalar solution component is represented by polynomials of degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> with <picture><source srcset="form_5535_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1/\text{dim}!) \prod_{i=1}^{\text{dim}}(p+i)$" src="form_5535.png"/></picture> degrees of freedom per element. Typically, all degrees of freedom in an element are coupled to all of the degrees of freedom in the adjacent elements. The resulting discrete equations yield very large linear systems very quickly, especially for systems of equations in 2 or 3 dimensions.</p>
 <p><a class="anchor" id="Reducingthesizeofthelinearsystem"></a></p><h4>Reducing the size of the linear system </h4>
 <p>To alleviate the computational cost of solving such large linear systems, the hybridizable discontinuous Galerkin (HDG) methodology was introduced by Cockburn and co-workers (see the references in the recent HDG overview article by Nguyen and Peraire <b>[Ngu2012]</b>).</p>
 <p>The HDG method achieves this goal by formulating the mathematical problem using Dirichlet-to-Neumann mappings. The partial differential equations are first written as a first order system, and each field is then discretized via a DG method. At this point, the single-valued "trace" values on the skeleton of the mesh, i.e., element faces, are taken to be independent unknown quantities. This yields unknowns in the discrete formulation that fall into two categories:</p><ul>
@@ -173,83 +173,83 @@
 <p><a class="anchor" id="RelationwithStaticCondensation"></a></p><h4>Relation with Static Condensation </h4>
 <p>The above procedure also has a linear algebra interpretation&mdash;referred to as <em>static condensation</em>&mdash;that was exploited to reduce the size of the global linear system by Guyan in the context of continuous Finite Elements <b>[G65]</b>, and by Fraeijs de Veubeke for mixed methods <b>[F65]</b>. In the latter case (mixed formulation), the system reduction was achieved through the use of discontinuous fluxes combined with the introduction of an additional auxiliary <em>hybrid</em> variable that approximates the trace of the unknown at the boundary of every element. This procedure became known as hybridization and&mdash;by analogy&mdash;is the reason why the local discontinuous Galerkin method introduced by Cockburn, Gopalakrishnan, and Lazarov in 2009 <b>[CGL2009]</b>, and subsequently developed by their collaborators, eventually came to be known as the <em>hybridizable discontinuous Galerkin</em> (HDG) method.</p>
 <p>Let us write the complete linear system associated to the HDG problem as a block system with the discrete DG (cell interior) variables <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> as first block and the skeleton (face) variables <picture><source srcset="form_4803_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Lambda$" src="form_4803.png"/></picture> as the second block:  </p><p class="formulaDsp">
-<picture><source srcset="form_5636_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_5536_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \begin{pmatrix} A &amp; B \\ C &amp; D \end{pmatrix}
 \begin{pmatrix} U \\ \Lambda \end{pmatrix}
 =
 \begin{pmatrix} F \\ G \end{pmatrix}.
-\end{eqnarray*}" src="form_5636.png"/></picture>
+\end{eqnarray*}" src="form_5536.png"/></picture>
 </p>
 <p> Our aim is now to eliminate the <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> block with a Schur complement approach similar to <a class="el" href="step_20.html">step-20</a>, which results in the following two steps:  </p><p class="formulaDsp">
-<picture><source srcset="form_5637_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_5537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 (D - C A^{-1} B) \Lambda &amp;=&amp; G - C A^{-1} F, \\
 A U &amp;=&amp; F - B \Lambda.
-\end{eqnarray*}" src="form_5637.png"/></picture>
+\end{eqnarray*}" src="form_5537.png"/></picture>
 </p>
-<p> The point is that the presence of <picture><source srcset="form_1914_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^{-1}$" src="form_1914.png"/></picture> is not a problem because <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is a block diagonal matrix where each block corresponds to one cell and is therefore easy enough to invert. The coupling to other cells is introduced by the matrices <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> and <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> over the skeleton variable. The block-diagonality of <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> and the structure in <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> and <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> allow us to invert the matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> element by element (the local solution of the Dirichlet problem) and subtract <picture><source srcset="form_5638_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$CA^{-1}B$" src="form_5638.png"/></picture> from <picture><source srcset="form_1479_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1479.png"/></picture>. The steps in the Dirichlet-to-Neumann map concept hence correspond to </p><ol>
+<p> The point is that the presence of <picture><source srcset="form_1914_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^{-1}$" src="form_1914.png"/></picture> is not a problem because <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is a block diagonal matrix where each block corresponds to one cell and is therefore easy enough to invert. The coupling to other cells is introduced by the matrices <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> and <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> over the skeleton variable. The block-diagonality of <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> and the structure in <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> and <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> allow us to invert the matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> element by element (the local solution of the Dirichlet problem) and subtract <picture><source srcset="form_5538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$CA^{-1}B$" src="form_5538.png"/></picture> from <picture><source srcset="form_1480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1480.png"/></picture>. The steps in the Dirichlet-to-Neumann map concept hence correspond to </p><ol>
 <li>
-constructing the Schur complement matrix <picture><source srcset="form_5639_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D-C A^{-1} B$" src="form_5639.png"/></picture> and right hand side <picture><source srcset="form_5640_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G - C A^{-1} F$" src="form_5640.png"/></picture> <em>locally on each cell</em> and inserting the contribution into the global trace matrix in the usual way, </li>
+constructing the Schur complement matrix <picture><source srcset="form_5539_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D-C A^{-1} B$" src="form_5539.png"/></picture> and right hand side <picture><source srcset="form_5540_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G - C A^{-1} F$" src="form_5540.png"/></picture> <em>locally on each cell</em> and inserting the contribution into the global trace matrix in the usual way, </li>
 <li>
 solving the Schur complement system for <picture><source srcset="form_4803_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Lambda$" src="form_4803.png"/></picture>, and </li>
 <li>
 solving for <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> using the second equation, given <picture><source srcset="form_4803_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Lambda$" src="form_4803.png"/></picture>. </li>
 </ol>
 <p><a class="anchor" id="Solutionqualityandratesofconvergence"></a></p><h4>Solution quality and rates of convergence</h4>
-<p>Another criticism of traditional DG methods is that the approximate fluxes converge suboptimally. The local HDG solutions can be shown to converge as <picture><source srcset="form_5192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{O}(h^{p+1})$" src="form_5192.png"/></picture>, i.e., at optimal order. Additionally, a super-convergence property can be used to post-process a new approximate solution that converges at the rate <picture><source srcset="form_5641_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{O}(h^{p+2})$" src="form_5641.png"/></picture>.</p>
+<p>Another criticism of traditional DG methods is that the approximate fluxes converge suboptimally. The local HDG solutions can be shown to converge as <picture><source srcset="form_5431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{O}(h^{p+1})$" src="form_5431.png"/></picture>, i.e., at optimal order. Additionally, a super-convergence property can be used to post-process a new approximate solution that converges at the rate <picture><source srcset="form_5541_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{O}(h^{p+2})$" src="form_5541.png"/></picture>.</p>
 <p><a class="anchor" id="Alternativeapproaches"></a></p><h4>Alternative approaches </h4>
 <p>The hybridizable discontinuous Galerkin method is only one way in which the problems of the discontinuous Galerkin method can be addressed. Another idea is what is called the "weak Galerkin" method. It is explored in <a class="el" href="step_61.html">step-61</a>.</p>
 <p><a class="anchor" id="HDGappliedtotheconvectiondiffusionproblem"></a></p><h3>HDG applied to the convection-diffusion problem </h3>
 <p>The HDG formulation used for this example is taken from <br  />
  <b> N.C. Nguyen, J. Peraire, B. Cockburn: <em>An implicit high-order hybridizable discontinuous Galerkin method for linear convection–diffusion equations</em>, Journal of Computational <a class="el" href="namespacePhysics.html">Physics</a>, 2009, 228:9, 3232-3254. <a href="http://dx.doi.org/10.1016/j.jcp.2009.01.030">[DOI]</a> </b></p>
-<p>We consider the convection-diffusion equation over the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> with Dirichlet boundary <picture><source srcset="form_5642_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega_D$" src="form_5642.png"/></picture> and Neumann boundary <picture><source srcset="form_5643_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega_N$" src="form_5643.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_5644_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>We consider the convection-diffusion equation over the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> with Dirichlet boundary <picture><source srcset="form_5542_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega_D$" src="form_5542.png"/></picture> and Neumann boundary <picture><source srcset="form_5543_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega_N$" src="form_5543.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_5544_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
         \nabla \cdot (\mathbf{c} u) - \nabla \cdot (\kappa \nabla u) &amp;=&amp; f,
         \quad \text{ in } \Omega, \\
         u &amp;=&amp; g_D, \quad \text{ on } \partial \Omega_D, \\
         (\mathbf{c} u - \kappa \nabla u)\cdot \mathbf{n} &amp;=&amp; g_N,
         \quad \text{ on }  \partial \Omega_N.
-\end{eqnarray*}" src="form_5644.png"/></picture>
+\end{eqnarray*}" src="form_5544.png"/></picture>
 </p>
-<p>Introduce the auxiliary variable <picture><source srcset="form_5645_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{q}=-\kappa \nabla u$" src="form_5645.png"/></picture> and rewrite the above equation as the first order system:  </p><p class="formulaDsp">
-<picture><source srcset="form_5646_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>Introduce the auxiliary variable <picture><source srcset="form_5545_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{q}=-\kappa \nabla u$" src="form_5545.png"/></picture> and rewrite the above equation as the first order system:  </p><p class="formulaDsp">
+<picture><source srcset="form_5546_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \mathbf{q} + \kappa \nabla u &amp;=&amp; 0, \quad \text{ in } \Omega, \\
   \nabla \cdot (\mathbf{c} u + \mathbf{q}) &amp;=&amp; f, \quad \text{ in } \Omega, \\
   u &amp;=&amp; g_D, \quad \text{ on } \partial \Omega_D, \\
   (\mathbf{q} + \mathbf{c}u)\cdot\mathbf{n}  &amp;=&amp; g_N,
         \quad \text{ on }  \partial \Omega_N.
-\end{eqnarray*}" src="form_5646.png"/></picture>
+\end{eqnarray*}" src="form_5546.png"/></picture>
 </p>
-<p>We multiply these equations by the weight functions <picture><source srcset="form_4973_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}, w$" src="form_4973.png"/></picture> and integrate by parts over every element <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to obtain:  </p><p class="formulaDsp">
-<picture><source srcset="form_5647_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>We multiply these equations by the weight functions <picture><source srcset="form_4957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}, w$" src="form_4957.png"/></picture> and integrate by parts over every element <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to obtain:  </p><p class="formulaDsp">
+<picture><source srcset="form_5547_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (\mathbf{v}, \kappa^{-1} \mathbf{q})_K - (\nabla\cdot\mathbf{v}, u)_K
     + \left&lt;\mathbf{v}\cdot\mathbf{n}, {\hat{u}}\right&gt;_{\partial K} &amp;=&amp; 0, \\
   - (\nabla w, \mathbf{c} u + \mathbf{q})_K
     + \left&lt;w, (\widehat{\mathbf{c} u}+{\hat{\mathbf{q}}})\cdot\mathbf{n}\right&gt;_{\partial K}
     &amp;=&amp; (w,f)_K.
-\end{eqnarray*}" src="form_5647.png"/></picture>
+\end{eqnarray*}" src="form_5547.png"/></picture>
 </p>
-<p>The terms decorated with a hat denote the numerical traces (also commonly referred to as numerical fluxes). They are approximations to the interior values on the boundary of the element. To ensure conservation, these terms must be single-valued on any given element edge <picture><source srcset="form_3117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial K$" src="form_3117.png"/></picture> even though, with discontinuous shape functions, there may of course be multiple values coming from the cells adjacent to an interface. We eliminate the numerical trace <picture><source srcset="form_5648_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf{q}}$" src="form_5648.png"/></picture> by using traces of the form:  </p><p class="formulaDsp">
-<picture><source srcset="form_5649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>The terms decorated with a hat denote the numerical traces (also commonly referred to as numerical fluxes). They are approximations to the interior values on the boundary of the element. To ensure conservation, these terms must be single-valued on any given element edge <picture><source srcset="form_3193_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial K$" src="form_3193.png"/></picture> even though, with discontinuous shape functions, there may of course be multiple values coming from the cells adjacent to an interface. We eliminate the numerical trace <picture><source srcset="form_5548_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{\mathbf{q}}$" src="form_5548.png"/></picture> by using traces of the form:  </p><p class="formulaDsp">
+<picture><source srcset="form_5549_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \widehat{\mathbf{c} u}+\hat{\mathbf{q}} = \mathbf{c}\hat{u} + \mathbf{q}
   + \tau(u - \hat{u})\mathbf{n} \quad \text{ on } \partial K.
-\end{eqnarray*}" src="form_5649.png"/></picture>
+\end{eqnarray*}" src="form_5549.png"/></picture>
 </p>
-<p>The variable <picture><source srcset="form_5650_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat {u}$" src="form_5650.png"/></picture> is introduced as an additional independent variable and is the one for which we finally set up a globally coupled linear system. As mentioned above, it is defined on the element faces and discontinuous from one face to another wherever faces meet (at vertices in 2d, and at edges and vertices in 3d). Values for <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> and <picture><source srcset="form_5651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{q}$" src="form_5651.png"/></picture> appearing in the numerical trace function are taken to be the cell's interior solution restricted to the boundary <picture><source srcset="form_3117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial K$" src="form_3117.png"/></picture>.</p>
-<p>The local stabilization parameter <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture> has effects on stability and accuracy of HDG solutions; see the literature for a further discussion. A stabilization parameter of unity is reported to be the choice which gives best results. A stabilization parameter <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture> that tends to infinity prohibits jumps in the solution over the element boundaries, making the HDG solution approach the approximation with continuous finite elements. In the program below, we choose the stabilization parameter as  </p><p class="formulaDsp">
-<picture><source srcset="form_5652_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>The variable <picture><source srcset="form_5550_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat {u}$" src="form_5550.png"/></picture> is introduced as an additional independent variable and is the one for which we finally set up a globally coupled linear system. As mentioned above, it is defined on the element faces and discontinuous from one face to another wherever faces meet (at vertices in 2d, and at edges and vertices in 3d). Values for <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> and <picture><source srcset="form_5551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{q}$" src="form_5551.png"/></picture> appearing in the numerical trace function are taken to be the cell's interior solution restricted to the boundary <picture><source srcset="form_3193_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial K$" src="form_3193.png"/></picture>.</p>
+<p>The local stabilization parameter <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture> has effects on stability and accuracy of HDG solutions; see the literature for a further discussion. A stabilization parameter of unity is reported to be the choice which gives best results. A stabilization parameter <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture> that tends to infinity prohibits jumps in the solution over the element boundaries, making the HDG solution approach the approximation with continuous finite elements. In the program below, we choose the stabilization parameter as  </p><p class="formulaDsp">
+<picture><source srcset="form_5552_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \tau = \frac{\kappa}{\ell} + |\mathbf{c} \cdot \mathbf{n}|
-\end{eqnarray*}" src="form_5652.png"/></picture>
+\end{eqnarray*}" src="form_5552.png"/></picture>
 </p>
-<p> where we set the diffusion <picture><source srcset="form_5653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa=1$" src="form_5653.png"/></picture> and the diffusion length scale to <picture><source srcset="form_5654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ell = \frac{1}{5}$" src="form_5654.png"/></picture>.</p>
-<p>The trace/skeleton variables in HDG methods are single-valued on element faces. As such, they must strongly represent the Dirichlet data on <picture><source srcset="form_5655_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega_D$" src="form_5655.png"/></picture>. This means that  </p><p class="formulaDsp">
-<picture><source srcset="form_5656_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<p> where we set the diffusion <picture><source srcset="form_5553_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa=1$" src="form_5553.png"/></picture> and the diffusion length scale to <picture><source srcset="form_5554_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\ell = \frac{1}{5}$" src="form_5554.png"/></picture>.</p>
+<p>The trace/skeleton variables in HDG methods are single-valued on element faces. As such, they must strongly represent the Dirichlet data on <picture><source srcset="form_5555_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega_D$" src="form_5555.png"/></picture>. This means that  </p><p class="formulaDsp">
+<picture><source srcset="form_5556_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   \hat{u}|_{\partial \Omega_D} = g_D,
-\end{equation*}" src="form_5656.png"/></picture>
+\end{equation*}" src="form_5556.png"/></picture>
 </p>
-<p> where the equal sign actually means an <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> projection of the boundary function <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> onto the space of the face variables (e.g. linear functions on the faces). This constraint is then applied to the skeleton variable <picture><source srcset="form_5657_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{u}$" src="form_5657.png"/></picture> using inhomogeneous constraints by the method <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::project_boundary_values</a>.</p>
-<p>Summing the elemental contributions across all elements in the triangulation, enforcing the normal component of the numerical flux, and integrating by parts on the equation weighted by <picture><source srcset="form_9_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_9.png"/></picture>, we arrive at the final form of the problem: Find <picture><source srcset="form_5658_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{q}_h, u_h, \hat{u}_h) \in
-\mathcal{V}_h^p \times \mathcal{W}_h^p \times \mathcal{M}_h^p$" src="form_5658.png"/></picture> such that  </p><p class="formulaDsp">
-<picture><source srcset="form_5659_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> where the equal sign actually means an <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> projection of the boundary function <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> onto the space of the face variables (e.g. linear functions on the faces). This constraint is then applied to the skeleton variable <picture><source srcset="form_5557_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{u}$" src="form_5557.png"/></picture> using inhomogeneous constraints by the method <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::project_boundary_values</a>.</p>
+<p>Summing the elemental contributions across all elements in the triangulation, enforcing the normal component of the numerical flux, and integrating by parts on the equation weighted by <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w$" src="form_6.png"/></picture>, we arrive at the final form of the problem: Find <picture><source srcset="form_5558_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{q}_h, u_h, \hat{u}_h) \in
+\mathcal{V}_h^p \times \mathcal{W}_h^p \times \mathcal{M}_h^p$" src="form_5558.png"/></picture> such that  </p><p class="formulaDsp">
+<picture><source srcset="form_5559_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   (\mathbf{v}, \kappa^{-1} \mathbf{q}_h)_{\mathcal{T}}
     - ( \nabla\cdot\mathbf{v}, u_h)_{\mathcal{T}}
     + \left&lt;\mathbf{v}\cdot\mathbf{n}, \hat{u}_h\right&gt;_{\partial\mathcal{T}}
@@ -270,66 +270,66 @@
     &amp;=
     \left&lt;\mu, g_N\right&gt;_{\partial\Omega_N},
     \quad &amp;&amp;\forall \mu \in \mathcal{M}_h^p.
-\end{align*}" src="form_5659.png"/></picture>
+\end{align*}" src="form_5559.png"/></picture>
 </p>
-<p>The unknowns <picture><source srcset="form_5660_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{q}_h, u_h)$" src="form_5660.png"/></picture> are referred to as local variables; they are represented as standard DG variables. The unknown <picture><source srcset="form_5661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{u}_h$" src="form_5661.png"/></picture> is the skeleton variable which has support on the codimension-1 surfaces (faces) of the mesh.</p>
-<p>We use the notation <picture><source srcset="form_5662_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\cdot, \cdot)_{\mathcal{T}} = \sum_K (\cdot, \cdot)_K$" src="form_5662.png"/></picture> to denote the sum of integrals over all cells and <picture><source srcset="form_5663_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left&lt;\cdot,
+<p>The unknowns <picture><source srcset="form_5560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{q}_h, u_h)$" src="form_5560.png"/></picture> are referred to as local variables; they are represented as standard DG variables. The unknown <picture><source srcset="form_5561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{u}_h$" src="form_5561.png"/></picture> is the skeleton variable which has support on the codimension-1 surfaces (faces) of the mesh.</p>
+<p>We use the notation <picture><source srcset="form_5562_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\cdot, \cdot)_{\mathcal{T}} = \sum_K (\cdot, \cdot)_K$" src="form_5562.png"/></picture> to denote the sum of integrals over all cells and <picture><source srcset="form_5563_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left&lt;\cdot,
 \cdot\right&gt;_{\partial \mathcal{T}} = \sum_K \left&lt;\cdot,
-\cdot\right&gt;_{\partial K}$" src="form_5663.png"/></picture> to denote integration over all faces of all cells, i.e., interior faces are visited twice, once from each side and with the corresponding normal vectors. When combining the contribution from both elements sharing a face, the above equation yields terms familiar from the DG method, with jumps of the solution over the cell boundaries.</p>
-<p>In the equation above, the space <picture><source srcset="form_5664_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal {W}_h^{p}$" src="form_5664.png"/></picture> for the scalar variable <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> is defined as the space of functions that are tensor product polynomials of degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> on each cell and discontinuous over the element boundaries <picture><source srcset="form_5665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal Q_{-p}$" src="form_5665.png"/></picture>, i.e., the space described by <code>FE_DGQ&lt;dim&gt;(p)</code>. The space for the gradient or flux variable <picture><source srcset="form_5666_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{q}_i$" src="form_5666.png"/></picture> is a vector element space where each component is a locally polynomial and discontinuous <picture><source srcset="form_5665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal Q_{-p}$" src="form_5665.png"/></picture>. In the code below, we collect these two local parts together in one <a class="el" href="classFESystem.html">FESystem</a> where the first <code>dim</code> components denote the gradient part and the last scalar component corresponds to the scalar variable. For the skeleton component <picture><source srcset="form_5661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{u}_h$" src="form_5661.png"/></picture>, we define a space that consists of discontinuous tensor product polynomials that live on the element faces, which in deal.II is implemented by the class <a class="el" href="classFE__FaceQ.html">FE_FaceQ</a>. This space is otherwise similar to <a class="el" href="classFE__DGQ.html">FE_DGQ</a>, i.e., the solution function is not continuous between two neighboring faces, see also the results section below for an illustration.</p>
+\cdot\right&gt;_{\partial K}$" src="form_5563.png"/></picture> to denote integration over all faces of all cells, i.e., interior faces are visited twice, once from each side and with the corresponding normal vectors. When combining the contribution from both elements sharing a face, the above equation yields terms familiar from the DG method, with jumps of the solution over the cell boundaries.</p>
+<p>In the equation above, the space <picture><source srcset="form_5564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal {W}_h^{p}$" src="form_5564.png"/></picture> for the scalar variable <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> is defined as the space of functions that are tensor product polynomials of degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> on each cell and discontinuous over the element boundaries <picture><source srcset="form_5565_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal Q_{-p}$" src="form_5565.png"/></picture>, i.e., the space described by <code>FE_DGQ&lt;dim&gt;(p)</code>. The space for the gradient or flux variable <picture><source srcset="form_5566_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{q}_i$" src="form_5566.png"/></picture> is a vector element space where each component is a locally polynomial and discontinuous <picture><source srcset="form_5565_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal Q_{-p}$" src="form_5565.png"/></picture>. In the code below, we collect these two local parts together in one <a class="el" href="classFESystem.html">FESystem</a> where the first <code>dim</code> components denote the gradient part and the last scalar component corresponds to the scalar variable. For the skeleton component <picture><source srcset="form_5561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{u}_h$" src="form_5561.png"/></picture>, we define a space that consists of discontinuous tensor product polynomials that live on the element faces, which in deal.II is implemented by the class <a class="el" href="classFE__FaceQ.html">FE_FaceQ</a>. This space is otherwise similar to <a class="el" href="classFE__DGQ.html">FE_DGQ</a>, i.e., the solution function is not continuous between two neighboring faces, see also the results section below for an illustration.</p>
 <p>In the weak form given above, we can note the following coupling patterns: </p><ol>
 <li>
-The matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> consists of local-local coupling terms. These arise when the local weighting functions <picture><source srcset="form_5667_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{v}, w)$" src="form_5667.png"/></picture> multiply the local solution terms <picture><source srcset="form_5660_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{q}_h, u_h)$" src="form_5660.png"/></picture>. Because the elements are discontinuous, <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is block diagonal. </li>
+The matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> consists of local-local coupling terms. These arise when the local weighting functions <picture><source srcset="form_5567_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{v}, w)$" src="form_5567.png"/></picture> multiply the local solution terms <picture><source srcset="form_5560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{q}_h, u_h)$" src="form_5560.png"/></picture>. Because the elements are discontinuous, <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is block diagonal. </li>
 <li>
-The matrix <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> represents the local-face coupling. These are the terms with weighting functions <picture><source srcset="form_5667_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{v}, w)$" src="form_5667.png"/></picture> multiplying the skeleton variable <picture><source srcset="form_5661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{u}_h$" src="form_5661.png"/></picture>. </li>
+The matrix <picture><source srcset="form_95_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B$" src="form_95.png"/></picture> represents the local-face coupling. These are the terms with weighting functions <picture><source srcset="form_5567_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{v}, w)$" src="form_5567.png"/></picture> multiplying the skeleton variable <picture><source srcset="form_5561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{u}_h$" src="form_5561.png"/></picture>. </li>
 <li>
-The matrix <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> represents the face-local coupling, which involves the weighting function <picture><source srcset="form_3066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_3066.png"/></picture> multiplying the local solutions <picture><source srcset="form_5660_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{q}_h, u_h)$" src="form_5660.png"/></picture>. </li>
+The matrix <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> represents the face-local coupling, which involves the weighting function <picture><source srcset="form_2994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_2994.png"/></picture> multiplying the local solutions <picture><source srcset="form_5560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{q}_h, u_h)$" src="form_5560.png"/></picture>. </li>
 <li>
-The matrix <picture><source srcset="form_1479_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1479.png"/></picture> is the face-face coupling; terms involve both <picture><source srcset="form_3066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_3066.png"/></picture> and <picture><source srcset="form_5661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{u}_h$" src="form_5661.png"/></picture>. </li>
+The matrix <picture><source srcset="form_1480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1480.png"/></picture> is the face-face coupling; terms involve both <picture><source srcset="form_2994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_2994.png"/></picture> and <picture><source srcset="form_5561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{u}_h$" src="form_5561.png"/></picture>. </li>
 </ol>
 <p><a class="anchor" id="Postprocessingandsuperconvergence"></a></p><h4>Post-processing and super-convergence </h4>
-<p>One special feature of the HDG methods is that they typically allow for constructing an enriched solution that gains accuracy. This post-processing takes the HDG solution in an element-by-element fashion and combines it such that one can get <picture><source srcset="form_5668_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O(h^{p+2})$" src="form_5668.png"/></picture> order of accuracy when using polynomials of degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>. For this to happen, there are two necessary ingredients: </p><ol>
+<p>One special feature of the HDG methods is that they typically allow for constructing an enriched solution that gains accuracy. This post-processing takes the HDG solution in an element-by-element fashion and combines it such that one can get <picture><source srcset="form_5568_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O(h^{p+2})$" src="form_5568.png"/></picture> order of accuracy when using polynomials of degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>. For this to happen, there are two necessary ingredients: </p><ol>
 <li>
-The computed solution gradient <picture><source srcset="form_5669_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{q}_h$" src="form_5669.png"/></picture> converges at optimal rate, i.e., <picture><source srcset="form_5192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{O}(h^{p+1})$" src="form_5192.png"/></picture>. </li>
+The computed solution gradient <picture><source srcset="form_5569_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{q}_h$" src="form_5569.png"/></picture> converges at optimal rate, i.e., <picture><source srcset="form_5431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{O}(h^{p+1})$" src="form_5431.png"/></picture>. </li>
 <li>
-The cell-wise average of the scalar part of the solution, <picture><source srcset="form_5670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{(1,u_h)_K}{\text{vol}(K)}$" src="form_5670.png"/></picture>, super-converges at rate <picture><source srcset="form_5641_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{O}(h^{p+2})$" src="form_5641.png"/></picture>. </li>
+The cell-wise average of the scalar part of the solution, <picture><source srcset="form_5570_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac{(1,u_h)_K}{\text{vol}(K)}$" src="form_5570.png"/></picture>, super-converges at rate <picture><source srcset="form_5541_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{O}(h^{p+2})$" src="form_5541.png"/></picture>. </li>
 </ol>
-<p>We now introduce a new variable <picture><source srcset="form_5671_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h^* \in \mathcal{V}_h^{p+1}$" src="form_5671.png"/></picture>, which we find by minimizing the expression <picture><source srcset="form_5672_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\kappa \nabla u_h^* + \mathbf{q}_h|^2$" src="form_5672.png"/></picture> over the cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> under the constraint <picture><source srcset="form_5673_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(1, u_h^*\right)_K = \left(1,
-u_h\right)_K$" src="form_5673.png"/></picture>. The constraint is necessary because the minimization functional does not determine the constant part of <picture><source srcset="form_5674_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h^*$" src="form_5674.png"/></picture>. This translates to the following system of equations:  </p><p class="formulaDsp">
-<picture><source srcset="form_5675_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>We now introduce a new variable <picture><source srcset="form_5571_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h^* \in \mathcal{V}_h^{p+1}$" src="form_5571.png"/></picture>, which we find by minimizing the expression <picture><source srcset="form_5572_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\kappa \nabla u_h^* + \mathbf{q}_h|^2$" src="form_5572.png"/></picture> over the cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> under the constraint <picture><source srcset="form_5573_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(1, u_h^*\right)_K = \left(1,
+u_h\right)_K$" src="form_5573.png"/></picture>. The constraint is necessary because the minimization functional does not determine the constant part of <picture><source srcset="form_5574_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h^*$" src="form_5574.png"/></picture>. This translates to the following system of equations:  </p><p class="formulaDsp">
+<picture><source srcset="form_5575_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \left(1, u_h^*\right)_K &amp;=&amp; \left(1, u_h\right)_K\\
 \left(\nabla w_h^*, \kappa \nabla u_h^*\right)_K &amp;=&amp;
 -\left(\nabla w_h^*, \mathbf{q}_h\right)_K
 \quad \text{for all } w_h^* \in \mathcal Q^{p+1}.
-\end{eqnarray*}" src="form_5675.png"/></picture>
+\end{eqnarray*}" src="form_5575.png"/></picture>
 </p>
-<p>Since we test by the whole set of basis functions in the space of tensor product polynomials of degree <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture> in the second set of equations, this is an overdetermined system with one more equation than unknowns. We fix this in the code below by omitting one of these equations (since the rows in the Laplacian are linearly dependent when representing a constant function). As we will see below, this form of the post-processing gives the desired super-convergence result with rate <picture><source srcset="form_5676_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal {O}(h^{p+2})$" src="form_5676.png"/></picture>. It should be noted that there is some freedom in constructing <picture><source srcset="form_5674_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h^*$" src="form_5674.png"/></picture> and this minimization approach to extract the information from the gradient is not the only one. In particular, the post-processed solution defined here does not satisfy the convection-diffusion equation in any sense. As an alternative, the paper by Nguyen, Peraire and Cockburn cited above suggests another somewhat more involved formula for convection-diffusion that can also post-process the flux variable into an <picture><source srcset="form_5677_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H(\Omega,\mathrm{div})$" src="form_5677.png"/></picture>-conforming variant and better represents the local convection-diffusion operator when the diffusion is small. We leave the implementation of a more sophisticated post-processing as a possible extension to the interested reader.</p>
+<p>Since we test by the whole set of basis functions in the space of tensor product polynomials of degree <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture> in the second set of equations, this is an overdetermined system with one more equation than unknowns. We fix this in the code below by omitting one of these equations (since the rows in the Laplacian are linearly dependent when representing a constant function). As we will see below, this form of the post-processing gives the desired super-convergence result with rate <picture><source srcset="form_5576_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal {O}(h^{p+2})$" src="form_5576.png"/></picture>. It should be noted that there is some freedom in constructing <picture><source srcset="form_5574_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h^*$" src="form_5574.png"/></picture> and this minimization approach to extract the information from the gradient is not the only one. In particular, the post-processed solution defined here does not satisfy the convection-diffusion equation in any sense. As an alternative, the paper by Nguyen, Peraire and Cockburn cited above suggests another somewhat more involved formula for convection-diffusion that can also post-process the flux variable into an <picture><source srcset="form_5577_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H(\Omega,\mathrm{div})$" src="form_5577.png"/></picture>-conforming variant and better represents the local convection-diffusion operator when the diffusion is small. We leave the implementation of a more sophisticated post-processing as a possible extension to the interested reader.</p>
 <p>Note that for vector-valued problems, the post-processing works similarly. One simply sets the constraint for the mean value of each vector component separately and uses the gradient as the main source of information.</p>
 <p><a class="anchor" id="Problemspecificdata"></a></p><h3>Problem specific data </h3>
-<p>For this tutorial program, we consider almost the same test case as in <a class="el" href="step_7.html">step-7</a>. The computational domain is <picture><source srcset="form_5678_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega \dealcoloneq [-1,1]^d$" src="form_5678.png"/></picture> and the exact solution corresponds to the one in <a class="el" href="step_7.html">step-7</a>, except for a scaling. We use the following source centers <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture> for the exponentials </p><ul>
+<p>For this tutorial program, we consider almost the same test case as in <a class="el" href="step_7.html">step-7</a>. The computational domain is <picture><source srcset="form_5578_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega \dealcoloneq [-1,1]^d$" src="form_5578.png"/></picture> and the exact solution corresponds to the one in <a class="el" href="step_7.html">step-7</a>, except for a scaling. We use the following source centers <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture> for the exponentials </p><ul>
 <li>
-1D: <picture><source srcset="form_5679_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x_i\}^1 = \{ -\frac{1}{3}, 0, \frac{1}{3} \}$" src="form_5679.png"/></picture>, </li>
+1D: <picture><source srcset="form_5579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x_i\}^1 = \{ -\frac{1}{3}, 0, \frac{1}{3} \}$" src="form_5579.png"/></picture>, </li>
 <li>
-2D: <picture><source srcset="form_5680_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\mathbf{x}_i\}^2 = \{ (-\frac{1}{2},\frac{1}{2}),
+2D: <picture><source srcset="form_5580_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\mathbf{x}_i\}^2 = \{ (-\frac{1}{2},\frac{1}{2}),
                                          (-\frac{1}{2},-\frac{1}{2}),
                                          (\frac{1}{2},-\frac{1}{2})
-                                   \}$" src="form_5680.png"/></picture>, </li>
+                                   \}$" src="form_5580.png"/></picture>, </li>
 <li>
-3D: <picture><source srcset="form_5681_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\mathbf{x}_i\}^3 = \{ (-\frac{1}{2},\frac{1}{2}, \frac{1}{4}),
+3D: <picture><source srcset="form_5581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\mathbf{x}_i\}^3 = \{ (-\frac{1}{2},\frac{1}{2}, \frac{1}{4}),
                                       (-\frac{3}{5},-\frac{1}{2}, -\frac{1}{8}),
                                       (\frac{1}{2},-\frac{1}{2}, \frac{1}{2})
/usr/share/doc/packages/dealii/doxygen/deal.II/step_52.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_52.html	2024-03-17 21:57:47.395258707 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_52.html	2024-03-17 21:57:47.395258707 +0000
@@ -140,119 +140,119 @@
 <p>This program shows how to use Runge-Kutta methods to solve a time-dependent problem. It solves a small variation of the heat equation discussed first in <a class="el" href="step_26.html">step-26</a> but, since the purpose of this program is only to demonstrate using more advanced ways to interface with deal.II's time stepping algorithms, only solves a simple problem on a uniformly refined mesh.</p>
 <p><a class="anchor" id="Problemstatement"></a></p><h3>Problem statement</h3>
 <p>In this example, we solve the one-group time-dependent diffusion approximation of the neutron transport equation (see <a class="el" href="step_28.html">step-28</a> for the time-independent multigroup diffusion). This is a model for how neutrons move around highly scattering media, and consequently it is a variant of the time-dependent diffusion equation &ndash; which is just a different name for the heat equation discussed in <a class="el" href="step_26.html">step-26</a>, plus some extra terms. We assume that the medium is not fissible and therefore, the neutron flux satisfies the following equation:  </p><p class="formulaDsp">
-<picture><source srcset="form_5508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_5599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \frac{1}{v}\frac{\partial \phi(x,t)}{\partial t} = \nabla \cdot D(x) \nabla \phi(x,t)
 - \Sigma_a(x) \phi(x,t) + S(x,t)
-\end{eqnarray*}" src="form_5508.png"/></picture>
+\end{eqnarray*}" src="form_5599.png"/></picture>
 </p>
-<p> augmented by appropriate boundary conditions. Here, <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> is the velocity of neutrons (for simplicity we assume it is equal to 1 which can be achieved by simply scaling the time variable), <picture><source srcset="form_1479_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1479.png"/></picture> is the diffusion coefficient, <picture><source srcset="form_5509_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma_a$" src="form_5509.png"/></picture> is the absorption cross section, and <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> is a source. Because we are only interested in the time dependence, we assume that <picture><source srcset="form_1479_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1479.png"/></picture> and <picture><source srcset="form_5509_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma_a$" src="form_5509.png"/></picture> are constant.</p>
-<p>Since this program only intends to demonstrate how to use advanced time stepping algorithms, we will only look for the solutions of relatively simple problems. Specifically, we are looking for a solution on a square domain <picture><source srcset="form_5514_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,b]\times[0,b]$" src="form_5514.png"/></picture> of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_5515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> augmented by appropriate boundary conditions. Here, <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> is the velocity of neutrons (for simplicity we assume it is equal to 1 which can be achieved by simply scaling the time variable), <picture><source srcset="form_1480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1480.png"/></picture> is the diffusion coefficient, <picture><source srcset="form_5600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma_a$" src="form_5600.png"/></picture> is the absorption cross section, and <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> is a source. Because we are only interested in the time dependence, we assume that <picture><source srcset="form_1480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1480.png"/></picture> and <picture><source srcset="form_5600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma_a$" src="form_5600.png"/></picture> are constant.</p>
+<p>Since this program only intends to demonstrate how to use advanced time stepping algorithms, we will only look for the solutions of relatively simple problems. Specifically, we are looking for a solution on a square domain <picture><source srcset="form_5601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,b]\times[0,b]$" src="form_5601.png"/></picture> of the form  </p><p class="formulaDsp">
+<picture><source srcset="form_5602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \phi(x,t) = A\sin(\omega t)(bx-x^2).
-\end{eqnarray*}" src="form_5515.png"/></picture>
+\end{eqnarray*}" src="form_5602.png"/></picture>
 </p>
 <p> By using quadratic finite elements, we can represent this function exactly at any particular time, and all the error will be due to the time discretization. We do this because it is then easy to observe the order of convergence of the various time stepping schemes we will consider, without having to separate spatial and temporal errors.</p>
-<p>We impose the following boundary conditions: homogeneous Dirichlet for <picture><source srcset="form_599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=0$" src="form_599.png"/></picture> and <picture><source srcset="form_5516_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=b$" src="form_5516.png"/></picture> and homogeneous Neumann conditions for <picture><source srcset="form_460_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=0$" src="form_460.png"/></picture> and <picture><source srcset="form_5517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=b$" src="form_5517.png"/></picture>. We choose the source term so that the corresponding solution is in fact of the form stated above:  </p><p class="formulaDsp">
-<picture><source srcset="form_5520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>We impose the following boundary conditions: homogeneous Dirichlet for <picture><source srcset="form_599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=0$" src="form_599.png"/></picture> and <picture><source srcset="form_5603_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=b$" src="form_5603.png"/></picture> and homogeneous Neumann conditions for <picture><source srcset="form_460_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=0$" src="form_460.png"/></picture> and <picture><source srcset="form_5604_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=b$" src="form_5604.png"/></picture>. We choose the source term so that the corresponding solution is in fact of the form stated above:  </p><p class="formulaDsp">
+<picture><source srcset="form_5605_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 S=A\left(\frac{1}{v}\omega \cos(\omega t)(bx -x^2) + \sin(\omega t)
 \left(\Sigma_a (bx-x^2)+2D\right) \right).
-\end{eqnarray*}" src="form_5520.png"/></picture>
+\end{eqnarray*}" src="form_5605.png"/></picture>
 </p>
-<p> Because the solution is a sine in time, we know that the exact solution satisfies <picture><source srcset="form_5522_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi\left(x,\frac{\pi}{\omega}\right) = 0$" src="form_5522.png"/></picture>. Therefore, the error at time <picture><source srcset="form_5523_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=\frac{\pi}{\omega}$" src="form_5523.png"/></picture> is simply the norm of the numerical solution, i.e., <picture><source srcset="form_5524_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|e(\cdot,t=\frac{\pi}{\omega})\|_{L_2} = \|\phi_h(\cdot,t=\frac{\pi}{\omega})\|_{L_2}$" src="form_5524.png"/></picture>, and is particularly easily evaluated. In the code, we evaluate the <picture><source srcset="form_188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_188.png"/></picture> norm of the vector of nodal values of <picture><source srcset="form_2928_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_h$" src="form_2928.png"/></picture> instead of the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of the associated spatial function, since the former is simpler to compute; however, on uniform meshes, the two are just related by a constant and we can consequently observe the temporal convergence order with either.</p>
+<p> Because the solution is a sine in time, we know that the exact solution satisfies <picture><source srcset="form_5606_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi\left(x,\frac{\pi}{\omega}\right) = 0$" src="form_5606.png"/></picture>. Therefore, the error at time <picture><source srcset="form_5607_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=\frac{\pi}{\omega}$" src="form_5607.png"/></picture> is simply the norm of the numerical solution, i.e., <picture><source srcset="form_5608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|e(\cdot,t=\frac{\pi}{\omega})\|_{L_2} = \|\phi_h(\cdot,t=\frac{\pi}{\omega})\|_{L_2}$" src="form_5608.png"/></picture>, and is particularly easily evaluated. In the code, we evaluate the <picture><source srcset="form_162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_2$" src="form_162.png"/></picture> norm of the vector of nodal values of <picture><source srcset="form_2846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_h$" src="form_2846.png"/></picture> instead of the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of the associated spatial function, since the former is simpler to compute; however, on uniform meshes, the two are just related by a constant and we can consequently observe the temporal convergence order with either.</p>
 <p><a class="anchor" id="RungeKuttamethods"></a></p><h3>Runge-Kutta methods</h3>
 <p>The Runge-Kutta methods implemented in deal.II assume that the equation to be solved can be written as:  </p><p class="formulaDsp">
-<picture><source srcset="form_5526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_5609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \frac{dy}{dt} = g(t,y).
-\end{eqnarray*}" src="form_5526.png"/></picture>
+\end{eqnarray*}" src="form_5609.png"/></picture>
 </p>
-<p> On the other hand, when using finite elements, discretized time derivatives always result in the presence of a <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> on the left hand side. This can easily be seen by considering that if the solution vector <picture><source srcset="form_5529_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y(t)$" src="form_5529.png"/></picture> in the equation above is in fact the vector of nodal coefficients <picture><source srcset="form_5530_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U(t)$" src="form_5530.png"/></picture> for a variable of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_5531_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> On the other hand, when using finite elements, discretized time derivatives always result in the presence of a <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> on the left hand side. This can easily be seen by considering that if the solution vector <picture><source srcset="form_5610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y(t)$" src="form_5610.png"/></picture> in the equation above is in fact the vector of nodal coefficients <picture><source srcset="form_5611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U(t)$" src="form_5611.png"/></picture> for a variable of the form  </p><p class="formulaDsp">
+<picture><source srcset="form_5612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   u_h(x,t) = \sum_j U_j(t) \varphi_j(x)
-\end{eqnarray*}" src="form_5531.png"/></picture>
+\end{eqnarray*}" src="form_5612.png"/></picture>
 </p>
-<p> with spatial shape functions <picture><source srcset="form_5532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(x)$" src="form_5532.png"/></picture>, then multiplying an equation of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_5533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> with spatial shape functions <picture><source srcset="form_5613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(x)$" src="form_5613.png"/></picture>, then multiplying an equation of the form  </p><p class="formulaDsp">
+<picture><source srcset="form_5614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \frac{\partial u(x,t)}{\partial t} = q(t,u(x,t))
-\end{eqnarray*}" src="form_5533.png"/></picture>
+\end{eqnarray*}" src="form_5614.png"/></picture>
 </p>
-<p> by test functions, integrating over <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, substituting <picture><source srcset="form_5534_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\rightarrow u_h$" src="form_5534.png"/></picture> and restricting the test functions to the <picture><source srcset="form_5535_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i(x)$" src="form_5535.png"/></picture> from above, then this spatially discretized equation has the form  </p><p class="formulaDsp">
-<picture><source srcset="form_5536_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> by test functions, integrating over <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, substituting <picture><source srcset="form_5615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\rightarrow u_h$" src="form_5615.png"/></picture> and restricting the test functions to the <picture><source srcset="form_5616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i(x)$" src="form_5616.png"/></picture> from above, then this spatially discretized equation has the form  </p><p class="formulaDsp">
+<picture><source srcset="form_5617_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 M\frac{dU}{dt} = f(t,U),
-\end{eqnarray*}" src="form_5536.png"/></picture>
+\end{eqnarray*}" src="form_5617.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture> is the mass matrix and <picture><source srcset="form_5537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(t,U)$" src="form_5537.png"/></picture> is the spatially discretized version of <picture><source srcset="form_5538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q(t,u(x,t))$" src="form_5538.png"/></picture> (where <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> is typically the place where spatial derivatives appear, but this is not of much concern for the moment given that we only consider time derivatives). In other words, this form fits the general scheme above if we write  </p><p class="formulaDsp">
-<picture><source srcset="form_5542_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> where <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture> is the mass matrix and <picture><source srcset="form_5618_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(t,U)$" src="form_5618.png"/></picture> is the spatially discretized version of <picture><source srcset="form_5619_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q(t,u(x,t))$" src="form_5619.png"/></picture> (where <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> is typically the place where spatial derivatives appear, but this is not of much concern for the moment given that we only consider time derivatives). In other words, this form fits the general scheme above if we write  </p><p class="formulaDsp">
+<picture><source srcset="form_5620_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \frac{dy}{dt} = g(t,y) = M^{-1}f(t,y).
-\end{eqnarray*}" src="form_5542.png"/></picture>
+\end{eqnarray*}" src="form_5620.png"/></picture>
 </p>
-<p>Runke-Kutta methods are time stepping schemes that approximate <picture><source srcset="form_5543_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y(t_n)\approx
-y_{n}$" src="form_5543.png"/></picture> through a particular one-step approach. They are typically written in the form  </p><p class="formulaDsp">
-<picture><source srcset="form_5544_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>Runke-Kutta methods are time stepping schemes that approximate <picture><source srcset="form_5621_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y(t_n)\approx
+y_{n}$" src="form_5621.png"/></picture> through a particular one-step approach. They are typically written in the form  </p><p class="formulaDsp">
+<picture><source srcset="form_5622_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 y_{n+1} = y_n + \sum_{i=1}^s b_i k_i
-\end{eqnarray*}" src="form_5544.png"/></picture>
+\end{eqnarray*}" src="form_5622.png"/></picture>
 </p>
 <p> where for the form of the right hand side above  </p><p class="formulaDsp">
-<picture><source srcset="form_5545_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_5623_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 k_i = \Delta t \, M^{-1} f\left(t_n+c_ih,y_n+\sum_{j=1}^sa_{ij}k_j\right).
-\end{eqnarray*}" src="form_5545.png"/></picture>
+\end{eqnarray*}" src="form_5623.png"/></picture>
 </p>
-<p> Here <picture><source srcset="form_1011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ij}$" src="form_1011.png"/></picture>, <picture><source srcset="form_1586_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_i$" src="form_1586.png"/></picture>, and <picture><source srcset="form_519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_i$" src="form_519.png"/></picture> are known coefficients that identify which particular Runge-Kutta scheme you want to use, and <picture><source srcset="form_5547_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t=t_{n+1}-t_n$" src="form_5547.png"/></picture> is the time step used. Different time stepping methods of the Runge-Kutta class differ in the number of stages <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> and the values they use for the coefficients <picture><source srcset="form_1011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ij}$" src="form_1011.png"/></picture>, <picture><source srcset="form_1586_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_i$" src="form_1586.png"/></picture>, and <picture><source srcset="form_519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_i$" src="form_519.png"/></picture> but are otherwise easy to implement since one can look up tabulated values for these coefficients. (These tables are often called Butcher tableaus.)</p>
+<p> Here <picture><source srcset="form_965_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ij}$" src="form_965.png"/></picture>, <picture><source srcset="form_1580_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_i$" src="form_1580.png"/></picture>, and <picture><source srcset="form_528_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_i$" src="form_528.png"/></picture> are known coefficients that identify which particular Runge-Kutta scheme you want to use, and <picture><source srcset="form_5624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t=t_{n+1}-t_n$" src="form_5624.png"/></picture> is the time step used. Different time stepping methods of the Runge-Kutta class differ in the number of stages <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> and the values they use for the coefficients <picture><source srcset="form_965_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ij}$" src="form_965.png"/></picture>, <picture><source srcset="form_1580_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_i$" src="form_1580.png"/></picture>, and <picture><source srcset="form_528_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_i$" src="form_528.png"/></picture> but are otherwise easy to implement since one can look up tabulated values for these coefficients. (These tables are often called Butcher tableaus.)</p>
 <p>At the time of the writing of this tutorial, the methods implemented in deal.II can be divided in three categories: </p><ol>
 <li>
-Explicit Runge-Kutta; in order for a method to be explicit, it is necessary that in the formula above defining <picture><source srcset="form_5549_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_i$" src="form_5549.png"/></picture>, <picture><source srcset="form_5549_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_i$" src="form_5549.png"/></picture> does not appear on the right hand side. In other words, these methods have to satisfy <picture><source srcset="form_5550_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ii}=0, i=1,\ldots,s$" src="form_5550.png"/></picture>. </li>
+Explicit Runge-Kutta; in order for a method to be explicit, it is necessary that in the formula above defining <picture><source srcset="form_5625_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_i$" src="form_5625.png"/></picture>, <picture><source srcset="form_5625_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_i$" src="form_5625.png"/></picture> does not appear on the right hand side. In other words, these methods have to satisfy <picture><source srcset="form_5626_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ii}=0, i=1,\ldots,s$" src="form_5626.png"/></picture>. </li>
 <li>
 Embedded (or adaptive) Runge-Kutta; we will discuss their properties below. </li>
 <li>
-Implicit Runge-Kutta; this class of methods require the solution of a possibly nonlinear system the stages <picture><source srcset="form_5549_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_i$" src="form_5549.png"/></picture> above, i.e., they have <picture><source srcset="form_5552_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ii}\neq 0$" src="form_5552.png"/></picture> for at least one of the stages <picture><source srcset="form_5553_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i=1,\ldots,s$" src="form_5553.png"/></picture>. </li>
+Implicit Runge-Kutta; this class of methods require the solution of a possibly nonlinear system the stages <picture><source srcset="form_5625_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_i$" src="form_5625.png"/></picture> above, i.e., they have <picture><source srcset="form_5627_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ii}\neq 0$" src="form_5627.png"/></picture> for at least one of the stages <picture><source srcset="form_5628_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i=1,\ldots,s$" src="form_5628.png"/></picture>. </li>
 </ol>
 <p>Many well known time stepping schemes that one does not typically associate with the names Runge or Kutta can in fact be written in a way so that they, too, can be expressed in these categories. They oftentimes represent the lowest-order members of these families; one example is the simple explicit Euler method.</p>
 <p><a class="anchor" id="ExplicitRungeKuttamethods"></a></p><h4>Explicit Runge-Kutta methods</h4>
-<p>These methods, only require a function to evaluate <picture><source srcset="form_5554_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^{-1}f(t,y)$" src="form_5554.png"/></picture> but not (as implicit methods) to solve an equation that involves <picture><source srcset="form_5555_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(t,y)$" src="form_5555.png"/></picture> for <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>. As all explicit time stepping methods, they become unstable when the time step chosen is too large.</p>
+<p>These methods, only require a function to evaluate <picture><source srcset="form_5629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^{-1}f(t,y)$" src="form_5629.png"/></picture> but not (as implicit methods) to solve an equation that involves <picture><source srcset="form_5630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(t,y)$" src="form_5630.png"/></picture> for <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>. As all explicit time stepping methods, they become unstable when the time step chosen is too large.</p>
 <p>Well known methods in this class include forward Euler, third order Runge-Kutta, and fourth order Runge-Kutta (often abbreviated as RK4).</p>
 <p><a class="anchor" id="EmbeddedRungeKuttamethods"></a></p><h4>Embedded Runge-Kutta methods</h4>
-<p>These methods use both a lower and a higher order method to estimate the error and decide if the time step needs to be shortened or can be increased. The term "embedded" refers to the fact that the lower-order method does not require additional evaluates of the function <picture><source srcset="form_5556_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^{-1}f(\cdot,\cdot)$" src="form_5556.png"/></picture> but reuses data that has to be computed for the high order method anyway. It is, in other words, essentially free, and we get the error estimate as a side product of using the higher order method.</p>
+<p>These methods use both a lower and a higher order method to estimate the error and decide if the time step needs to be shortened or can be increased. The term "embedded" refers to the fact that the lower-order method does not require additional evaluates of the function <picture><source srcset="form_5631_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^{-1}f(\cdot,\cdot)$" src="form_5631.png"/></picture> but reuses data that has to be computed for the high order method anyway. It is, in other words, essentially free, and we get the error estimate as a side product of using the higher order method.</p>
 <p>This class of methods include Heun-Euler, Bogacki-Shampine, Dormand-Prince (ode45 in Matlab and often abbreviated as RK45 to indicate that the lower and higher order methods used here are 4th and 5th order Runge-Kutta methods, respectively), Fehlberg, and Cash-Karp.</p>
 <p>At the time of the writing, only embedded explicit methods have been implemented.</p>
 <p><a class="anchor" id="ImplicitRungeKuttamethods"></a></p><h4>Implicit Runge-Kutta methods</h4>
-<p>Implicit methods require the solution of (possibly nonlinear) systems of the form <picture><source srcset="form_5557_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha y = f(t,y)$" src="form_5557.png"/></picture> for <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> in each (sub-)timestep. Internally, this is done using a Newton-type method and, consequently, they require that the user provide functions that can evaluate <picture><source srcset="form_5554_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^{-1}f(t,y)$" src="form_5554.png"/></picture> and <picture><source srcset="form_5558_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(I-\tau M^{-1} \frac{\partial f}{\partial y}\right)^{-1}$" src="form_5558.png"/></picture> or equivalently <picture><source srcset="form_5559_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(M - \tau \frac{\partial f}{\partial y}\right)^{-1} M$" src="form_5559.png"/></picture>.</p>
+<p>Implicit methods require the solution of (possibly nonlinear) systems of the form <picture><source srcset="form_5632_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha y = f(t,y)$" src="form_5632.png"/></picture> for <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> in each (sub-)timestep. Internally, this is done using a Newton-type method and, consequently, they require that the user provide functions that can evaluate <picture><source srcset="form_5629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^{-1}f(t,y)$" src="form_5629.png"/></picture> and <picture><source srcset="form_5633_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(I-\tau M^{-1} \frac{\partial f}{\partial y}\right)^{-1}$" src="form_5633.png"/></picture> or equivalently <picture><source srcset="form_5634_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(M - \tau \frac{\partial f}{\partial y}\right)^{-1} M$" src="form_5634.png"/></picture>.</p>
 <p>The particular form of this operator results from the fact that each Newton step requires the solution of an equation of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_5560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_5635_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \left(M - \tau \frac{\partial f}{\partial y}\right) \Delta y
   = -M h(t,y)
-\end{align*}" src="form_5560.png"/></picture>
+\end{align*}" src="form_5635.png"/></picture>
 </p>
-<p> for some (given) <picture><source srcset="form_5561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h(t,y)$" src="form_5561.png"/></picture>. Implicit methods are always stable, regardless of the time step size, but too large time steps of course affect the <em>accuracy</em> of the solution, even if the numerical solution remains stable and bounded.</p>
+<p> for some (given) <picture><source srcset="form_5636_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h(t,y)$" src="form_5636.png"/></picture>. Implicit methods are always stable, regardless of the time step size, but too large time steps of course affect the <em>accuracy</em> of the solution, even if the numerical solution remains stable and bounded.</p>
 <p>Methods in this class include backward Euler, implicit midpoint, Crank-Nicolson, and the two stage SDIRK method (short for "singly diagonally
-implicit Runge-Kutta", a term coined to indicate that the diagonal elements <picture><source srcset="form_1952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ii}$" src="form_1952.png"/></picture> defining the time stepping method are all equal; this property allows for the Newton matrix <picture><source srcset="form_5562_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I-\tau M^{-1}\frac{\partial f}{\partial y}$" src="form_5562.png"/></picture> to be re-used between stages because <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture> is the same every time).</p>
+implicit Runge-Kutta", a term coined to indicate that the diagonal elements <picture><source srcset="form_1952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_{ii}$" src="form_1952.png"/></picture> defining the time stepping method are all equal; this property allows for the Newton matrix <picture><source srcset="form_5637_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I-\tau M^{-1}\frac{\partial f}{\partial y}$" src="form_5637.png"/></picture> to be re-used between stages because <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture> is the same every time).</p>
 <p><a class="anchor" id="Spatiallydiscreteformulation"></a></p><h3>Spatially discrete formulation</h3>
-<p>By expanding the solution of our model problem as always using shape functions <picture><source srcset="form_2106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_j$" src="form_2106.png"/></picture> and writing  </p><p class="formulaDsp">
-<picture><source srcset="form_5563_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>By expanding the solution of our model problem as always using shape functions <picture><source srcset="form_2097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_j$" src="form_2097.png"/></picture> and writing  </p><p class="formulaDsp">
+<picture><source srcset="form_5638_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \phi_h(x,t) = \sum_j U_j(t) \psi_j(x),
-\end{eqnarray*}" src="form_5563.png"/></picture>
+\end{eqnarray*}" src="form_5638.png"/></picture>
 </p>
 <p> we immediately get the spatially discretized version of the diffusion equation as  </p><p class="formulaDsp">
-<picture><source srcset="form_5564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_5639_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   M \frac{dU(t)}{dt}
   = -{\cal D} U(t) - {\cal A} U(t) + {\cal S}(t)
-\end{eqnarray*}" src="form_5564.png"/></picture>
+\end{eqnarray*}" src="form_5639.png"/></picture>
 </p>
 <p> where  </p><p class="formulaDsp">
-<picture><source srcset="form_5565_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_5640_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   M_{ij}  &amp;=&amp; (\psi_i,\psi_j), \\
   {\cal D}_{ij}  &amp;=&amp; (D\nabla\psi_i,\nabla\psi_j)_\Omega, \\
   {\cal A}_{ij}  &amp;=&amp; (\Sigma_a\psi_i,\psi_j)_\Omega, \\
   {\cal S}_{i}(t)  &amp;=&amp; (\psi_i,S(x,t))_\Omega.
-\end{eqnarray*}" src="form_5565.png"/></picture>
+\end{eqnarray*}" src="form_5640.png"/></picture>
 </p>
 <p> See also <a class="el" href="step_24.html">step-24</a> and <a class="el" href="step_26.html">step-26</a> to understand how we arrive here. Boundary terms are not necessary due to the chosen boundary conditions for the current problem. To use the Runge-Kutta methods, we recast this as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_5566_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_5641_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 f(y) = -{\cal D}y - {\cal A}y + {\cal S}.
-\end{eqnarray*}" src="form_5566.png"/></picture>
+\end{eqnarray*}" src="form_5641.png"/></picture>
 </p>
-<p> In the code, we will need to be able to evaluate this function <picture><source srcset="form_5567_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(U)$" src="form_5567.png"/></picture> along with its derivative,  </p><p class="formulaDsp">
-<picture><source srcset="form_5568_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> In the code, we will need to be able to evaluate this function <picture><source srcset="form_5642_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(U)$" src="form_5642.png"/></picture> along with its derivative,  </p><p class="formulaDsp">
+<picture><source srcset="form_5643_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \frac{\partial f}{\partial y} = -{\cal D} - {\cal A}.
-\end{eqnarray*}" src="form_5568.png"/></picture>
+\end{eqnarray*}" src="form_5643.png"/></picture>
 </p>
 <p><a class="anchor" id="Notesonthetestcase"></a></p><h3>Notes on the testcase</h3>
 <p>To simplify the problem, the domain is two dimensional and the mesh is uniformly refined (there is no need to adapt the mesh since we use quadratic finite elements and the exact solution is quadratic). Going from a two dimensional domain to a three dimensional domain is not very challenging. However if you intend to solve more complex problems where the mesh must be adapted (as is done, for example, in <a class="el" href="step_26.html">step-26</a>), then it is important to remember the following issues:</p>
@@ -302,8 +302,8 @@
 <div class="line">  </div>
 <div class="ttc" id="anamespacedealii_html"><div class="ttname"><a href="namespacedealii.html">dealii</a></div><div class="ttdef"><b>Definition</b> <a href="namespace__dealii_8h_source.html#href_anchor">namespace_dealii.h:26</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="ThecodeDiffusioncodeclass"></a> </p><h3>The <code>Diffusion</code> class</h3>
-<p>The next piece is the declaration of the main class. Most of the functions in this class are not new and have been explained in previous tutorials. The only interesting functions are <code>evaluate_diffusion()</code> and <code>id_minus_tau_J_inverse()</code>. <code>evaluate_diffusion()</code> evaluates the diffusion equation, <picture><source srcset="form_5569_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^{-1}(f(t,y))$" src="form_5569.png"/></picture>, at a given time and a given <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>. <code>id_minus_tau_J_inverse()</code> evaluates <picture><source srcset="form_5570_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(I-\tau
-   M^{-1} \frac{\partial f(t,y)}{\partial y}\right)^{-1}$" src="form_5570.png"/></picture> or equivalently <picture><source srcset="form_5571_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(M-\tau \frac{\partial f}{\partial y}\right)^{-1} M$" src="form_5571.png"/></picture> at a given time, for a given <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture> and <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture>. This function is needed when an implicit method is used.</p>
+<p>The next piece is the declaration of the main class. Most of the functions in this class are not new and have been explained in previous tutorials. The only interesting functions are <code>evaluate_diffusion()</code> and <code>id_minus_tau_J_inverse()</code>. <code>evaluate_diffusion()</code> evaluates the diffusion equation, <picture><source srcset="form_5644_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^{-1}(f(t,y))$" src="form_5644.png"/></picture>, at a given time and a given <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>. <code>id_minus_tau_J_inverse()</code> evaluates <picture><source srcset="form_5645_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(I-\tau
+   M^{-1} \frac{\partial f(t,y)}{\partial y}\right)^{-1}$" src="form_5645.png"/></picture> or equivalently <picture><source srcset="form_5646_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left(M-\tau \frac{\partial f}{\partial y}\right)^{-1} M$" src="form_5646.png"/></picture> at a given time, for a given <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture> and <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture>. This function is needed when an implicit method is used.</p>
 <div class="fragment"><div class="line">    <span class="keyword">class </span>Diffusion</div>
 <div class="line">    {</div>
 <div class="line">    <span class="keyword">public</span>:</div>
@@ -424,8 +424,8 @@
 <div class="ttc" id="agroup__constraints_html_gaf10030e7a598def1a1fa43fb0c005a93"><div class="ttname"><a href="group__constraints.html#href_anchor">DoFTools::make_sparsity_pattern</a></div><div class="ttdeci">void make_sparsity_pattern(const DoFHandler&lt; dim, spacedim &gt; &amp;dof_handler, SparsityPatternBase &amp;sparsity_pattern, const AffineConstraints&lt; number &gt; &amp;constraints=AffineConstraints&lt; number &gt;(), const bool keep_constrained_dofs=true, const types::subdomain_id subdomain_id=numbers::invalid_subdomain_id)</div><div class="ttdef"><b>Definition</b> <a href="dof__tools__sparsity_8cc_source.html#href_anchor">dof_tools_sparsity.cc:56</a></div></div>
 <div class="ttc" id="anamespaceVectorTools_html_ab2562d41bb26f362043f9719a8cd9b87"><div class="ttname"><a href="namespaceVectorTools.html#href_anchor">VectorTools::interpolate_boundary_values</a></div><div class="ttdeci">void interpolate_boundary_values(const Mapping&lt; dim, spacedim &gt; &amp;mapping, const DoFHandler&lt; dim, spacedim &gt; &amp;dof, const std::map&lt; types::boundary_id, const Function&lt; spacedim, number &gt; * &gt; &amp;function_map, std::map&lt; types::global_dof_index, number &gt; &amp;boundary_values, const ComponentMask &amp;component_mask=ComponentMask())</div></div>
 </div><!-- fragment --><p><a class="anchor" id="codeDiffusionassemble_systemcode"></a> </p><h4><code>Diffusion::assemble_system</code></h4>
-<p>In this function, we compute <picture><source srcset="form_5572_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\int D \nabla b_i \cdot \nabla b_j
-   d\boldsymbol{r} - \int \Sigma_a b_i b_j d\boldsymbol{r}$" src="form_5572.png"/></picture> and the mass matrix <picture><source srcset="form_5573_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int b_i b_j d\boldsymbol{r}$" src="form_5573.png"/></picture>. The <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> is then inverted using a direct solver; the <code>inverse_mass_matrix</code> variable will then store the inverse of the mass matrix so that <picture><source srcset="form_3270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^{-1}$" src="form_3270.png"/></picture> can be applied to a vector using the <code>vmult()</code> function of that object. (Internally, UMFPACK does not really store the inverse of the matrix, but its LU factors; applying the inverse matrix is then equivalent to doing one forward and one backward solves with these two factors, which has the same complexity as applying an explicit inverse of the matrix).</p>
+<p>In this function, we compute <picture><source srcset="form_5647_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\int D \nabla b_i \cdot \nabla b_j
+   d\boldsymbol{r} - \int \Sigma_a b_i b_j d\boldsymbol{r}$" src="form_5647.png"/></picture> and the mass matrix <picture><source srcset="form_5648_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int b_i b_j d\boldsymbol{r}$" src="form_5648.png"/></picture>. The <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> is then inverted using a direct solver; the <code>inverse_mass_matrix</code> variable will then store the inverse of the mass matrix so that <picture><source srcset="form_3127_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M^{-1}$" src="form_3127.png"/></picture> can be applied to a vector using the <code>vmult()</code> function of that object. (Internally, UMFPACK does not really store the inverse of the matrix, but its LU factors; applying the inverse matrix is then equivalent to doing one forward and one backward solves with these two factors, which has the same complexity as applying an explicit inverse of the matrix).</p>
 <div class="fragment"><div class="line">    <span class="keywordtype">void</span> Diffusion::assemble_system()</div>
 <div class="line">    {</div>
 <div class="line">      system_matrix = 0.;</div>
@@ -513,8 +513,8 @@
 <div class="ttc" id="anamespacestd_html_a7feec1948e651b6285311f2ab804435c"><div class="ttname"><a href="namespacestd.html#href_anchor">std::cos</a></div><div class="ttdeci">::VectorizedArray&lt; Number, width &gt; cos(const ::VectorizedArray&lt; Number, width &gt; &amp;)</div><div class="ttdef"><b>Definition</b> <a href="vectorization_8h_source.html#href_anchor">vectorization.h:5858</a></div></div>
 <div class="ttc" id="anamespacestd_html_a8f997d77755b36a819873b85f9f57375"><div class="ttname"><a href="namespacestd.html#href_anchor">std::sin</a></div><div class="ttdeci">::VectorizedArray&lt; Number, width &gt; sin(const ::VectorizedArray&lt; Number, width &gt; &amp;)</div><div class="ttdef"><b>Definition</b> <a href="vectorization_8h_source.html#href_anchor">vectorization.h:5831</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="codeDiffusionevaluate_diffusioncode"></a> </p><h4><code>Diffusion::evaluate_diffusion</code></h4>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_53.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_53.html	2024-03-17 21:57:47.455259078 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_53.html	2024-03-17 21:57:47.455259078 +0000
@@ -142,18 +142,18 @@
 <p>To illustrate how one describes geometries using charts in deal.II, we will consider a case that originates in an application of the <a href="https://aspect.geodynamics.org">ASPECT mantle convection code</a>, using a data set provided by D. Sarah Stamps. In the concrete application, we were interested in describing flow in the Earth mantle under the <a href="http://en.wikipedia.org/wiki/East_African_rift">East African Rift</a>, a zone where two continental plates drift apart. Not to beat around the bush, the geometry we want to describe looks like this:</p>
 <p><img src="https://www.dealii.org/images/steps/developer/step-53.topo.png" alt="" class="inline"/></p>
 <p>In particular, though you cannot see this here, the top surface is not just colored by the elevation but is, in fact, deformed to follow the correct topography. While the actual application is not relevant here, the geometry is. The domain we are interested in is a part of the Earth that ranges from the surface to a depth of 500km, from 26 to 35 degrees East of the Greenwich meridian, and from 5 degrees North of the equator to 10 degrees South.</p>
-<p>This description of the geometry suggests to start with a box <picture><source srcset="form_5588_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U=[26,35]\times[-10,5]\times[-500000,0]$" src="form_5588.png"/></picture> (measured in degrees, degrees, and meters) and to provide a map <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> so that <picture><source srcset="form_5589_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi^{-1}(\hat U)=\Omega$" src="form_5589.png"/></picture> where <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> is the domain we seek. <picture><source srcset="form_5590_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\Omega,\varphi)$" src="form_5590.png"/></picture> is then a chart, <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> the pull-back operator, and <picture><source srcset="form_5591_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi^{-1}$" src="form_5591.png"/></picture> the push-forward operator. If we need a point <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> that is the "average" of other points <picture><source srcset="form_5592_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q_i\in\Omega$" src="form_5592.png"/></picture>, the <a class="el" href="classChartManifold.html">ChartManifold</a> class then first applies the pull-back to obtain <picture><source srcset="form_5593_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat q_i=\varphi(q_i)$" src="form_5593.png"/></picture>, averages these to a point <picture><source srcset="form_4487_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat p$" src="form_4487.png"/></picture> and then computes <picture><source srcset="form_5594_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p=\varphi^{-1}(\hat p)$" src="form_5594.png"/></picture>.</p>
-<p>Our goal here is therefore to implement a class that describes <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> and <picture><source srcset="form_5591_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi^{-1}$" src="form_5591.png"/></picture>. If Earth was a sphere, then this would not be difficult: if we denote by <picture><source srcset="form_5595_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\hat \phi,\hat \theta,\hat d)$" src="form_5595.png"/></picture> the points of <picture><source srcset="form_5596_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U$" src="form_5596.png"/></picture> (i.e., longitude counted eastward, latitude counted northward, and elevation relative to zero depth), then  </p><p class="formulaDsp">
-<picture><source srcset="form_5597_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>This description of the geometry suggests to start with a box <picture><source srcset="form_5658_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U=[26,35]\times[-10,5]\times[-500000,0]$" src="form_5658.png"/></picture> (measured in degrees, degrees, and meters) and to provide a map <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> so that <picture><source srcset="form_5659_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi^{-1}(\hat U)=\Omega$" src="form_5659.png"/></picture> where <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> is the domain we seek. <picture><source srcset="form_5660_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\Omega,\varphi)$" src="form_5660.png"/></picture> is then a chart, <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> the pull-back operator, and <picture><source srcset="form_5661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi^{-1}$" src="form_5661.png"/></picture> the push-forward operator. If we need a point <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> that is the "average" of other points <picture><source srcset="form_5662_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q_i\in\Omega$" src="form_5662.png"/></picture>, the <a class="el" href="classChartManifold.html">ChartManifold</a> class then first applies the pull-back to obtain <picture><source srcset="form_5663_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat q_i=\varphi(q_i)$" src="form_5663.png"/></picture>, averages these to a point <picture><source srcset="form_4160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat p$" src="form_4160.png"/></picture> and then computes <picture><source srcset="form_5664_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p=\varphi^{-1}(\hat p)$" src="form_5664.png"/></picture>.</p>
+<p>Our goal here is therefore to implement a class that describes <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> and <picture><source srcset="form_5661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi^{-1}$" src="form_5661.png"/></picture>. If Earth was a sphere, then this would not be difficult: if we denote by <picture><source srcset="form_5665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\hat \phi,\hat \theta,\hat d)$" src="form_5665.png"/></picture> the points of <picture><source srcset="form_5666_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U$" src="form_5666.png"/></picture> (i.e., longitude counted eastward, latitude counted northward, and elevation relative to zero depth), then  </p><p class="formulaDsp">
+<picture><source srcset="form_5667_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf x = \varphi^{-1}(\hat \phi,\hat \theta,\hat d)
   = (R+\hat d) (\cos\hat \phi\cos\hat \theta, \sin\hat \phi\cos\hat \theta, \sin\hat \theta)^T
-\]" src="form_5597.png"/></picture>
+\]" src="form_5667.png"/></picture>
 </p>
-<p> provides coordinates in a Cartesian coordinate system, where <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> is the radius of the sphere. However, the Earth is not a sphere:</p>
+<p> provides coordinates in a Cartesian coordinate system, where <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> is the radius of the sphere. However, the Earth is not a sphere:</p>
 <ol>
 <li>
 <p class="startli">It is flattened at the poles and larger at the equator: the semi-major axis is approximately 22km longer than the semi-minor axis. We will account for this using the <a href="http://en.wikipedia.org/wiki/WGS84">WGS 84</a> reference standard for the Earth shape. The formula used in WGS 84 to obtain a position in Cartesian coordinates from longitude, latitude, and elevation is  </p><p class="formulaDsp">
-<picture><source srcset="form_5598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_5668_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf x = \varphi_\text{WGS84}^{-1}(\phi,\theta,d)
   = \left(
     \begin{array}{c}
@@ -162,14 +162,14 @@
      ((1-e^2)\bar R(\theta)+d) \sin\theta
     \end{array}
     \right),
-\]" src="form_5598.png"/></picture>
+\]" src="form_5668.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_5599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar R(\theta)=\frac{R}{\sqrt{1-(e \sin\theta)^2}}$" src="form_5599.png"/></picture>, and radius and ellipticity are given by <picture><source srcset="form_5600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R=6378137\text{m}, e=0.081819190842622$" src="form_5600.png"/></picture>. In this formula, we assume that the arguments to sines and cosines are evaluated in degree, not radians (though we will have to change this assumption in the code).</p>
+<p> where <picture><source srcset="form_5669_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar R(\theta)=\frac{R}{\sqrt{1-(e \sin\theta)^2}}$" src="form_5669.png"/></picture>, and radius and ellipticity are given by <picture><source srcset="form_5670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R=6378137\text{m}, e=0.081819190842622$" src="form_5670.png"/></picture>. In this formula, we assume that the arguments to sines and cosines are evaluated in degree, not radians (though we will have to change this assumption in the code).</p>
 <p class="endli"></p>
 </li>
 <li>
-It has topography in the form of mountains and valleys. We will account for this using real topography data (see below for a description of where this data comes from). Using this data set, we can look up elevations on a latitude-longitude mesh laid over the surface of the Earth. Starting with the box <picture><source srcset="form_5588_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U=[26,35]\times[-10,5]\times[-500000,0]$" src="form_5588.png"/></picture>, we will therefore first stretch it in vertical direction before handing it off to the WGS 84 function: if <picture><source srcset="form_5601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h(\hat\phi,\hat\theta)$" src="form_5601.png"/></picture> is the height at longitude <picture><source srcset="form_5602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat\phi$" src="form_5602.png"/></picture> and latitude <picture><source srcset="form_5603_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat\theta$" src="form_5603.png"/></picture>, then we define  <p class="formulaDsp">
-<picture><source srcset="form_5604_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+It has topography in the form of mountains and valleys. We will account for this using real topography data (see below for a description of where this data comes from). Using this data set, we can look up elevations on a latitude-longitude mesh laid over the surface of the Earth. Starting with the box <picture><source srcset="form_5658_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U=[26,35]\times[-10,5]\times[-500000,0]$" src="form_5658.png"/></picture>, we will therefore first stretch it in vertical direction before handing it off to the WGS 84 function: if <picture><source srcset="form_5671_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h(\hat\phi,\hat\theta)$" src="form_5671.png"/></picture> is the height at longitude <picture><source srcset="form_5672_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat\phi$" src="form_5672.png"/></picture> and latitude <picture><source srcset="form_5673_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat\theta$" src="form_5673.png"/></picture>, then we define  <p class="formulaDsp">
+<picture><source srcset="form_5674_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (\phi,\theta,d) =
   \varphi_\text{topo}^{-1}(\hat\phi,\hat\theta,\hat d)
   = \left(
@@ -177,30 +177,30 @@
       \hat\theta,
       \hat d + \frac{\hat d+500000}{500000}h(\hat\phi,\hat\theta)
     \right).
-\]" src="form_5604.png"/></picture>
+\]" src="form_5674.png"/></picture>
 </p>
- Using this function, the top surface of the box <picture><source srcset="form_5596_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U$" src="form_5596.png"/></picture> is displaced to the correct topography, the bottom surface remains where it was, and points in between are linearly interpolated. </li>
+ Using this function, the top surface of the box <picture><source srcset="form_5666_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U$" src="form_5666.png"/></picture> is displaced to the correct topography, the bottom surface remains where it was, and points in between are linearly interpolated. </li>
 </ol>
-<p>Using these two functions, we can then define the entire push-forward function <picture><source srcset="form_5605_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi^{-1}: \hat U \rightarrow \Omega$" src="form_5605.png"/></picture> as  </p><p class="formulaDsp">
-<picture><source srcset="form_5606_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Using these two functions, we can then define the entire push-forward function <picture><source srcset="form_5675_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi^{-1}: \hat U \rightarrow \Omega$" src="form_5675.png"/></picture> as  </p><p class="formulaDsp">
+<picture><source srcset="form_5676_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf x
   =
   \varphi^{-1}(\hat\phi,\hat\theta,\hat d)
   =
   \varphi_\text{WGS84}^{-1}(\varphi_\text{topo}^{-1}(\hat\phi,\hat\theta,\hat d)).
-\]" src="form_5606.png"/></picture>
+\]" src="form_5676.png"/></picture>
 </p>
 <p> In addition, we will have to define the inverse of this function, the pull-back operation, which we can write as  </p><p class="formulaDsp">
-<picture><source srcset="form_5607_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_5677_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (\hat\phi,\hat\theta,\hat d)
   =
   \varphi(\mathbf x)
   =
   \varphi_\text{topo}(\varphi_\text{WGS84}(\mathbf x)).
-\]" src="form_5607.png"/></picture>
+\]" src="form_5677.png"/></picture>
 </p>
 <p> We can obtain one of the components of this function by inverting the formula above:  </p><p class="formulaDsp">
-<picture><source srcset="form_5608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_5678_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (\hat\phi,\hat\theta,\hat d) =
   \varphi_\text{topo}(\phi,\theta,d)
   = \left(
@@ -208,11 +208,11 @@
       \theta,
       500000\frac{d-h(\phi,\theta)}{500000+h(\phi,\theta)}
     \right).
-\]" src="form_5608.png"/></picture>
+\]" src="form_5678.png"/></picture>
 </p>
-<p> Computing <picture><source srcset="form_5609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_\text{WGS84}(\mathbf x)$" src="form_5609.png"/></picture> is also possible though a lot more awkward. We won't show the formula here but instead only provide the implementation in the program.</p>
+<p> Computing <picture><source srcset="form_5679_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_\text{WGS84}(\mathbf x)$" src="form_5679.png"/></picture> is also possible though a lot more awkward. We won't show the formula here but instead only provide the implementation in the program.</p>
 <p><a class="anchor" id="Implementation"></a></p><h3>Implementation</h3>
-<p>There are a number of issues we need to address in the program. At the largest scale, we need to write a class that implements the interface of <a class="el" href="classChartManifold.html">ChartManifold</a>. This involves a function <code>push_forward()</code> that takes a point in the reference domain <picture><source srcset="form_5596_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U$" src="form_5596.png"/></picture> and transform it into real space using the function <picture><source srcset="form_5591_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi^{-1}$" src="form_5591.png"/></picture> outlined above, and its inverse function <code>pull_back()</code> implementing <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture>. We will do so in the <code>AfricaGeometry</code> class below that looks, in essence, like this: </p><div class="fragment"><div class="line"><span class="keyword">class </span>AfricaGeometry : <span class="keyword">public</span> <a class="code hl_class" href="classChartManifold.html">ChartManifold</a>&lt;3,3&gt;</div>
+<p>There are a number of issues we need to address in the program. At the largest scale, we need to write a class that implements the interface of <a class="el" href="classChartManifold.html">ChartManifold</a>. This involves a function <code>push_forward()</code> that takes a point in the reference domain <picture><source srcset="form_5666_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U$" src="form_5666.png"/></picture> and transform it into real space using the function <picture><source srcset="form_5661_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi^{-1}$" src="form_5661.png"/></picture> outlined above, and its inverse function <code>pull_back()</code> implementing <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture>. We will do so in the <code>AfricaGeometry</code> class below that looks, in essence, like this: </p><div class="fragment"><div class="line"><span class="keyword">class </span>AfricaGeometry : <span class="keyword">public</span> <a class="code hl_class" href="classChartManifold.html">ChartManifold</a>&lt;3,3&gt;</div>
 <div class="line">{</div>
 <div class="line"><span class="keyword">public</span>:</div>
 <div class="line">  <span class="keyword">virtual</span></div>
@@ -231,7 +231,7 @@
 <div class="ttc" id="aclassChartManifold_html_a7123987b7ad8028d5683da097743a453"><div class="ttname"><a href="classChartManifold.html#href_anchor">ChartManifold::pull_back</a></div><div class="ttdeci">virtual Point&lt; chartdim &gt; pull_back(const Point&lt; spacedim &gt; &amp;space_point) const =0</div></div>
 <div class="ttc" id="aclassPoint_html"><div class="ttname"><a href="classPoint.html">Point</a></div><div class="ttdef"><b>Definition</b> <a href="base_2point_8h_source.html#href_anchor">point.h:112</a></div></div>
 </div><!-- fragment --><p>The transformations above have two parts: the WGS 84 transformations and the topography transformation. Consequently, the <code>AfricaGeometry</code> class will have additional (non-virtual) member functions <code>AfricaGeometry::push_forward_wgs84()</code> and <code>AfricaGeometry::push_forward_topo()</code> that implement these two pieces, and corresponding pull back functions.</p>
-<p>The WGS 84 transformation functions are not particularly interesting (even though the formulas they implement are impressive). The more interesting part is the topography transformation. Recall that for this, we needed to evaluate the elevation function <picture><source srcset="form_5601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h(\hat\phi,\hat\theta)$" src="form_5601.png"/></picture>. There is of course no formula for this: Earth is what it is, the best one can do is look up the altitude from some table. This is, in fact what we will do.</p>
+<p>The WGS 84 transformation functions are not particularly interesting (even though the formulas they implement are impressive). The more interesting part is the topography transformation. Recall that for this, we needed to evaluate the elevation function <picture><source srcset="form_5671_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h(\hat\phi,\hat\theta)$" src="form_5671.png"/></picture>. There is of course no formula for this: Earth is what it is, the best one can do is look up the altitude from some table. This is, in fact what we will do.</p>
 <p>The data we use was originally created by the <a href="http://en.wikipedia.org/wiki/Shuttle_Radar_Topography_Mission">Shuttle Radar Topography Mission</a>, was downloaded from the US Geologic Survey (USGS) and processed by D. Sarah Stamps who also wrote the initial version of the WGS 84 transformation functions. The topography data so processed is stored in a file <code>topography.txt.gz</code> that, when unpacked looks like this: </p><div class="fragment"><div class="line">6.983333 25.000000 700</div>
 <div class="line">6.983333 25.016667 692</div>
 <div class="line">6.983333 25.033333 701</div>
@@ -243,12 +243,12 @@
 <div class="line">-11.983333 35.966667 687</div>
 <div class="line">-11.983333 35.983333 659</div>
 </div><!-- fragment --><p> The data is formatted as <code>latitude longitude elevation</code> where the first two columns are provided in degrees North of the equator and degrees East of the Greenwich meridian. The final column is given in meters above the WGS 84 zero elevation.</p>
-<p>In the transformation functions, we need to evaluate <picture><source srcset="form_5601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h(\hat\phi,\hat\theta)$" src="form_5601.png"/></picture> for a given longitude <picture><source srcset="form_5602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat\phi$" src="form_5602.png"/></picture> and latitude <picture><source srcset="form_5603_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat\theta$" src="form_5603.png"/></picture>. In general, this data point will not be available and we will have to interpolate between adjacent data points. Writing such an interpolation routine is not particularly difficult, but it is a bit tedious and error prone. Fortunately, we can somehow shoehorn this data set into an existing class: <a class="el" href="classFunctions_1_1InterpolatedUniformGridData.html">Functions::InterpolatedUniformGridData</a> . Unfortunately, the class does not fit the bill quite exactly and so we need to work around it a bit. The problem comes from the way we initialize this class: in its simplest form, it takes a stream of values that it assumes form an equispaced mesh in the <picture><source srcset="form_2818_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x-y$" src="form_2818.png"/></picture> plane (or, here, the <picture><source srcset="form_5611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi-\theta$" src="form_5611.png"/></picture> plane). Which is what they do here, sort of: they are ordered latitude first, longitude second; and more awkwardly, the first column starts at the largest values and counts down, rather than the usual other way around.</p>
+<p>In the transformation functions, we need to evaluate <picture><source srcset="form_5671_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h(\hat\phi,\hat\theta)$" src="form_5671.png"/></picture> for a given longitude <picture><source srcset="form_5672_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat\phi$" src="form_5672.png"/></picture> and latitude <picture><source srcset="form_5673_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat\theta$" src="form_5673.png"/></picture>. In general, this data point will not be available and we will have to interpolate between adjacent data points. Writing such an interpolation routine is not particularly difficult, but it is a bit tedious and error prone. Fortunately, we can somehow shoehorn this data set into an existing class: <a class="el" href="classFunctions_1_1InterpolatedUniformGridData.html">Functions::InterpolatedUniformGridData</a> . Unfortunately, the class does not fit the bill quite exactly and so we need to work around it a bit. The problem comes from the way we initialize this class: in its simplest form, it takes a stream of values that it assumes form an equispaced mesh in the <picture><source srcset="form_2859_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x-y$" src="form_2859.png"/></picture> plane (or, here, the <picture><source srcset="form_5680_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi-\theta$" src="form_5680.png"/></picture> plane). Which is what they do here, sort of: they are ordered latitude first, longitude second; and more awkwardly, the first column starts at the largest values and counts down, rather than the usual other way around.</p>
 <p>Now, while tutorial programs are meant to illustrate how to code with deal.II, they do not necessarily have to satisfy the same quality standards as one would have to do with production codes. In a production code, we would write a function that reads the data and (i) automatically determines the extents of the first and second column, (ii) automatically determines the number of data points in each direction, (iii) does the interpolation regardless of the order in which data is arranged, if necessary by switching the order between reading and presenting it to the <a class="el" href="classFunctions_1_1InterpolatedUniformGridData.html">Functions::InterpolatedUniformGridData</a> class.</p>
 <p>On the other hand, tutorial programs are best if they are short and demonstrate key points rather than dwell on unimportant aspects and, thereby, obscure what we really want to show. Consequently, we will allow ourselves a bit of leeway:</p><ul>
-<li>since this program is intended solely for a particular geometry around the area of the East-African rift and since this is precisely the area described by the data file, we will hardcode in the program that there are <picture><source srcset="form_5613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1139\times 660$" src="form_5613.png"/></picture> pieces of data;</li>
-<li>we will hardcode the boundaries of the data <picture><source srcset="form_5614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-11.98333^\circ,6.983333^\circ]\times[25^\circ,35.98333^\circ]$" src="form_5614.png"/></picture>;</li>
-<li>we will lie to the <a class="el" href="classFunctions_1_1InterpolatedUniformGridData.html">Functions::InterpolatedUniformGridData</a> class: the class will only see the data in the last column of this data file, and we will pretend that the data is arranged in a way that there are 1139 data points in the first coordinate direction that are arranged in <em>ascending</em> order but in an interval <picture><source srcset="form_5615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-6.983333^\circ,11.98333^\circ]$" src="form_5615.png"/></picture> (not the negated bounds). Then, when we need to look something up for a latitude <picture><source srcset="form_5603_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat\theta$" src="form_5603.png"/></picture>, we can ask the interpolating table class for a value at <picture><source srcset="form_5616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\hat\theta$" src="form_5616.png"/></picture>. With this little trick, we can avoid having to switch around the order of data as read from file.</li>
+<li>since this program is intended solely for a particular geometry around the area of the East-African rift and since this is precisely the area described by the data file, we will hardcode in the program that there are <picture><source srcset="form_5681_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1139\times 660$" src="form_5681.png"/></picture> pieces of data;</li>
+<li>we will hardcode the boundaries of the data <picture><source srcset="form_5682_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-11.98333^\circ,6.983333^\circ]\times[25^\circ,35.98333^\circ]$" src="form_5682.png"/></picture>;</li>
+<li>we will lie to the <a class="el" href="classFunctions_1_1InterpolatedUniformGridData.html">Functions::InterpolatedUniformGridData</a> class: the class will only see the data in the last column of this data file, and we will pretend that the data is arranged in a way that there are 1139 data points in the first coordinate direction that are arranged in <em>ascending</em> order but in an interval <picture><source srcset="form_5683_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-6.983333^\circ,11.98333^\circ]$" src="form_5683.png"/></picture> (not the negated bounds). Then, when we need to look something up for a latitude <picture><source srcset="form_5673_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat\theta$" src="form_5673.png"/></picture>, we can ask the interpolating table class for a value at <picture><source srcset="form_5684_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\hat\theta$" src="form_5684.png"/></picture>. With this little trick, we can avoid having to switch around the order of data as read from file.</li>
 </ul>
 <p>All of this then calls for a class that essentially looks like this: </p><div class="fragment"><div class="line"><span class="keyword">class </span>AfricaTopography</div>
 <div class="line">{</div>
@@ -269,7 +269,7 @@
 <div class="line">};</div>
 <div class="ttc" id="aclassFunctions_1_1InterpolatedUniformGridData_html"><div class="ttname"><a href="classFunctions_1_1InterpolatedUniformGridData.html">Functions::InterpolatedUniformGridData</a></div><div class="ttdef"><b>Definition</b> <a href="function__lib_8h_source.html#href_anchor">function_lib.h:1594</a></div></div>
 <div class="ttc" id="anamespacenumbers_html_a3e24f194a9cb9b6ff4442b8a7a877d4a"><div class="ttname"><a href="namespacenumbers.html#href_anchor">numbers::PI</a></div><div class="ttdeci">static constexpr double PI</div><div class="ttdef"><b>Definition</b> <a href="numbers_8h_source.html#href_anchor">numbers.h:259</a></div></div>
-</div><!-- fragment --><p>Note how the <code>value()</code> function negates the latitude. It also switches from the format <picture><source srcset="form_5617_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi,\theta$" src="form_5617.png"/></picture> that we use everywhere else to the latitude-longitude format used in the table. Finally, it takes its arguments in radians as that is what we do everywhere else in the program, but then converts them to the degree-based system used for table lookup. As you will see in the implementation below, the function has a few more (static) member functions that we will call in the initialization of the <code>topography_data</code> member variable: the class type of this variable has a constructor that allows us to set everything right at construction time, rather than having to fill data later on, but this constructor takes a number of objects that can't be constructed in-place (at least not in C++98). Consequently, the construction of each of the objects we want to pass in the initialization happens in a number of static member functions.</p>
+</div><!-- fragment --><p>Note how the <code>value()</code> function negates the latitude. It also switches from the format <picture><source srcset="form_5685_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi,\theta$" src="form_5685.png"/></picture> that we use everywhere else to the latitude-longitude format used in the table. Finally, it takes its arguments in radians as that is what we do everywhere else in the program, but then converts them to the degree-based system used for table lookup. As you will see in the implementation below, the function has a few more (static) member functions that we will call in the initialization of the <code>topography_data</code> member variable: the class type of this variable has a constructor that allows us to set everything right at construction time, rather than having to fill data later on, but this constructor takes a number of objects that can't be constructed in-place (at least not in C++98). Consequently, the construction of each of the objects we want to pass in the initialization happens in a number of static member functions.</p>
 <p>Having discussed the general outline of how we want to implement things, let us go to the program and show how it is done in practice.</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
 <p>Let us start with the include files we need here. Obviously, we need the ones that describe the triangulation (<code>tria.h</code>), and that allow us to create and output triangulations (<code><a class="el" href="grid__generator_8h.html">grid_generator.h</a></code> and <code><a class="el" href="grid__out_8h.html">grid_out.h</a></code>). Furthermore, we need the header file that declares the <a class="el" href="classManifold.html">Manifold</a> and <a class="el" href="classChartManifold.html">ChartManifold</a> classes that we will need to describe the geometry (<code>manifold.h</code>). We will then also need the <a class="el" href="namespaceGridTools.html#href_anchor">GridTools::transform()</a> function from the last of the following header files; the purpose for this function will become discussed at the point where we use it.</p>
@@ -299,7 +299,7 @@
 <div class="line">  </div>
 <div class="ttc" id="anamespacedealii_html"><div class="ttname"><a href="namespacedealii.html">dealii</a></div><div class="ttdef"><b>Definition</b> <a href="namespace__dealii_8h_source.html#href_anchor">namespace_dealii.h:26</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="DescribingtopographyAfricaTopography"></a> </p><h3>Describing topography: AfricaTopography</h3>
-<p>The first significant part of this program is the class that describes the topography <picture><source srcset="form_5622_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h(\hat phi,\hat \theta)$" src="form_5622.png"/></picture> as a function of longitude and latitude. As discussed in the introduction, we will make our life a bit easier here by not writing the class in the most general way possible but by only writing it for the particular purpose we are interested in here: interpolating data obtained from one very specific data file that contains information about a particular area of the world for which we know the extents.</p>
+<p>The first significant part of this program is the class that describes the topography <picture><source srcset="form_5686_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h(\hat phi,\hat \theta)$" src="form_5686.png"/></picture> as a function of longitude and latitude. As discussed in the introduction, we will make our life a bit easier here by not writing the class in the most general way possible but by only writing it for the particular purpose we are interested in here: interpolating data obtained from one very specific data file that contains information about a particular area of the world for which we know the extents.</p>
 <p>The general layout of the class has been discussed already above. Following is its declaration, including three static member functions that we will need in initializing the <code>topography_data</code> member variable.</p>
 <div class="fragment"><div class="line">    <span class="keyword">class </span>AfricaTopography</div>
 <div class="line">    {</div>
@@ -315,7 +315,7 @@
 <div class="line">    };</div>
 <div class="line">  </div>
 <div class="line">  </div>
-</div><!-- fragment --><p>Let us move to the implementation of the class. The interesting parts of the class are the constructor and the <code>value()</code> function. The former initializes the <a class="el" href="classFunctions_1_1InterpolatedUniformGridData.html">Functions::InterpolatedUniformGridData</a> member variable and we will use the constructor that requires us to pass in the end points of the 2-dimensional data set we want to interpolate (which are here given by the intervals <picture><source srcset="form_5623_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-6.983333, 11.98333]$" src="form_5623.png"/></picture>, using the trick of switching end points discussed in the introduction, and <picture><source srcset="form_5624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[25, 35.983333]$" src="form_5624.png"/></picture>, both given in degrees), the number of intervals into which the data is split (379 in latitude direction and 219 in longitude direction, for a total of <picture><source srcset="form_5625_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$380\times 220$" src="form_5625.png"/></picture> data points), and a <a class="el" href="classTable.html">Table</a> object that contains the data. The data then of course has size <picture><source srcset="form_5625_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$380\times 220$" src="form_5625.png"/></picture> and we initialize it by providing an iterator to the first of the 83,600 elements of a std::vector object returned by the <code>get_data()</code> function below. Note that all of the member functions we call here are static because (i) they do not access any member variables of the class, and (ii) because they are called at a time when the object is not initialized fully anyway.</p>
+</div><!-- fragment --><p>Let us move to the implementation of the class. The interesting parts of the class are the constructor and the <code>value()</code> function. The former initializes the <a class="el" href="classFunctions_1_1InterpolatedUniformGridData.html">Functions::InterpolatedUniformGridData</a> member variable and we will use the constructor that requires us to pass in the end points of the 2-dimensional data set we want to interpolate (which are here given by the intervals <picture><source srcset="form_5687_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-6.983333, 11.98333]$" src="form_5687.png"/></picture>, using the trick of switching end points discussed in the introduction, and <picture><source srcset="form_5688_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[25, 35.983333]$" src="form_5688.png"/></picture>, both given in degrees), the number of intervals into which the data is split (379 in latitude direction and 219 in longitude direction, for a total of <picture><source srcset="form_5689_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$380\times 220$" src="form_5689.png"/></picture> data points), and a <a class="el" href="classTable.html">Table</a> object that contains the data. The data then of course has size <picture><source srcset="form_5689_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$380\times 220$" src="form_5689.png"/></picture> and we initialize it by providing an iterator to the first of the 83,600 elements of a std::vector object returned by the <code>get_data()</code> function below. Note that all of the member functions we call here are static because (i) they do not access any member variables of the class, and (ii) because they are called at a time when the object is not initialized fully anyway.</p>
 <div class="fragment"><div class="line">    AfricaTopography::AfricaTopography()</div>
 <div class="line">      : topography_data({{std::make_pair(-6.983333, 11.966667),</div>
 <div class="line">                          std::make_pair(25, 35.95)}},</div>
@@ -415,7 +415,7 @@
 <div class="line">    }</div>
 <div class="line">  </div>
 <div class="line">  </div>
-</div><!-- fragment --><p>The following two functions then define the forward and inverse transformations that correspond to the WGS 84 reference shape of Earth. The forward transform follows the formula shown in the introduction. The inverse transform is significantly more complicated and is, at the very least, not intuitive. It also suffers from the fact that it returns an angle that at the end of the function we need to clip back into the interval <picture><source srcset="form_5626_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,2\pi]$" src="form_5626.png"/></picture> if it should have escaped from there.</p>
+</div><!-- fragment --><p>The following two functions then define the forward and inverse transformations that correspond to the WGS 84 reference shape of Earth. The forward transform follows the formula shown in the introduction. The inverse transform is significantly more complicated and is, at the very least, not intuitive. It also suffers from the fact that it returns an angle that at the end of the function we need to clip back into the interval <picture><source srcset="form_5690_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,2\pi]$" src="form_5690.png"/></picture> if it should have escaped from there.</p>
 <div class="fragment"><div class="line">    <a class="code hl_class" href="classPoint.html">Point&lt;3&gt;</a> AfricaGeometry::push_forward_wgs84(<span class="keyword">const</span> <a class="code hl_class" href="classPoint.html">Point&lt;3&gt;</a> &amp;phi_theta_d) <span class="keyword">const</span></div>
 <div class="line">    {</div>
 <div class="line">      <span class="keyword">const</span> <span class="keywordtype">double</span> phi   = phi_theta_d[0];</div>
@@ -485,7 +485,7 @@
 <div class="line">  </div>
 <div class="ttc" id="anamespacePhysics_1_1Elasticity_1_1Kinematics_html_a93f65b0385560a34ec1d3c5ec5a882b8"><div class="ttname"><a href="namespacePhysics_1_1Elasticity_1_1Kinematics.html#href_anchor">Physics::Elasticity::Kinematics::d</a></div><div class="ttdeci">SymmetricTensor&lt; 2, dim, Number &gt; d(const Tensor&lt; 2, dim, Number &gt; &amp;F, const Tensor&lt; 2, dim, Number &gt; &amp;dF_dt)</div></div>
 </div><!-- fragment --><p><a class="anchor" id="Creatingthemesh"></a> </p><h3>Creating the mesh</h3>
-<p>Having so described the properties of the geometry, not it is time to deal with the mesh used to discretize it. To this end, we create objects for the geometry and triangulation, and then proceed to create a <picture><source srcset="form_5627_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1\times 2\times 1$" src="form_5627.png"/></picture> rectangular mesh that corresponds to the reference domain <picture><source srcset="form_5588_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U=[26,35]\times[-10,5]\times[-500000,0]$" src="form_5588.png"/></picture>. We choose this number of subdivisions because it leads to cells that are roughly like cubes instead of stretched in one direction or another.</p>
+<p>Having so described the properties of the geometry, not it is time to deal with the mesh used to discretize it. To this end, we create objects for the geometry and triangulation, and then proceed to create a <picture><source srcset="form_5691_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1\times 2\times 1$" src="form_5691.png"/></picture> rectangular mesh that corresponds to the reference domain <picture><source srcset="form_5658_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat U=[26,35]\times[-10,5]\times[-500000,0]$" src="form_5658.png"/></picture>. We choose this number of subdivisions because it leads to cells that are roughly like cubes instead of stretched in one direction or another.</p>
 <p>Of course, we are not actually interested in meshing the reference domain. We are interested in meshing the real domain. Consequently, we will use the <a class="el" href="namespaceGridTools.html#href_anchor">GridTools::transform()</a> function that simply moves every point of a triangulation according to a given transformation. The transformation function it wants is a function that takes as its single argument a point in the reference domain and returns the corresponding location in the domain that we want to map to. This is, of course, exactly the push forward function of the geometry we use. We wrap it by a lambda function to obtain the kind of function object required for the transformation.</p>
 <div class="fragment"><div class="line">    <span class="keywordtype">void</span> run()</div>
 <div class="line">    {</div>
@@ -519,8 +519,8 @@
 <div class="line">      <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;cell : <a class="code hl_variable" href="p4est__wrappers_8cc.html#href_anchor">triangulation</a>.active_cell_iterators())</div>
 <div class="line">        cell-&gt;set_all_manifold_ids(0);</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>The last step is to refine the mesh beyond its initial <picture><source srcset="form_5628_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1\times 2\times
-   1$" src="form_5628.png"/></picture> coarse mesh. We could just refine globally a number of times, but since for the purpose of this tutorial program we're really only interested in what is happening close to the surface, we just refine 6 times all of the cells that have a face at a boundary with indicator 5. Looking this up in the documentation of the <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::subdivided_hyper_rectangle()</a> function we have used above reveals that boundary indicator 5 corresponds to the top surface of the domain (and this is what the last <code>true</code> argument in the call to <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::subdivided_hyper_rectangle()</a> above meant: to "color" the boundaries by assigning each boundary a unique boundary indicator).</p>
+</div><!-- fragment --><p>The last step is to refine the mesh beyond its initial <picture><source srcset="form_5692_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1\times 2\times
+   1$" src="form_5692.png"/></picture> coarse mesh. We could just refine globally a number of times, but since for the purpose of this tutorial program we're really only interested in what is happening close to the surface, we just refine 6 times all of the cells that have a face at a boundary with indicator 5. Looking this up in the documentation of the <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::subdivided_hyper_rectangle()</a> function we have used above reveals that boundary indicator 5 corresponds to the top surface of the domain (and this is what the last <code>true</code> argument in the call to <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::subdivided_hyper_rectangle()</a> above meant: to "color" the boundaries by assigning each boundary a unique boundary indicator).</p>
 <div class="fragment"><div class="line">      <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; 6; ++i)</div>
 <div class="line">        {</div>
 <div class="line">          <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> &amp;cell : <a class="code hl_variable" href="p4est__wrappers_8cc.html#href_anchor">triangulation</a>.active_cell_iterators())</div>
@@ -682,9 +682,9 @@
 <p>This all begs two questions: first, does it matter, and second, could this be fixed. Let us discuss these in the following:</p>
 <ul>
 <li>
-<p class="startli">Does it matter? It is almost certainly true that this depends on the equation you are solving. For example, it is known that solving the Euler equations of gas dynamics on complex geometries requires highly accurate boundary descriptions to ensure convergence of quantities that are measure the flow close to the boundary. On the other hand, equations with elliptic components (e.g., the Laplace or Stokes equations) are typically rather forgiving of these issues: one does quadrature anyway to approximate integrals, and further approximating the geometry may not do as much harm as one could fear given that the volume of the overlaps or gaps at every hanging node is only <picture><source srcset="form_5629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(h^d)$" src="form_5629.png"/></picture> even with a linear mapping and <picture><source srcset="form_5630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal
-  O}(h^{d+p-1})$" src="form_5630.png"/></picture> for a mapping of degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>. (You can see this by considering that in 2d the gap/overlap is a triangle with base <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> and height <picture><source srcset="form_5631_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal
-  O}(h)$" src="form_5631.png"/></picture>; in 3d, it is a pyramid-like structure with base area <picture><source srcset="form_5632_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^2$" src="form_5632.png"/></picture> and height <picture><source srcset="form_5633_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(h)$" src="form_5633.png"/></picture>. Similar considerations apply for higher order mappings where the height of the gaps/overlaps is <picture><source srcset="form_5634_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(h^p)$" src="form_5634.png"/></picture>.) In other words, if you use a linear mapping with linear elements, the error in the volume you integrate over is already at the same level as the integration error using the usual Gauss quadrature. Of course, for higher order elements one would have to choose matching mapping objects.</p>
+<p class="startli">Does it matter? It is almost certainly true that this depends on the equation you are solving. For example, it is known that solving the Euler equations of gas dynamics on complex geometries requires highly accurate boundary descriptions to ensure convergence of quantities that are measure the flow close to the boundary. On the other hand, equations with elliptic components (e.g., the Laplace or Stokes equations) are typically rather forgiving of these issues: one does quadrature anyway to approximate integrals, and further approximating the geometry may not do as much harm as one could fear given that the volume of the overlaps or gaps at every hanging node is only <picture><source srcset="form_5693_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(h^d)$" src="form_5693.png"/></picture> even with a linear mapping and <picture><source srcset="form_5694_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal
+  O}(h^{d+p-1})$" src="form_5694.png"/></picture> for a mapping of degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>. (You can see this by considering that in 2d the gap/overlap is a triangle with base <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> and height <picture><source srcset="form_5695_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal
+  O}(h)$" src="form_5695.png"/></picture>; in 3d, it is a pyramid-like structure with base area <picture><source srcset="form_5696_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^2$" src="form_5696.png"/></picture> and height <picture><source srcset="form_5697_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(h)$" src="form_5697.png"/></picture>. Similar considerations apply for higher order mappings where the height of the gaps/overlaps is <picture><source srcset="form_5698_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(h^p)$" src="form_5698.png"/></picture>.) In other words, if you use a linear mapping with linear elements, the error in the volume you integrate over is already at the same level as the integration error using the usual Gauss quadrature. Of course, for higher order elements one would have to choose matching mapping objects.</p>
 <p class="interli">Another point of view on why it is probably not worth worrying too much about the issue is that there is certainly no narrative in the community of numerical analysts that these issues are a major concern one needs to watch out for when using complex geometries. If it does not seem to be discussed often among practitioners, if ever at all, then it is at least not something people have identified as a common problem.</p>
 <p class="interli">This issue is not dissimilar to having hanging nodes at curved boundaries where the geometry description of the boundary typically pulls a hanging node onto the boundary whereas the large edge remains straight, making the adjacent small and large cells not match each other. Although this behavior existed in deal.II since its beginning, 15 years before manifold descriptions became available, it did not ever come up in mailing list discussions or conversations with colleagues.</p>
 <p class="endli"></p>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_55.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_55.html	2024-03-17 21:57:47.531259547 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_55.html	2024-03-17 21:57:47.527259522 +0000
@@ -140,7 +140,7 @@
 <li>You can implement various other tasks for parallel programs: error computation, writing graphical output, etc.</li>
 <li>You can visualize vector fields, stream lines, and contours of vector quantities.</li>
 </ul>
-<p>We are solving for a velocity <picture><source srcset="form_3394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}$" src="form_3394.png"/></picture> and pressure <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> that satisfy the Stokes equation, which reads  </p><p class="formulaDsp">
+<p>We are solving for a velocity <picture><source srcset="form_3258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}$" src="form_3258.png"/></picture> and pressure <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> that satisfy the Stokes equation, which reads  </p><p class="formulaDsp">
 <picture><source srcset="form_5699_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   - \triangle \textbf{u} + \nabla p &amp;=&amp; \textbf{f}, \\
   -\textrm{div}\; \textbf{u} &amp;=&amp; 0.
@@ -149,8 +149,8 @@
 <p><a class="anchor" id="Optimalpreconditioners"></a></p><h3>Optimal preconditioners</h3>
 <p>Make sure that you read (even better: try) what is described in "Block Schur
 complement preconditioner" in the "Possible Extensions" section in <a class="el" href="step_22.html">step-22</a>. Like described there, we are going to solve the block system using a Krylov method and a block preconditioner.</p>
-<p>Our goal here is to construct a very simple (maybe the simplest?) optimal preconditioner for the linear system. A preconditioner is called "optimal" or "of optimal complexity", if the number of iterations of the preconditioned system is independent of the mesh size <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>. You can extend that definition to also require indepence of the number of processors used (we will discuss that in the results section), the computational domain and the mesh quality, the test case itself, the polynomial degree of the finite element space, and more.</p>
-<p>Why is a constant number of iterations considered to be "optimal"? Assume the discretized PDE gives a linear system with N unknowns. Because the matrix coming from the FEM discretization is sparse, a matrix-vector product can be done in O(N) time. A preconditioner application can also only be O(N) at best (for example doable with multigrid methods). If the number of iterations required to solve the linear system is independent of <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> (and therefore N), the total cost of solving the system will be O(N). It is not possible to beat this complexity, because even looking at all the entries of the right-hand side already takes O(N) time. For more information see <b>[elman2005]</b>, Chapter 2.5 (<a class="el" href="classMultigrid.html">Multigrid</a>).</p>
+<p>Our goal here is to construct a very simple (maybe the simplest?) optimal preconditioner for the linear system. A preconditioner is called "optimal" or "of optimal complexity", if the number of iterations of the preconditioned system is independent of the mesh size <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>. You can extend that definition to also require indepence of the number of processors used (we will discuss that in the results section), the computational domain and the mesh quality, the test case itself, the polynomial degree of the finite element space, and more.</p>
+<p>Why is a constant number of iterations considered to be "optimal"? Assume the discretized PDE gives a linear system with N unknowns. Because the matrix coming from the FEM discretization is sparse, a matrix-vector product can be done in O(N) time. A preconditioner application can also only be O(N) at best (for example doable with multigrid methods). If the number of iterations required to solve the linear system is independent of <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> (and therefore N), the total cost of solving the system will be O(N). It is not possible to beat this complexity, because even looking at all the entries of the right-hand side already takes O(N) time. For more information see <b>[elman2005]</b>, Chapter 2.5 (<a class="el" href="classMultigrid.html">Multigrid</a>).</p>
 <p>The preconditioner described here is even simpler than the one described in <a class="el" href="step_22.html">step-22</a> and will typically require more iterations and consequently time to solve. When considering preconditioners, optimality is not the only important metric. But an optimal and expensive preconditioner is typically more desirable than a cheaper, non-optimal one. This is because, eventually, as the mesh size becomes smaller and smaller and linear problems become bigger and bigger, the former will eventually beat the latter.</p>
 <p><a class="anchor" id="Thesolverandpreconditioner"></a></p><h3>The solver and preconditioner</h3>
 <p>We precondition the linear system  </p><p class="formulaDsp">
@@ -181,14 +181,14 @@
 \end{eqnarray*}" src="form_5701.png"/></picture>
 </p>
 <p> where <picture><source srcset="form_5702_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S=-BA^{-1} B^T$" src="form_5702.png"/></picture> is the Schur complement.</p>
-<p>With this choice of <picture><source srcset="form_175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_175.png"/></picture>, assuming that we handle <picture><source srcset="form_1914_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^{-1}$" src="form_1914.png"/></picture> and <picture><source srcset="form_3281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^{-1}$" src="form_3281.png"/></picture> exactly (which is an "idealized" situation), the preconditioned linear system has three distinct eigenvalues independent of <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> and is therefore "optimal". See section 6.2.1 (especially p. 292) in <b>[elman2005]</b>. For comparison, using the ideal version of the upper block-triangular preconditioner in <a class="el" href="step_22.html">step-22</a> (also used in <a class="el" href="step_56.html">step-56</a>) would have all eigenvalues be equal to one.</p>
-<p>We will use approximations of the inverse operations in <picture><source srcset="form_3478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^{-1}$" src="form_3478.png"/></picture> that are (nearly) independent of <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>. In this situation, one can again show, that the eigenvalues are independent of <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>. For the Krylov method we choose MINRES, which is attractive for the analysis (iteration count is proven to be independent of <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>, see the remainder of the chapter 6.2.1 in <b>[elman2005]</b>), great from the computational standpoint (simpler and cheaper than GMRES for example), and applicable (matrix and preconditioner are symmetric).</p>
-<p>For the approximations we will use a CG solve with the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> in the pressure space for approximating the action of <picture><source srcset="form_3281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^{-1}$" src="form_3281.png"/></picture>. Note that the mass matrix is spectrally equivalent to <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>. We can expect the number of CG iterations to be independent of <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>, even with a simple preconditioner like ILU.</p>
-<p>For the approximation of the velocity block <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> we will perform a single AMG V-cycle. In practice this choice is not exactly independent of <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>, which can explain the slight increase in iteration numbers. A possible explanation is that the coarsest level will be solved exactly and the number of levels and size of the coarsest matrix is not predictable.</p>
+<p>With this choice of <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_149.png"/></picture>, assuming that we handle <picture><source srcset="form_1914_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^{-1}$" src="form_1914.png"/></picture> and <picture><source srcset="form_3138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^{-1}$" src="form_3138.png"/></picture> exactly (which is an "idealized" situation), the preconditioned linear system has three distinct eigenvalues independent of <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> and is therefore "optimal". See section 6.2.1 (especially p. 292) in <b>[elman2005]</b>. For comparison, using the ideal version of the upper block-triangular preconditioner in <a class="el" href="step_22.html">step-22</a> (also used in <a class="el" href="step_56.html">step-56</a>) would have all eigenvalues be equal to one.</p>
+<p>We will use approximations of the inverse operations in <picture><source srcset="form_3342_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^{-1}$" src="form_3342.png"/></picture> that are (nearly) independent of <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>. In this situation, one can again show, that the eigenvalues are independent of <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>. For the Krylov method we choose MINRES, which is attractive for the analysis (iteration count is proven to be independent of <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>, see the remainder of the chapter 6.2.1 in <b>[elman2005]</b>), great from the computational standpoint (simpler and cheaper than GMRES for example), and applicable (matrix and preconditioner are symmetric).</p>
+<p>For the approximations we will use a CG solve with the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> in the pressure space for approximating the action of <picture><source srcset="form_3138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^{-1}$" src="form_3138.png"/></picture>. Note that the mass matrix is spectrally equivalent to <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>. We can expect the number of CG iterations to be independent of <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>, even with a simple preconditioner like ILU.</p>
+<p>For the approximation of the velocity block <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> we will perform a single AMG V-cycle. In practice this choice is not exactly independent of <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>, which can explain the slight increase in iteration numbers. A possible explanation is that the coarsest level will be solved exactly and the number of levels and size of the coarsest matrix is not predictable.</p>
 <p><a class="anchor" id="Thetestcase"></a></p><h3>The testcase</h3>
 <p>We will construct a manufactured solution based on the classical Kovasznay problem, see <b>[kovasznay1948laminar]</b>. Here is an image of the solution colored by the x velocity including streamlines of the velocity:</p>
 <p><img src="https://www.dealii.org/images/steps/developer/step-55.solution.png" alt="" class="inline"/></p>
-<p>We have to cheat here, though, because we are not solving the non-linear Navier-Stokes equations, but the linear Stokes system without convective term. Therefore, to recreate the exact same solution, we use the method of manufactured solutions with the solution of the Kovasznay problem. This will effectively move the convective term into the right-hand side <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture>.</p>
+<p>We have to cheat here, though, because we are not solving the non-linear Navier-Stokes equations, but the linear Stokes system without convective term. Therefore, to recreate the exact same solution, we use the method of manufactured solutions with the solution of the Kovasznay problem. This will effectively move the convective term into the right-hand side <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture>.</p>
 <p>The right-hand side is computed using the script "reference.py" and we use the exact solution for boundary conditions and error computation.</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
 <div class="fragment"><div class="line">  #include &lt;deal.II/base/quadrature_lib.h&gt;</div>
@@ -1026,7 +1026,7 @@
 <div class="ttc" id="anamespaceVectorTools_html_a69967cb7a148a7169963126249213db1aa3903caf348e2d5dc54d1b49e15c1e8e"><div class="ttname"><a href="namespaceVectorTools.html#href_anchor">VectorTools::L2_norm</a></div><div class="ttdeci">@ L2_norm</div><div class="ttdef"><b>Definition</b> <a href="vector__tools__common_8h_source.html#href_anchor">vector_tools_common.h:113</a></div></div>
 <div class="ttc" id="anamespaceVectorTools_html_a761f008bdeb7d94a69205ae824deefad"><div class="ttname"><a href="namespaceVectorTools.html#href_anchor">VectorTools::interpolate</a></div><div class="ttdeci">void interpolate(const Mapping&lt; dim, spacedim &gt; &amp;mapping, const DoFHandler&lt; dim, spacedim &gt; &amp;dof, const Function&lt; spacedim, typename VectorType::value_type &gt; &amp;function, VectorType &amp;vec, const ComponentMask &amp;component_mask=ComponentMask())</div></div>
 </div><!-- fragment --><p> <a class="anchor" id="Results"></a></p><h1>Results</h1>
-<p>As expected from the discussion above, the number of iterations is independent of the number of processors and only very slightly dependent on <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>:</p>
+<p>As expected from the discussion above, the number of iterations is independent of the number of processors and only very slightly dependent on <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>:</p>
 <table class="doxtable">
 <tr>
 <th colspan="2">PETSc </th><th colspan="8">number of processors  </th></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_56.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_56.html	2024-03-17 21:57:47.615260065 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_56.html	2024-03-17 21:57:47.615260065 +0000
@@ -141,7 +141,7 @@
 <dl class="section note"><dt>Note</dt><dd>If you use this program as a basis for your own work, please consider citing it in your list of references. The initial version of this work was contributed to the deal.II project by the authors listed in the following citation:  <a href="https://doi.org/10.5281/zenodo.400995"><img src="https://zenodo.org/badge/DOI/10.5281/zenodo.400995.svg" alt="10.5281/zenodo.400995"/></a> </dd></dl>
 <p><a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p><a class="anchor" id="StokesProblem"></a></p><h3>Stokes Problem </h3>
-<p>The purpose of this tutorial is to create an efficient linear solver for the Stokes equation and compare it to alternative approaches. Here, we will use FGMRES with geometric multigrid as a preconditioner velocity block, and we will show in the results section that this is a fundamentally better approach than the linear solvers used in <a class="el" href="step_22.html">step-22</a> (including the scheme described in "Possible Extensions"). Fundamentally, this is because only with multigrid it is possible to get <picture><source srcset="form_5704_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(n)$" src="form_5704.png"/></picture> solve time, where <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> is the number of unknowns of the linear system. Using the <a class="el" href="classTimer.html">Timer</a> class, we collect some statistics to compare setup times, solve times, and number of iterations. We also compute errors to make sure that what we have implemented is correct.</p>
+<p>The purpose of this tutorial is to create an efficient linear solver for the Stokes equation and compare it to alternative approaches. Here, we will use FGMRES with geometric multigrid as a preconditioner velocity block, and we will show in the results section that this is a fundamentally better approach than the linear solvers used in <a class="el" href="step_22.html">step-22</a> (including the scheme described in "Possible Extensions"). Fundamentally, this is because only with multigrid it is possible to get <picture><source srcset="form_5704_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$O(n)$" src="form_5704.png"/></picture> solve time, where <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> is the number of unknowns of the linear system. Using the <a class="el" href="classTimer.html">Timer</a> class, we collect some statistics to compare setup times, solve times, and number of iterations. We also compute errors to make sure that what we have implemented is correct.</p>
 <p>Let <picture><source srcset="form_5705_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u \in H_0^1 = \{ u \in H^1(\Omega), u|_{\partial \Omega} = 0 \}$" src="form_5705.png"/></picture> and <picture><source srcset="form_5706_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p \in L_*^2 = \{ p \in L^2(\Omega), \int_\Omega p = 0
 \}$" src="form_5706.png"/></picture>. The Stokes equations read as follows in non-dimensionalized form:</p>
 <p class="formulaDsp">
@@ -160,7 +160,7 @@
 \left(\begin{array}{c} F \\ 0 \end{array}\right).
 \end{eqnarray*}" src="form_5709.png"/></picture>
 </p>
-<p>Our goal is to compare several solution approaches. While <a class="el" href="step_22.html">step-22</a> solves the linear system using a "Schur complement approach" in two separate steps, we instead attack the block system at once using FMGRES with an efficient preconditioner, in the spirit of the approach outlined in the "Results" section of <a class="el" href="step_22.html">step-22</a>. The idea is as follows: if we find a block preconditioner <picture><source srcset="form_175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_175.png"/></picture> such that the matrix</p>
+<p>Our goal is to compare several solution approaches. While <a class="el" href="step_22.html">step-22</a> solves the linear system using a "Schur complement approach" in two separate steps, we instead attack the block system at once using FMGRES with an efficient preconditioner, in the spirit of the approach outlined in the "Results" section of <a class="el" href="step_22.html">step-22</a>. The idea is as follows: if we find a block preconditioner <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_149.png"/></picture> such that the matrix</p>
 <p class="formulaDsp">
 <picture><source srcset="form_5710_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \left(\begin{array}{cc} A &amp; B^T \\ B &amp; 0 \end{array}\right) P^{-1}
@@ -173,7 +173,7 @@
  S \end{array}\right)^{-1}
 \end{eqnarray*}" src="form_5712.png"/></picture>
 </p>
-<p>is a good choice. Let <picture><source srcset="form_5713_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widetilde{A^{-1}}$" src="form_5713.png"/></picture> be an approximation of <picture><source srcset="form_1914_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^{-1}$" src="form_1914.png"/></picture> and <picture><source srcset="form_5714_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widetilde{S^{-1}}$" src="form_5714.png"/></picture> of <picture><source srcset="form_3281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^{-1}$" src="form_3281.png"/></picture>, we see  </p><p class="formulaDsp">
+<p>is a good choice. Let <picture><source srcset="form_5713_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widetilde{A^{-1}}$" src="form_5713.png"/></picture> be an approximation of <picture><source srcset="form_1914_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^{-1}$" src="form_1914.png"/></picture> and <picture><source srcset="form_5714_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widetilde{S^{-1}}$" src="form_5714.png"/></picture> of <picture><source srcset="form_3138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S^{-1}$" src="form_3138.png"/></picture>, we see  </p><p class="formulaDsp">
 <picture><source srcset="form_5715_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 P^{-1} =
 \left(\begin{array}{cc} A^{-1} &amp; 0 \\ 0 &amp; I \end{array}\right)
@@ -185,9 +185,9 @@
 \left(\begin{array}{cc} I &amp; 0 \\ 0 &amp; \widetilde{S^{-1}} \end{array}\right).
   \end{eqnarray*}" src="form_5715.png"/></picture>
 </p>
-<p>Since <picture><source srcset="form_175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_175.png"/></picture> is aimed to be a preconditioner only, we shall use the approximations on the right in the equation above.</p>
+<p>Since <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_149.png"/></picture> is aimed to be a preconditioner only, we shall use the approximations on the right in the equation above.</p>
 <p>As discussed in <a class="el" href="step_22.html">step-22</a>, <picture><source srcset="form_5716_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-M_p^{-1}=:\widetilde{S^{-1}} \approx
-S^{-1}$" src="form_5716.png"/></picture>, where <picture><source srcset="form_3487_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_p$" src="form_3487.png"/></picture> is the pressure <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> and is solved approximately by using CG with ILU as a preconditioner, and <picture><source srcset="form_5713_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widetilde{A^{-1}}$" src="form_5713.png"/></picture> is obtained by one of multiple methods: solving a linear system with CG and ILU as preconditioner, just using one application of an ILU, solving a linear system with CG and GMG (Geometric <a class="el" href="classMultigrid.html">Multigrid</a> as described in <a class="el" href="step_16.html">step-16</a>) as a preconditioner, or just performing a single V-cycle of GMG.</p>
+S^{-1}$" src="form_5716.png"/></picture>, where <picture><source srcset="form_3348_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_p$" src="form_3348.png"/></picture> is the pressure <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> and is solved approximately by using CG with ILU as a preconditioner, and <picture><source srcset="form_5713_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widetilde{A^{-1}}$" src="form_5713.png"/></picture> is obtained by one of multiple methods: solving a linear system with CG and ILU as preconditioner, just using one application of an ILU, solving a linear system with CG and GMG (Geometric <a class="el" href="classMultigrid.html">Multigrid</a> as described in <a class="el" href="step_16.html">step-16</a>) as a preconditioner, or just performing a single V-cycle of GMG.</p>
 <p>As a comparison, instead of FGMRES, we also use the direct solver UMFPACK on the whole system to compare our results with. If you want to use a direct solver (like UMFPACK), the system needs to be invertible. To avoid the one dimensional null space given by the constant pressures, we fix the first pressure unknown to zero. This is not necessary for the iterative solvers.</p>
 <p><a class="anchor" id="ReferenceSolution"></a></p><h3>Reference Solution </h3>
 <p>The test problem is a "Manufactured Solution" (see <a class="el" href="step_7.html">step-7</a> for details), and we choose <picture><source srcset="form_5717_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=(u_1,u_2,u_3)=(2\sin (\pi x), - \pi y \cos
@@ -424,7 +424,7 @@
 <div class="line">      <span class="keywordflow">return</span> return_value;</div>
 <div class="line">    }</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>Implementation of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture>. See the introduction for more information.</p>
+</div><!-- fragment --><p>Implementation of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture>. See the introduction for more information.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keyword">class </span>RightHandSide : <span class="keyword">public</span> <a class="code hl_class" href="classFunction.html">Function</a>&lt;dim&gt;</div>
 <div class="line">    {</div>
@@ -1357,14 +1357,14 @@
 <div class="line">  }</div>
 </div><!-- fragment --><p> <a class="anchor" id="Results"></a></p><h1>Results</h1>
 <p><a class="anchor" id="Errors"></a></p><h3>Errors </h3>
-<p>We first run the code and confirm that the finite element solution converges with the correct rates as predicted by the error analysis of mixed finite element problems. Given sufficiently smooth exact solutions <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> and <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>, the errors of the Taylor-Hood element <picture><source srcset="form_5726_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_k \times Q_{k-1}$" src="form_5726.png"/></picture> should be</p>
+<p>We first run the code and confirm that the finite element solution converges with the correct rates as predicted by the error analysis of mixed finite element problems. Given sufficiently smooth exact solutions <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> and <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>, the errors of the Taylor-Hood element <picture><source srcset="form_5726_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_k \times Q_{k-1}$" src="form_5726.png"/></picture> should be</p>
 <p class="formulaDsp">
 <picture><source srcset="form_5727_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \| u -u_h \|_0 + h ( \| u- u_h\|_1 + \|p - p_h \|_0)
 \leq C h^{k+1} ( \|u \|_{k+1} + \| p \|_k )
 \]" src="form_5727.png"/></picture>
 </p>
-<p>see for example Ern/Guermond "Theory and Practice of Finite Elements", Section 4.2.5 p195. This is indeed what we observe, using the <picture><source srcset="form_5041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2 \times Q_1$" src="form_5041.png"/></picture> element as an example (this is what is done in the code, but is easily changed in <code>main()</code>):</p>
+<p>see for example Ern/Guermond "Theory and Practice of Finite Elements", Section 4.2.5 p195. This is indeed what we observe, using the <picture><source srcset="form_5025_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2 \times Q_1$" src="form_5025.png"/></picture> element as an example (this is what is done in the code, but is easily changed in <code>main()</code>):</p>
 <table align="center" class="doxtable">
 <tr>
 <th>&#160; </th><th>L2 Velocity </th><th>Reduction </th><th>L2 Pressure </th><th>Reduction </th><th>H1 Velocity </th><th>Reduction  </th></tr>
@@ -1405,7 +1405,7 @@
 <p>The introduction also outlined another option to precondition the overall system, namely one in which we do not choose <picture><source srcset="form_5731_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widetilde
 {A^{-1}}=A^{-1}$" src="form_5731.png"/></picture> as in the table above, but in which <picture><source srcset="form_5713_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widetilde{A^{-1}}$" src="form_5713.png"/></picture> is only a single preconditioner application with GMG or ILU, respectively.</p>
 <p>This is in fact implemented in the code: Currently, the boolean <code>use_expensive</code> in <code>solve()</code> is set to <code>true</code>. The option mentioned above is obtained by setting it to <code>false</code>.</p>
-<p>What you will find is that the number of FGMRES iterations stays constant under refinement if you use GMG this way. This means that the <a class="el" href="classMultigrid.html">Multigrid</a> is optimal and independent of <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>.</p>
+<p>What you will find is that the number of FGMRES iterations stays constant under refinement if you use GMG this way. This means that the <a class="el" href="classMultigrid.html">Multigrid</a> is optimal and independent of <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>.</p>
 <p><a class="anchor" id="PlainProg"></a> </p><h1>The plain program</h1>
 <div class="fragment"><div class="line"><span class="comment">/* ---------------------------------------------------------------------</span></div>
 <div class="line"><span class="comment"> *</span></div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_57.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_57.html	2024-03-17 21:57:47.691260535 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_57.html	2024-03-17 21:57:47.687260510 +0000
@@ -147,7 +147,7 @@
 <p><a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p><a class="anchor" id="NavierStokesEquations"></a></p><h3>Navier Stokes Equations </h3>
 <p>In this tutorial we show how to solve the incompressible Navier Stokes equations (NSE) with Newton's method. The flow we consider here is assumed to be steady. In a domain <picture><source srcset="form_5732_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega \subset
-\mathbb{R}^{d}$" src="form_5732.png"/></picture>, <picture><source srcset="form_1463_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=2,3$" src="form_1463.png"/></picture>, with a piecewise smooth boundary <picture><source srcset="form_2866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega$" src="form_2866.png"/></picture>, and a given force field <picture><source srcset="form_5733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{f}$" src="form_5733.png"/></picture>, we seek a velocity field <picture><source srcset="form_3394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}$" src="form_3394.png"/></picture> and a pressure field <picture><source srcset="form_5734_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{p}$" src="form_5734.png"/></picture> satisfying  </p><p class="formulaDsp">
+\mathbb{R}^{d}$" src="form_5732.png"/></picture>, <picture><source srcset="form_1389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=2,3$" src="form_1389.png"/></picture>, with a piecewise smooth boundary <picture><source srcset="form_2907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega$" src="form_2907.png"/></picture>, and a given force field <picture><source srcset="form_5733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{f}$" src="form_5733.png"/></picture>, we seek a velocity field <picture><source srcset="form_3258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}$" src="form_3258.png"/></picture> and a pressure field <picture><source srcset="form_5734_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{p}$" src="form_5734.png"/></picture> satisfying  </p><p class="formulaDsp">
 <picture><source srcset="form_5735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 - \nu \Delta\textbf{u} + (\textbf{u} \cdot \nabla)\textbf{u} + \nabla p &amp;=&amp; \textbf{f}\\
 - \nabla \cdot \textbf{u} &amp;=&amp; 0.
@@ -229,7 +229,7 @@
 <p>Now, Newton's iteration can be used to solve for the update terms:</p>
 <ol>
 <li>
-Initialization: Initial guess <picture><source srcset="form_2560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0$" src="form_2560.png"/></picture> and <picture><source srcset="form_598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_0$" src="form_598.png"/></picture>, tolerance <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture>; </li>
+Initialization: Initial guess <picture><source srcset="form_2649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_0$" src="form_2649.png"/></picture> and <picture><source srcset="form_598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_0$" src="form_598.png"/></picture>, tolerance <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture>; </li>
 <li>
 Linear solve to compute update term <picture><source srcset="form_5754_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta\textbf{u}^{k}$" src="form_5754.png"/></picture> and <picture><source srcset="form_5755_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta p^k$" src="form_5755.png"/></picture>; </li>
 <li>
@@ -245,7 +245,7 @@
 </ol>
 <p><a class="anchor" id="FindinganInitialGuess"></a></p><h3>Finding an Initial Guess </h3>
 <p>The initial guess needs to be close enough to the solution for Newton's method to converge; hence, finding a good starting value is crucial to the nonlinear solver.</p>
-<p>When the viscosity <picture><source srcset="form_3078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3078.png"/></picture> is large, a good initial guess can be obtained by solving the Stokes equation with viscosity <picture><source srcset="form_3078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3078.png"/></picture>. While problem dependent, this works for <picture><source srcset="form_5761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu \geq 1/400$" src="form_5761.png"/></picture> for the test problem considered here.</p>
+<p>When the viscosity <picture><source srcset="form_3006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3006.png"/></picture> is large, a good initial guess can be obtained by solving the Stokes equation with viscosity <picture><source srcset="form_3006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3006.png"/></picture>. While problem dependent, this works for <picture><source srcset="form_5761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu \geq 1/400$" src="form_5761.png"/></picture> for the test problem considered here.</p>
 <p>However, the convective term <picture><source srcset="form_5762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{u}\cdot\nabla)\mathbf{u}$" src="form_5762.png"/></picture> will be dominant if the viscosity is small, like <picture><source srcset="form_5763_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/7500$" src="form_5763.png"/></picture> in test case 2. In this situation, we use a continuation method to set up a series of auxiliary NSEs with viscosity approaching the one in the target NSE. Correspondingly, we create a sequence <picture><source srcset="form_5764_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\nu_{i}\}$" src="form_5764.png"/></picture> with <picture><source srcset="form_5765_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu_{n}= \nu$" src="form_5765.png"/></picture>, and accept that the solutions to two NSE with viscosity <picture><source srcset="form_5766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu_{i}$" src="form_5766.png"/></picture> and <picture><source srcset="form_5767_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu_{i+1}$" src="form_5767.png"/></picture> are close if <picture><source srcset="form_5768_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\nu_{i} -
 \nu_{i+1}|$" src="form_5768.png"/></picture> is small. Then we use the solution to the NSE with viscosity <picture><source srcset="form_5766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu_{i}$" src="form_5766.png"/></picture> as the initial guess of the NSE with <picture><source srcset="form_5767_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu_{i+1}$" src="form_5767.png"/></picture>. This can be thought of as a staircase from the Stokes equations to the NSE we want to solve.</p>
 <p>That is, we first solve a Stokes problem  </p><p class="formulaDsp">
@@ -309,8 +309,8 @@
     \end{pmatrix}
 \end{eqnarray*}" src="form_5776.png"/></picture>
 </p>
-<p>with a parameter <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture> and an invertible matrix <picture><source srcset="form_192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W$" src="form_192.png"/></picture>. Here <picture><source srcset="form_5777_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma B^TW^{-1}B$" src="form_5777.png"/></picture> is the Augmented Lagrangian term; see <b>[Benzi2006]</b> for details.</p>
-<p>Denoting the system matrix of the new system by <picture><source srcset="form_1737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1737.png"/></picture> and the right-hand side by <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture>, we solve it iteratively with right preconditioning <picture><source srcset="form_3478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^{-1}$" src="form_3478.png"/></picture> as <picture><source srcset="form_5778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$GP^{-1}y = b$" src="form_5778.png"/></picture>, where  </p><p class="formulaDsp">
+<p>with a parameter <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture> and an invertible matrix <picture><source srcset="form_166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W$" src="form_166.png"/></picture>. Here <picture><source srcset="form_5777_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma B^TW^{-1}B$" src="form_5777.png"/></picture> is the Augmented Lagrangian term; see <b>[Benzi2006]</b> for details.</p>
+<p>Denoting the system matrix of the new system by <picture><source srcset="form_1739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1739.png"/></picture> and the right-hand side by <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture>, we solve it iteratively with right preconditioning <picture><source srcset="form_3342_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^{-1}$" src="form_3342.png"/></picture> as <picture><source srcset="form_5778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$GP^{-1}y = b$" src="form_5778.png"/></picture>, where  </p><p class="formulaDsp">
 <picture><source srcset="form_5779_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 P^{-1} =
   \begin{pmatrix}
@@ -319,13 +319,13 @@
   \end{pmatrix}^{-1}
 \end{eqnarray*}" src="form_5779.png"/></picture>
 </p>
-<p>with <picture><source srcset="form_5780_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{A} = A + \gamma B^TW^{-1}B$" src="form_5780.png"/></picture> and <picture><source srcset="form_5781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{S}$" src="form_5781.png"/></picture> is the corresponding Schur complement <picture><source srcset="form_5782_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{S} = B^T \tilde{A}^{-1} B$" src="form_5782.png"/></picture>. We let <picture><source srcset="form_5783_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W = M_p$" src="form_5783.png"/></picture> where <picture><source srcset="form_3487_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_p$" src="form_3487.png"/></picture> is the pressure <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>, then <picture><source srcset="form_5784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{S}^{-1}$" src="form_5784.png"/></picture> can be approximated by  </p><p class="formulaDsp">
+<p>with <picture><source srcset="form_5780_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{A} = A + \gamma B^TW^{-1}B$" src="form_5780.png"/></picture> and <picture><source srcset="form_5781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{S}$" src="form_5781.png"/></picture> is the corresponding Schur complement <picture><source srcset="form_5782_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{S} = B^T \tilde{A}^{-1} B$" src="form_5782.png"/></picture>. We let <picture><source srcset="form_5783_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W = M_p$" src="form_5783.png"/></picture> where <picture><source srcset="form_3348_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_p$" src="form_3348.png"/></picture> is the pressure <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>, then <picture><source srcset="form_5784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{S}^{-1}$" src="form_5784.png"/></picture> can be approximated by  </p><p class="formulaDsp">
 <picture><source srcset="form_5785_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 \tilde{S}^{-1} \approx -(\nu+\gamma)M_p^{-1}.
 \end{eqnarray*}" src="form_5785.png"/></picture>
 </p>
 <p>See <b>[Benzi2006]</b> for details.</p>
-<p>We decompose <picture><source srcset="form_3478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^{-1}$" src="form_3478.png"/></picture> as  </p><p class="formulaDsp">
+<p>We decompose <picture><source srcset="form_3342_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P^{-1}$" src="form_3342.png"/></picture> as  </p><p class="formulaDsp">
 <picture><source srcset="form_5786_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 P^{-1} =
   \begin{pmatrix}
@@ -342,18 +342,18 @@
   \end{pmatrix}.
 \end{eqnarray*}" src="form_5786.png"/></picture>
 </p>
-<p>Here two inexact solvers will be needed for <picture><source srcset="form_5787_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{A}^{-1}$" src="form_5787.png"/></picture> and <picture><source srcset="form_5784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{S}^{-1}$" src="form_5784.png"/></picture>, respectively (see <b>[Benzi2006]</b>). Since the pressure mass matrix is symmetric and positive definite, CG with ILU as a preconditioner is appropriate to use for <picture><source srcset="form_5784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{S}^{-1}$" src="form_5784.png"/></picture>. For simplicity, we use the direct solver UMFPACK for <picture><source srcset="form_5787_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{A}^{-1}$" src="form_5787.png"/></picture>. The last ingredient is a sparse matrix-vector product with <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B^T$" src="form_103.png"/></picture>. Instead of computing the matrix product in the augmented Lagrangian term in <picture><source srcset="form_4489_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{A}$" src="form_4489.png"/></picture>, we assemble Grad-Div stabilization  <picture><source srcset="form_5788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\nabla \cdot \phi _{i}, \nabla \cdot \phi _{j}) \approx (B^T
+<p>Here two inexact solvers will be needed for <picture><source srcset="form_5787_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{A}^{-1}$" src="form_5787.png"/></picture> and <picture><source srcset="form_5784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{S}^{-1}$" src="form_5784.png"/></picture>, respectively (see <b>[Benzi2006]</b>). Since the pressure mass matrix is symmetric and positive definite, CG with ILU as a preconditioner is appropriate to use for <picture><source srcset="form_5784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{S}^{-1}$" src="form_5784.png"/></picture>. For simplicity, we use the direct solver UMFPACK for <picture><source srcset="form_5787_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{A}^{-1}$" src="form_5787.png"/></picture>. The last ingredient is a sparse matrix-vector product with <picture><source srcset="form_96_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$B^T$" src="form_96.png"/></picture>. Instead of computing the matrix product in the augmented Lagrangian term in <picture><source srcset="form_4162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{A}$" src="form_4162.png"/></picture>, we assemble Grad-Div stabilization  <picture><source srcset="form_5788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\nabla \cdot \phi _{i}, \nabla \cdot \phi _{j}) \approx (B^T
 M_p^{-1}B)_{ij}$" src="form_5788.png"/></picture>, as explained in <b>[HeisterRapin2013]</b>.</p>
 <p><a class="anchor" id="TestCase"></a></p><h3>Test Case </h3>
-<p>We use the lid driven cavity flow as our test case; see <a href="http://www.cfd-online.com/Wiki/Lid-driven_cavity_problem">this page</a> for details. The computational domain is the unit square and the right-hand side is <picture><source srcset="form_3214_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=0$" src="form_3214.png"/></picture>. The boundary condition is  </p><p class="formulaDsp">
+<p>We use the lid driven cavity flow as our test case; see <a href="http://www.cfd-online.com/Wiki/Lid-driven_cavity_problem">this page</a> for details. The computational domain is the unit square and the right-hand side is <picture><source srcset="form_3106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=0$" src="form_3106.png"/></picture>. The boundary condition is  </p><p class="formulaDsp">
 <picture><source srcset="form_5789_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (u(x, y), v(x,y)) &amp;=&amp; (1,0) \qquad\qquad \textrm{if}\ y = 1 \\
   (u(x, y), v(x,y)) &amp;=&amp; (0,0) \qquad\qquad \textrm{otherwise}.
 \end{eqnarray*}" src="form_5789.png"/></picture>
 </p>
 <p>When solving this problem, the error consists of the nonlinear error (from Newton's iteration) and the discretization error (dependent on mesh size). The nonlinear part decreases with each Newton iteration and the discretization error reduces with mesh refinement. In this example, the solution from the coarse mesh is transferred to successively finer meshes and used as an initial guess. Therefore, the nonlinear error is always brought below the tolerance of Newton's iteration and the discretization error is reduced with each mesh refinement.</p>
-<p>Inside the loop, we involve three solvers: one for <picture><source srcset="form_5787_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{A}^{-1}$" src="form_5787.png"/></picture>, one for <picture><source srcset="form_4491_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_p^{-1}$" src="form_4491.png"/></picture> and one for <picture><source srcset="form_5790_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Gx=b$" src="form_5790.png"/></picture>. The first two solvers are invoked in the preconditioner and the outer solver gives us the update term. Overall convergence is controlled by the nonlinear residual; as Newton's method does not require an exact Jacobian, we employ FGMRES with a relative tolerance of only 1e-4 for the outer linear solver. In fact, we use the truncated Newton solve for this system. As described in <a class="el" href="step_22.html">step-22</a>, the inner linear solves are also not required to be done very accurately. Here we use CG with a relative tolerance of 1e-6 for the pressure mass matrix. As expected, we still see convergence of the nonlinear residual down to 1e-14. Also, we use a simple line search algorithm for globalization of the Newton method.</p>
-<p>The cavity reference values for <picture><source srcset="form_5791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Re}=400$" src="form_5791.png"/></picture> and <picture><source srcset="form_5792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Re}=7500$" src="form_5792.png"/></picture> are from <b>[Ghia1982]</b> and <b>[Erturk2005]</b>, respectively, where <picture><source srcset="form_4064_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Re}$" src="form_4064.png"/></picture> is the <a href="https://en.wikipedia.org/wiki/Reynolds_number">Reynolds number</a>. Here the viscosity is defined by <picture><source srcset="form_5793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/\mathrm{Re}$" src="form_5793.png"/></picture>. Even though we can still find a solution for <picture><source srcset="form_5794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Re}=10000$" src="form_5794.png"/></picture> and the papers cited throughout this introduction contain results for comparison, we limit our discussion here to <picture><source srcset="form_5792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Re}=7500$" src="form_5792.png"/></picture>. This is because the solution is no longer stationary starting around <picture><source srcset="form_5795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Re}=8000$" src="form_5795.png"/></picture> but instead becomes periodic, see <b>[Bruneau2006]</b> for details.</p>
+<p>Inside the loop, we involve three solvers: one for <picture><source srcset="form_5787_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{A}^{-1}$" src="form_5787.png"/></picture>, one for <picture><source srcset="form_4164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_p^{-1}$" src="form_4164.png"/></picture> and one for <picture><source srcset="form_5790_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Gx=b$" src="form_5790.png"/></picture>. The first two solvers are invoked in the preconditioner and the outer solver gives us the update term. Overall convergence is controlled by the nonlinear residual; as Newton's method does not require an exact Jacobian, we employ FGMRES with a relative tolerance of only 1e-4 for the outer linear solver. In fact, we use the truncated Newton solve for this system. As described in <a class="el" href="step_22.html">step-22</a>, the inner linear solves are also not required to be done very accurately. Here we use CG with a relative tolerance of 1e-6 for the pressure mass matrix. As expected, we still see convergence of the nonlinear residual down to 1e-14. Also, we use a simple line search algorithm for globalization of the Newton method.</p>
+<p>The cavity reference values for <picture><source srcset="form_5791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Re}=400$" src="form_5791.png"/></picture> and <picture><source srcset="form_5792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Re}=7500$" src="form_5792.png"/></picture> are from <b>[Ghia1982]</b> and <b>[Erturk2005]</b>, respectively, where <picture><source srcset="form_3953_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Re}$" src="form_3953.png"/></picture> is the <a href="https://en.wikipedia.org/wiki/Reynolds_number">Reynolds number</a>. Here the viscosity is defined by <picture><source srcset="form_5793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1/\mathrm{Re}$" src="form_5793.png"/></picture>. Even though we can still find a solution for <picture><source srcset="form_5794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Re}=10000$" src="form_5794.png"/></picture> and the papers cited throughout this introduction contain results for comparison, we limit our discussion here to <picture><source srcset="form_5792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Re}=7500$" src="form_5792.png"/></picture>. This is because the solution is no longer stationary starting around <picture><source srcset="form_5795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathrm{Re}=8000$" src="form_5795.png"/></picture> but instead becomes periodic, see <b>[Bruneau2006]</b> for details.</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
 <p><a class="anchor" id="Includefiles"></a> </p><h3>Include files</h3>
 <p>As usual, we start by including some well-known files:</p>
@@ -802,8 +802,8 @@
 <div class="line">  </div>
 <div class="ttc" id="asymmetric__tensor_8h_html_a82808d9c285700b167c758f42c79e833"><div class="ttname"><a href="symmetric__tensor_8h.html#href_anchor">trace</a></div><div class="ttdeci">DEAL_II_HOST constexpr Number trace(const SymmetricTensor&lt; 2, dim2, Number &gt; &amp;)</div></div>
 </div><!-- fragment --><p>If we were asked to assemble the Newton matrix, then we also built a pressure mass matrix in the bottom right block of the matrix. We only need this for the preconditioner, so we need to copy it in into a separate matrix object, followed by zeroing out this block in the Newton matrix.</p>
-<p>Note that settings this bottom right block to zero is not identical to not assembling anything in this block, because applying boundary values and hanging node constraints (in the <code>constraints_used.distribute_local_to_global()</code> call above) puts entries into this block. As a consequence, setting the <picture><source srcset="form_3470_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1,1)$" src="form_3470.png"/></picture> block to zero below does not result in what would have happened if we had just not assembled a pressure mass matrix in that block to begin with.</p>
-<p>The difference is that if we had not assembled anything in this block, dealing with constraint degrees of freedom would have put entries on the diagonal of the <picture><source srcset="form_3470_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1,1)$" src="form_3470.png"/></picture> block whereas the last operation below, zeroing out the entire block, results in a system matrix with rows and columns that are completely empty. In other words, the linear problem is singular. Luckily, however, the FGMRES solver we use appears to handle these rows and columns without any problem.</p>
+<p>Note that settings this bottom right block to zero is not identical to not assembling anything in this block, because applying boundary values and hanging node constraints (in the <code>constraints_used.distribute_local_to_global()</code> call above) puts entries into this block. As a consequence, setting the <picture><source srcset="form_3334_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1,1)$" src="form_3334.png"/></picture> block to zero below does not result in what would have happened if we had just not assembled a pressure mass matrix in that block to begin with.</p>
+<p>The difference is that if we had not assembled anything in this block, dealing with constraint degrees of freedom would have put entries on the diagonal of the <picture><source srcset="form_3334_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1,1)$" src="form_3334.png"/></picture> block whereas the last operation below, zeroing out the entire block, results in a system matrix with rows and columns that are completely empty. In other words, the linear problem is singular. Luckily, however, the FGMRES solver we use appears to handle these rows and columns without any problem.</p>
 <div class="fragment"><div class="line">      <span class="keywordflow">if</span> (assemble_matrix)</div>
 <div class="line">        {</div>
 <div class="line">          pressure_mass_matrix.reinit(sparsity_pattern.block(1, 1));</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_58.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_58.html	2024-03-17 21:57:47.763260979 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_58.html	2024-03-17 21:57:47.767261004 +0000
@@ -170,7 +170,7 @@
   \psi$" src="form_5811.png"/></picture> has no spatial or temporal derivatives, i.e., it is a purely local operator. It turns out that we have efficient methods for each of these terms (in particular, we have analytic solutions for the latter), and that we may be better off treating these terms differently and separately. We will explain this in more detail below.</li>
 </ul>
 <p><a class="anchor" id="Anoteaboutthecharacteroftheequations"></a></p><h3>A note about the character of the equations</h3>
-<p>At first glance, the equations appear to be parabolic and similar to the heat equation (see <a class="el" href="step_26.html">step-26</a>) as there is only a single time derivative and two spatial derivatives. But this is misleading. Indeed, that this is not the correct interpretation is more easily seen if we assume for a moment that the potential <picture><source srcset="form_5812_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V=0$" src="form_5812.png"/></picture> and <picture><source srcset="form_4323_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa=0$" src="form_4323.png"/></picture>. Then we have the equation  </p><p class="formulaDsp">
+<p>At first glance, the equations appear to be parabolic and similar to the heat equation (see <a class="el" href="step_26.html">step-26</a>) as there is only a single time derivative and two spatial derivatives. But this is misleading. Indeed, that this is not the correct interpretation is more easily seen if we assume for a moment that the potential <picture><source srcset="form_5812_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V=0$" src="form_5812.png"/></picture> and <picture><source srcset="form_4106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa=0$" src="form_4106.png"/></picture>. Then we have the equation  </p><p class="formulaDsp">
 <picture><source srcset="form_5813_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   - i \frac{\partial \psi}{\partial t}
   - \frac 12 \Delta \psi
@@ -188,7 +188,7 @@
   &amp;= 0.
 \end{align*}" src="form_5816.png"/></picture>
 </p>
-<p> Not surprisingly, the factor <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> in front of the time derivative couples the real and imaginary parts of the equation. If we want to understand this equation further, take the time derivative of one of the equations, say  </p><p class="formulaDsp">
+<p> Not surprisingly, the factor <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> in front of the time derivative couples the real and imaginary parts of the equation. If we want to understand this equation further, take the time derivative of one of the equations, say  </p><p class="formulaDsp">
 <picture><source srcset="form_5817_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \frac{\partial^2 w}{\partial t^2}
   - \frac 12 \Delta \frac{\partial v}{\partial t}
@@ -202,9 +202,9 @@
   &amp;= 0.
 \end{align*}" src="form_5818.png"/></picture>
 </p>
-<p> This equation is hyperbolic and similar in character to the wave equation. (This will also be obvious if you look at the video in the "Results" section of this program.) Furthermore, we could have arrived at the same equation for <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> as well. Consequently, a better assumption for the NLSE is to think of it as a hyperbolic, wave-propagation equation than as a diffusion equation such as the heat equation. (You may wonder whether it is correct that the operator <picture><source srcset="form_5819_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta^2$" src="form_5819.png"/></picture> appears with a positive sign whereas in the wave equation, <picture><source srcset="form_4074_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta$" src="form_4074.png"/></picture> has a negative sign. This is indeed correct: After multiplying by a test function and integrating by parts, we want to come out with a positive (semi-)definite form. So, from <picture><source srcset="form_5820_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u$" src="form_5820.png"/></picture> we obtain <picture><source srcset="form_5821_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$+(\nabla v,\nabla u)$" src="form_5821.png"/></picture>. Likewise, after integrating by parts twice, we obtain from <picture><source srcset="form_5822_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$+\Delta^2 u$" src="form_5822.png"/></picture> the form <picture><source srcset="form_5823_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$+(\Delta v,\Delta u)$" src="form_5823.png"/></picture>. In both cases do we get the desired positive sign.)</p>
+<p> This equation is hyperbolic and similar in character to the wave equation. (This will also be obvious if you look at the video in the "Results" section of this program.) Furthermore, we could have arrived at the same equation for <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> as well. Consequently, a better assumption for the NLSE is to think of it as a hyperbolic, wave-propagation equation than as a diffusion equation such as the heat equation. (You may wonder whether it is correct that the operator <picture><source srcset="form_5819_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta^2$" src="form_5819.png"/></picture> appears with a positive sign whereas in the wave equation, <picture><source srcset="form_3963_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta$" src="form_3963.png"/></picture> has a negative sign. This is indeed correct: After multiplying by a test function and integrating by parts, we want to come out with a positive (semi-)definite form. So, from <picture><source srcset="form_5820_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u$" src="form_5820.png"/></picture> we obtain <picture><source srcset="form_5821_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$+(\nabla v,\nabla u)$" src="form_5821.png"/></picture>. Likewise, after integrating by parts twice, we obtain from <picture><source srcset="form_5822_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$+\Delta^2 u$" src="form_5822.png"/></picture> the form <picture><source srcset="form_5823_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$+(\Delta v,\Delta u)$" src="form_5823.png"/></picture>. In both cases do we get the desired positive sign.)</p>
 <p>The real NLSE, of course, also has the terms <picture><source srcset="form_5824_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V\psi$" src="form_5824.png"/></picture> and <picture><source srcset="form_5825_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa|\psi|^2\psi$" src="form_5825.png"/></picture>. However, these are of lower order in the spatial derivatives, and while they are obviously important, they do not change the character of the equation.</p>
-<p>In any case, the purpose of this discussion is to figure out what time stepping scheme might be appropriate for the equation. The conclusions is that, as a hyperbolic-kind of equation, we need to choose a time step that satisfies a CFL-type condition. If we were to use an explicit method (which we will not), we would have to investigate the eigenvalues of the matrix that corresponds to the spatial operator. If you followed the discussions of the video lectures (See also <a href="http://www.math.colostate.edu/~bangerth/videos.676.26.html">video lecture 26</a>, <a href="http://www.math.colostate.edu/~bangerth/videos.676.27.html">video lecture 27</a>, <a href="http://www.math.colostate.edu/~bangerth/videos.676.28.html">video lecture 28</a>.) then you will remember that the pattern is that one needs to make sure that <picture><source srcset="form_5826_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k^s \propto h^t$" src="form_5826.png"/></picture> where <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> is the time step, <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> the mesh width, and <picture><source srcset="form_5827_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s,t$" src="form_5827.png"/></picture> are the orders of temporal and spatial derivatives. Whether you take the original equation ( <picture><source srcset="form_5828_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s=1,t=2$" src="form_5828.png"/></picture>) or the reformulation for only the real or imaginary part, the outcome is that we would need to choose <picture><source srcset="form_5829_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k \propto h^2$" src="form_5829.png"/></picture> if we were to use an explicit time stepping method. This is not feasible for the same reasons as in <a class="el" href="step_26.html">step-26</a> for the heat equation: It would yield impractically small time steps for even only modestly refined meshes. Rather, we have to use an implicit time stepping method and can then choose a more balanced <picture><source srcset="form_5830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k \propto h$" src="form_5830.png"/></picture>. Indeed, we will use the implicit Crank-Nicolson method as we have already done in <a class="el" href="step_23.html">step-23</a> before for the regular wave equation.</p>
+<p>In any case, the purpose of this discussion is to figure out what time stepping scheme might be appropriate for the equation. The conclusions is that, as a hyperbolic-kind of equation, we need to choose a time step that satisfies a CFL-type condition. If we were to use an explicit method (which we will not), we would have to investigate the eigenvalues of the matrix that corresponds to the spatial operator. If you followed the discussions of the video lectures (See also <a href="http://www.math.colostate.edu/~bangerth/videos.676.26.html">video lecture 26</a>, <a href="http://www.math.colostate.edu/~bangerth/videos.676.27.html">video lecture 27</a>, <a href="http://www.math.colostate.edu/~bangerth/videos.676.28.html">video lecture 28</a>.) then you will remember that the pattern is that one needs to make sure that <picture><source srcset="form_5826_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k^s \propto h^t$" src="form_5826.png"/></picture> where <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> is the time step, <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> the mesh width, and <picture><source srcset="form_5827_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s,t$" src="form_5827.png"/></picture> are the orders of temporal and spatial derivatives. Whether you take the original equation ( <picture><source srcset="form_5828_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s=1,t=2$" src="form_5828.png"/></picture>) or the reformulation for only the real or imaginary part, the outcome is that we would need to choose <picture><source srcset="form_5829_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k \propto h^2$" src="form_5829.png"/></picture> if we were to use an explicit time stepping method. This is not feasible for the same reasons as in <a class="el" href="step_26.html">step-26</a> for the heat equation: It would yield impractically small time steps for even only modestly refined meshes. Rather, we have to use an implicit time stepping method and can then choose a more balanced <picture><source srcset="form_5830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k \propto h$" src="form_5830.png"/></picture>. Indeed, we will use the implicit Crank-Nicolson method as we have already done in <a class="el" href="step_23.html">step-23</a> before for the regular wave equation.</p>
 <p><a class="anchor" id="Thegeneralideaofoperatorsplitting"></a></p><h3>The general idea of operator splitting</h3>
 <dl class="section note"><dt>Note</dt><dd>The material presented here is also discussed in <a href="http://www.math.colostate.edu/~bangerth/videos.676.30.25.html">video lecture 30.25</a>. (All video lectures are also available <a href="http://www.math.colostate.edu/~bangerth/videos.html">here</a>.)</dd></dl>
 <p>If one thought of the NLSE as an ordinary differential equation in which the right hand side happens to have spatial derivatives, i.e., write it as  </p><p class="formulaDsp">
@@ -342,7 +342,7 @@
  I^{(1)} + I^{(2)} + I^{(3)}.
 \end{align*}" src="form_5845.png"/></picture>
 </p>
-<p> This intuition is indeed correct, though the approximation is not exact: the difference between the exact left hand side and the term <picture><source srcset="form_5846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I^{(1)}+I^{(2)}+I^{(3)}$" src="form_5846.png"/></picture> (i.e., the difference between the <em>exact</em> increment for the exact solution <picture><source srcset="form_5834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(t)$" src="form_5834.png"/></picture> when moving from <picture><source srcset="form_440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_n$" src="form_440.png"/></picture> to <picture><source srcset="form_441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_{n+1}$" src="form_441.png"/></picture>, and the increment composed of the three parts on the right hand side), is proportional to <picture><source srcset="form_5847_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t=t_{n+1}-t_{n}$" src="form_5847.png"/></picture>. In other words, this approach introduces an error of size <picture><source srcset="form_3011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(\Delta t)$" src="form_3011.png"/></picture>. Nothing we have done so far has discretized anything in time or space, so the <em>overall</em> error is going to be <picture><source srcset="form_3011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(\Delta t)$" src="form_3011.png"/></picture> plus whatever error we commit when approximating the integrals (the temporal discretization error) plus whatever error we commit when approximating the spatial dependencies of <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_517.png"/></picture> (the spatial error).</p>
+<p> This intuition is indeed correct, though the approximation is not exact: the difference between the exact left hand side and the term <picture><source srcset="form_5846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I^{(1)}+I^{(2)}+I^{(3)}$" src="form_5846.png"/></picture> (i.e., the difference between the <em>exact</em> increment for the exact solution <picture><source srcset="form_5834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(t)$" src="form_5834.png"/></picture> when moving from <picture><source srcset="form_440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_n$" src="form_440.png"/></picture> to <picture><source srcset="form_441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t_{n+1}$" src="form_441.png"/></picture>, and the increment composed of the three parts on the right hand side), is proportional to <picture><source srcset="form_5847_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t=t_{n+1}-t_{n}$" src="form_5847.png"/></picture>. In other words, this approach introduces an error of size <picture><source srcset="form_3074_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(\Delta t)$" src="form_3074.png"/></picture>. Nothing we have done so far has discretized anything in time or space, so the <em>overall</em> error is going to be <picture><source srcset="form_3074_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(\Delta t)$" src="form_3074.png"/></picture> plus whatever error we commit when approximating the integrals (the temporal discretization error) plus whatever error we commit when approximating the spatial dependencies of <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_526.png"/></picture> (the spatial error).</p>
 <p>Before we continue with discussions about operator splitting, let us talk about why one would even want to go this way? The answer is simple: For some of the separate equations for the <picture><source srcset="form_5840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(k)}$" src="form_5840.png"/></picture>, we may have ways to solve them more efficiently than if we throw everything together and try to solve it at once. For example, and particularly pertinent in the current case: The equation for <picture><source srcset="form_5848_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(3)}$" src="form_5848.png"/></picture>, i.e.,  </p><p class="formulaDsp">
 <picture><source srcset="form_5849_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \frac{d\psi^{(3)}}{dt}
@@ -474,7 +474,7 @@
 </p>
 <p> (Compare this again with the "exact" computation of <picture><source srcset="form_5870_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(t_{n+1})$" src="form_5870.png"/></picture>: It only differs in how we approximate <picture><source srcset="form_5834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(t)$" src="form_5834.png"/></picture> in each of the three integrals.) In other words, Lie splitting is a lot simpler to implement that the original method outlined above because data handling is so much simpler.</p>
 <p><a class="anchor" id="OperatorsplittingtheStrangsplittingapproach"></a></p><h3>Operator splitting: the "Strang splitting" approach</h3>
-<p>As mentioned above, Lie splitting is only <picture><source srcset="form_3011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(\Delta t)$" src="form_3011.png"/></picture> accurate. This is acceptable if we were to use a first order time discretization, for example using the explicit or implicit Euler methods to solve the differential equations for <picture><source srcset="form_5840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(k)}$" src="form_5840.png"/></picture>. This is because these time integration methods introduce an error proportional to <picture><source srcset="form_1891_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t$" src="form_1891.png"/></picture> themselves, and so the splitting error is proportional to an error that we would introduce anyway, and does not diminish the overall convergence order.</p>
+<p>As mentioned above, Lie splitting is only <picture><source srcset="form_3074_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(\Delta t)$" src="form_3074.png"/></picture> accurate. This is acceptable if we were to use a first order time discretization, for example using the explicit or implicit Euler methods to solve the differential equations for <picture><source srcset="form_5840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(k)}$" src="form_5840.png"/></picture>. This is because these time integration methods introduce an error proportional to <picture><source srcset="form_1897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t$" src="form_1897.png"/></picture> themselves, and so the splitting error is proportional to an error that we would introduce anyway, and does not diminish the overall convergence order.</p>
 <p>But we typically want to use something higher order &ndash; say, a <a href="https://en.wikipedia.org/wiki/Crank%E2%80%93Nicolson_method">Crank-Nicolson</a> or <a href="https://en.wikipedia.org/wiki/Backward_differentiation_formula">BDF2</a> method &ndash; since these are often not more expensive than a simple Euler method. It would be a shame if we were to use a time stepping method that is <picture><source srcset="form_5872_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(\Delta t^2)$" src="form_5872.png"/></picture>, but then lose the accuracy again through the operator splitting.</p>
 <p>This is where the <a href="https://en.wikipedia.org/wiki/Strang_splitting">Strang splitting</a> method comes in. It is easier to explain if we had only two parts, and so let us combine the effects of the Laplace operator and of the potential into one, and the phase rotation into a second effect. (Indeed, this is what we will do in the code since solving the equation with the Laplace equation with or without the potential costs the same &ndash; so we merge these two steps.) The Lie splitting method from above would then do the following: It computes solutions of the following two ODEs,  </p><p class="formulaDsp">
 <picture><source srcset="form_5873_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
@@ -564,9 +564,9 @@
 \end{align*}" src="form_5880.png"/></picture>
 </p>
 <p> Here, the "previous" solution <picture><source srcset="form_5881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n,1)}$" src="form_5881.png"/></picture> (or the "initial
-condition" for this part of the time step) is the output of the first phase rotation half-step; the output of the current step will be denoted by <picture><source srcset="form_5882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n,2)}$" src="form_5882.png"/></picture>. <picture><source srcset="form_5883_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{n+1}=t_{n+1}-t_n$" src="form_5883.png"/></picture> is the length of the time step. (One could argue whether <picture><source srcset="form_5881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n,1)}$" src="form_5881.png"/></picture> and <picture><source srcset="form_5881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n,1)}$" src="form_5881.png"/></picture> live at time step <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> or <picture><source srcset="form_3044_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n+1$" src="form_3044.png"/></picture> and what their upper indices should be. This is a philosophical discussion without practical impact, and one might think of <picture><source srcset="form_5881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n,1)}$" src="form_5881.png"/></picture> as something like <picture><source srcset="form_5884_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n+\tfrac 13)}$" src="form_5884.png"/></picture>, and <picture><source srcset="form_5882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n,2)}$" src="form_5882.png"/></picture> as <picture><source srcset="form_5885_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n+\tfrac 23)}$" src="form_5885.png"/></picture> if that helps clarify things &ndash; though, again <picture><source srcset="form_5886_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n+\frac 13$" src="form_5886.png"/></picture> is not to be understood as "one third time step after
+condition" for this part of the time step) is the output of the first phase rotation half-step; the output of the current step will be denoted by <picture><source srcset="form_5882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n,2)}$" src="form_5882.png"/></picture>. <picture><source srcset="form_5883_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{n+1}=t_{n+1}-t_n$" src="form_5883.png"/></picture> is the length of the time step. (One could argue whether <picture><source srcset="form_5881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n,1)}$" src="form_5881.png"/></picture> and <picture><source srcset="form_5881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n,1)}$" src="form_5881.png"/></picture> live at time step <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> or <picture><source srcset="form_2972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n+1$" src="form_2972.png"/></picture> and what their upper indices should be. This is a philosophical discussion without practical impact, and one might think of <picture><source srcset="form_5881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n,1)}$" src="form_5881.png"/></picture> as something like <picture><source srcset="form_5884_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n+\tfrac 13)}$" src="form_5884.png"/></picture>, and <picture><source srcset="form_5882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n,2)}$" src="form_5882.png"/></picture> as <picture><source srcset="form_5885_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n+\tfrac 23)}$" src="form_5885.png"/></picture> if that helps clarify things &ndash; though, again <picture><source srcset="form_5886_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n+\frac 13$" src="form_5886.png"/></picture> is not to be understood as "one third time step after
  \_form#href_anchor" but more like "we've already done one third of the work necessary
-for time step \_form#3044".)</p>
+for time step \_form#2972".)</p>
 <p>If we multiply the whole equation with <picture><source srcset="form_5887_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_{n+1}$" src="form_5887.png"/></picture> and sort terms with the unknown <picture><source srcset="form_5888_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n+1,2)}$" src="form_5888.png"/></picture> to the left and those with the known <picture><source srcset="form_5882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{(n,2)}$" src="form_5882.png"/></picture> to the right, then we obtain the following (spatial) partial differential equation that needs to be solved in each time step:  </p><p class="formulaDsp">
 <picture><source srcset="form_5889_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   -i\psi^{(n,2)}
@@ -585,7 +585,7 @@
 <p><a class="anchor" id="Spatialdiscretizationanddealingwithcomplexvariables"></a></p><h3>Spatial discretization and dealing with complex variables</h3>
 <p>As mentioned above, the previous tutorial program dealing with complex-valued solutions (namely, <a class="el" href="step_29.html">step-29</a>) separated real and imaginary parts of the solution. It thus reduced everything to real arithmetic. In contrast, we here want to keep things complex-valued.</p>
 <p>The first part of this is that we need to define the discretized solution as <picture><source srcset="form_5890_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_h^n(\mathbf x)=\sum_j \Psi^n_j \varphi_j(\mathbf
-x) \approx \psi(\mathbf x,t_n)$" src="form_5890.png"/></picture> where the <picture><source srcset="form_1017_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j$" src="form_1017.png"/></picture> are the usual shape functions (which are real valued) but the expansion coefficients <picture><source srcset="form_5891_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi^n_j$" src="form_5891.png"/></picture> at time step <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> are now complex-valued. This is easily done in deal.II: We just have to use Vector&lt;std::complex&lt;double&gt;&gt; instead of <a class="el" href="classLinearAlgebra_1_1distributed_1_1Vector.html">Vector&lt;double&gt;</a> to store these coefficients.</p>
+x) \approx \psi(\mathbf x,t_n)$" src="form_5890.png"/></picture> where the <picture><source srcset="form_971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j$" src="form_971.png"/></picture> are the usual shape functions (which are real valued) but the expansion coefficients <picture><source srcset="form_5891_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi^n_j$" src="form_5891.png"/></picture> at time step <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> are now complex-valued. This is easily done in deal.II: We just have to use Vector&lt;std::complex&lt;double&gt;&gt; instead of <a class="el" href="classLinearAlgebra_1_1distributed_1_1Vector.html">Vector&lt;double&gt;</a> to store these coefficients.</p>
 <p>Of more interest is how to build and solve the linear system. Obviously, this will only be necessary for the second step of the Strang splitting discussed above, with the time discretization of the previous subsection. We obtain the fully discrete version through straightforward substitution of <picture><source srcset="form_5892_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^n$" src="form_5892.png"/></picture> by <picture><source srcset="form_5893_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^n_h$" src="form_5893.png"/></picture> and multiplication by a test function:  </p><p class="formulaDsp">
 <picture><source srcset="form_5894_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   -iM\Psi^{(n,2)}
@@ -663,7 +663,7 @@
   \int_\Omega \alpha_k e^{-\frac{r_k^2}{R^2}}
 \]" src="form_5914.png"/></picture>
 </p>
-<p> is a positive integer. In other words, we need to choose <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> as an integer multiple of  </p><p class="formulaDsp">
+<p> is a positive integer. In other words, we need to choose <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> as an integer multiple of  </p><p class="formulaDsp">
 <picture><source srcset="form_5915_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \left(\int_\Omega e^{-\frac{r_k^2}{R^2}}\right)^{-1}
   =
@@ -671,15 +671,15 @@
 \]" src="form_5915.png"/></picture>
 </p>
 <p> assuming for the moment that <picture><source srcset="form_5916_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega={\mathbb R}^d$" src="form_5916.png"/></picture> &ndash; which is of course not the case, but we'll ignore the small difference in integral.</p>
-<p>Thus, we choose <picture><source srcset="form_5917_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha_k=\left(R^d\sqrt{\pi^d}\right)^{-1}$" src="form_5917.png"/></picture> for all, and <picture><source srcset="form_5918_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R=0.1$" src="form_5918.png"/></picture>. This <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> is small enough that the difference between the exact (infinite) integral and the integral over <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> should not be too concerning. We choose the four points <picture><source srcset="form_5911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_k$" src="form_5911.png"/></picture> as <picture><source srcset="form_5919_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\pm 0.3, 0), (0, \pm
-0.3)$" src="form_5919.png"/></picture> &ndash; also far enough away from the boundary of <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> to keep ourselves on the safe side.</p>
-<p>For simplicity, we pose the problem on the square <picture><source srcset="form_3258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^2$" src="form_3258.png"/></picture>. For boundary conditions, we will use time-independent Neumann conditions of the form  </p><p class="formulaDsp">
+<p>Thus, we choose <picture><source srcset="form_5917_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha_k=\left(R^d\sqrt{\pi^d}\right)^{-1}$" src="form_5917.png"/></picture> for all, and <picture><source srcset="form_5918_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R=0.1$" src="form_5918.png"/></picture>. This <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> is small enough that the difference between the exact (infinite) integral and the integral over <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> should not be too concerning. We choose the four points <picture><source srcset="form_5911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_k$" src="form_5911.png"/></picture> as <picture><source srcset="form_5919_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\pm 0.3, 0), (0, \pm
+0.3)$" src="form_5919.png"/></picture> &ndash; also far enough away from the boundary of <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> to keep ourselves on the safe side.</p>
+<p>For simplicity, we pose the problem on the square <picture><source srcset="form_3400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^2$" src="form_3400.png"/></picture>. For boundary conditions, we will use time-independent Neumann conditions of the form  </p><p class="formulaDsp">
 <picture><source srcset="form_5920_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \nabla\psi(\mathbf x,t)\cdot \mathbf n=0 \qquad\qquad \forall \mathbf x\in\partial\Omega.
 \]" src="form_5920.png"/></picture>
 </p>
 <p> This is not a realistic choice of boundary conditions but sufficient for what we want to demonstrate here. We will comment further on this in the <a href="#href_anchor">Possibilities for extensions</a> section below.</p>
-<p>Finally, we choose <picture><source srcset="form_5653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa=1$" src="form_5653.png"/></picture>, and the potential as  </p><p class="formulaDsp">
+<p>Finally, we choose <picture><source srcset="form_5553_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\kappa=1$" src="form_5553.png"/></picture>, and the potential as  </p><p class="formulaDsp">
 <picture><source srcset="form_5921_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   V(\mathbf x)
   =
@@ -689,7 +689,7 @@
   \end{cases}
 \]" src="form_5921.png"/></picture>
 </p>
-<p> Using a large potential makes sure that the wave function <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_517.png"/></picture> remains small outside the circle of radius 0.7. All of the Gaussians that make up the initial conditions are within this circle, and the solution will mostly oscillate within it, with a small amount of energy radiating into the outside. The use of a large potential also makes sure that the nonphysical boundary condition does not have too large an effect.</p>
+<p> Using a large potential makes sure that the wave function <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_526.png"/></picture> remains small outside the circle of radius 0.7. All of the Gaussians that make up the initial conditions are within this circle, and the solution will mostly oscillate within it, with a small amount of energy radiating into the outside. The use of a large potential also makes sure that the nonphysical boundary condition does not have too large an effect.</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
 <p><a class="anchor" id="Includefiles"></a> </p><h3>Include files</h3>
 <p>The program starts with the usual include files, all of which you should have seen before by now:</p>
@@ -858,7 +858,7 @@
 <div class="ttc" id="anamespacestd_html_aa2def4dc0bd5b6d07af7aff83feba9b2"><div class="ttname"><a href="namespacestd.html#href_anchor">std::sqrt</a></div><div class="ttdeci">::VectorizedArray&lt; Number, width &gt; sqrt(const ::VectorizedArray&lt; Number, width &gt; &amp;)</div><div class="ttdef"><b>Definition</b> <a href="vectorization_8h_source.html#href_anchor">vectorization.h:5946</a></div></div>
 <div class="ttc" id="anamespacestd_html_aa951f50adf9841cf8def28819c19cc53"><div class="ttname"><a href="namespacestd.html#href_anchor">std::pow</a></div><div class="ttdeci">::VectorizedArray&lt; Number, width &gt; pow(const ::VectorizedArray&lt; Number, width &gt; &amp;, const Number p)</div><div class="ttdef"><b>Definition</b> <a href="vectorization_8h_source.html#href_anchor">vectorization.h:5962</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="ImplementationofthecodeNonlinearSchroedingerEquationcodeclass"></a> </p><h3>Implementation of the <code>NonlinearSchroedingerEquation</code> class</h3>
-<p>We start by specifying the implementation of the constructor of the class. There is nothing of surprise to see here except perhaps that we choose quadratic ( <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture>) Lagrange elements &ndash; the solution is expected to be smooth, so we choose a higher polynomial degree than the bare minimum.</p>
+<p>We start by specifying the implementation of the constructor of the class. There is nothing of surprise to see here except perhaps that we choose quadratic ( <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture>) Lagrange elements &ndash; the solution is expected to be smooth, so we choose a higher polynomial degree than the bare minimum.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    NonlinearSchroedingerEquation&lt;dim&gt;::NonlinearSchroedingerEquation()</div>
 <div class="line">      : fe(2)</div>
@@ -1016,7 +1016,7 @@
 <div class="line">  </div>
 <div class="line">  </div>
 <div class="ttc" id="anamespacestd_html_ae348f4ef7dd5887ba9c50b03a842950a"><div class="ttname"><a href="namespacestd.html#href_anchor">std::abs</a></div><div class="ttdeci">::VectorizedArray&lt; Number, width &gt; abs(const ::VectorizedArray&lt; Number, width &gt; &amp;)</div><div class="ttdef"><b>Definition</b> <a href="vectorization_8h_source.html#href_anchor">vectorization.h:6008</a></div></div>
-</div><!-- fragment --><p>The next step is to solve for the linear system in each time step, i.e., the second half step of the Strang splitting we use. Recall that it had the form <picture><source srcset="form_5935_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C\Psi^{(n,2)} = R\Psi^{(n,1)}$" src="form_5935.png"/></picture> where <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> and <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> are the matrices we assembled earlier.</p>
+</div><!-- fragment --><p>The next step is to solve for the linear system in each time step, i.e., the second half step of the Strang splitting we use. Recall that it had the form <picture><source srcset="form_5935_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C\Psi^{(n,2)} = R\Psi^{(n,1)}$" src="form_5935.png"/></picture> where <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> and <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> are the matrices we assembled earlier.</p>
 <p>The way we solve this here is using a direct solver. We first form the right hand side <picture><source srcset="form_5936_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r=R\Psi^{(n,1)}$" src="form_5936.png"/></picture> using the <a class="el" href="classSparseMatrix.html#href_anchor">SparseMatrix::vmult()</a> function and put the result into the <code>system_rhs</code> variable. We then call SparseDirectUMFPACK::solver() which takes as argument the matrix <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> and the right hand side vector and returns the solution in the same vector <code>system_rhs</code>. The final step is then to put the solution so computed back into the <code>solution</code> variable.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> NonlinearSchroedingerEquation&lt;dim&gt;::do_full_spatial_step()</div>
@@ -1263,7 +1263,7 @@
    allowfullscreen></iframe>
  </p>
 </p>
-<p>So why did I end up shading the area where the potential <picture><source srcset="form_4399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\mathbf x)$" src="form_4399.png"/></picture> is large? In that outside region, the solution is relatively small. It is also relatively smooth. As a consequence, to some approximate degree, the equation in that region simplifies to  </p><p class="formulaDsp">
+<p>So why did I end up shading the area where the potential <picture><source srcset="form_4542_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\mathbf x)$" src="form_4542.png"/></picture> is large? In that outside region, the solution is relatively small. It is also relatively smooth. As a consequence, to some approximate degree, the equation in that region simplifies to  </p><p class="formulaDsp">
 <picture><source srcset="form_5952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   - i \frac{\partial \psi}{\partial t}
   + V \psi
@@ -1286,9 +1286,9 @@
 <p><a class="anchor" id="Betterlinearsolvers"></a></p><h4>Better linear solvers </h4>
 <p>The solver chosen here is just too simple. It is also not efficient. What we do here is give the matrix to a sparse direct solver in every time step and let it find the solution of the linear system. But we know that we could do far better:</p>
 <ul>
-<li>First, we should make use of the fact that the matrix doesn't actually change from time step to time step. This is an artifact of the fact that we here have constant boundary values and that we don't change the time step size &ndash; two assumptions that might not be true in actual applications. But at least in cases where this does happen to be the case, it would make sense to only factorize the matrix once (i.e., compute <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture> and <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> factors once) and then use these factors for all following time steps until the matrix <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> changes and requires a new factorization. The interface of the <a class="el" href="classSparseDirectUMFPACK.html">SparseDirectUMFPACK</a> class allows for this.</li>
+<li>First, we should make use of the fact that the matrix doesn't actually change from time step to time step. This is an artifact of the fact that we here have constant boundary values and that we don't change the time step size &ndash; two assumptions that might not be true in actual applications. But at least in cases where this does happen to be the case, it would make sense to only factorize the matrix once (i.e., compute <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture> and <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> factors once) and then use these factors for all following time steps until the matrix <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> changes and requires a new factorization. The interface of the <a class="el" href="classSparseDirectUMFPACK.html">SparseDirectUMFPACK</a> class allows for this.</li>
 <li>Ultimately, however, sparse direct solvers are only efficient for relatively small problems, say up to a few 100,000 unknowns. Beyond this, one needs iterative solvers such as the Conjugate Gradient method (for symmetric and positive definite problems) or GMRES. We have used many of these in other tutorial programs. In all cases, they need to be accompanied by good preconditioners. For the current case, one could in principle use GMRES &ndash; a method that does not require any specific properties of the matrix &ndash; as the outer solver but at least at the time of writing this sentence (in 2022), the <a class="el" href="classSolverGMRES.html">SolverGMRES</a> class can only handle real-valued linear systems. This can be overcome by implementing a variation of GMRES that can deal with complex-valued matrices and vectors, see for example <b>[Fraysse2005]</b> . Even better would be to implement an iterative scheme that exploits the one structural feature we know is true for this problem: That the matrix is complex-symmetric (albeit not Hermitian), for which a literature search would probably find schemes as well.</li>
-<li>A different strategy towards iterative solvers would be to break the linear system into a <picture><source srcset="form_104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_104.png"/></picture> block system of real and imaginary components, like we did in <a class="el" href="step_29.html">step-29</a>. This would then enable using real-valued iterative solvers on the outer level (e.g., the existing GMRES implementation), but one would have to come up with preconditioners that exploit the block structure. There is, again, literature on the topic, of which we simply point out a non-representative sample: <b>[Axelsson2014]</b> , <b>[Day2001]</b> , <b>[Liao2016]</b> .</li>
+<li>A different strategy towards iterative solvers would be to break the linear system into a <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_97.png"/></picture> block system of real and imaginary components, like we did in <a class="el" href="step_29.html">step-29</a>. This would then enable using real-valued iterative solvers on the outer level (e.g., the existing GMRES implementation), but one would have to come up with preconditioners that exploit the block structure. There is, again, literature on the topic, of which we simply point out a non-representative sample: <b>[Axelsson2014]</b> , <b>[Day2001]</b> , <b>[Liao2016]</b> .</li>
 </ul>
 <p><a class="anchor" id="Boundaryconditions"></a></p><h4>Boundary conditions </h4>
 <p>In order to be usable for actual, realistic problems, solvers for the nonlinear Schr&ouml;dinger equation need to utilize boundary conditions that make sense for the problem at hand. We have here restricted ourselves to simple Neumann boundary conditions &ndash; but these do not actually make sense for the problem. Indeed, the equations are generally posed on an infinite domain. But, since we can't compute on infinite domains, we need to truncate it somewhere and instead pose boundary conditions that make sense for this artificially small domain. The approach widely used is to use the <a href="https://en.wikipedia.org/wiki/Perfectly_matched_layer">Perfectly Matched Layer</a> method that corresponds to a particular kind of attenuation. It is, in a different context, also used in <a class="el" href="step_62.html">step-62</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_59.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_59.html	2024-03-17 21:57:47.839261449 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_59.html	2024-03-17 21:57:47.839261449 +0000
@@ -136,12 +136,12 @@
 \end{align*}" src="form_5958.png"/></picture>
 </p>
 <p> where <picture><source srcset="form_5959_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{v} = v^- \mathbf{n}^- + v^+ \mathbf{n}^+ = \mathbf n^{-}
-\left(v^- - v^+\right)$" src="form_5959.png"/></picture> denotes the directed jump of the quantity <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> from the two associated cells <picture><source srcset="form_5960_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K^-$" src="form_5960.png"/></picture> and <picture><source srcset="form_5961_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K^+$" src="form_5961.png"/></picture>, and <picture><source srcset="form_5962_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{v}=\frac{v^- + v^+}{2}$" src="form_5962.png"/></picture> is the average from both sides.</p>
-<p>The terms in the equation represent the cell integral after integration by parts, the primal consistency term that arises at the element interfaces due to integration by parts and insertion of an average flux, the adjoint consistency term that is added for restoring symmetry of the underlying matrix, and a penalty term with factor <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture>, whose magnitude is equal the length of the cells in direction normal to face multiplied by <picture><source srcset="form_5963_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k(k+1)$" src="form_5963.png"/></picture>, see <a class="el" href="step_39.html">step-39</a>. The penalty term is chosen such that an inverse estimate holds and the final weak form is coercive, i.e., positive definite in the discrete setting. The adjoint consistency term and the penalty term involve the jump <picture><source srcset="form_5964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{u_h}$" src="form_5964.png"/></picture> at the element interfaces, which disappears for the analytic solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture>. Thus, these terms are consistent with the original PDE, ensuring that the method can retain optimal orders of convergence.</p>
+\left(v^- - v^+\right)$" src="form_5959.png"/></picture> denotes the directed jump of the quantity <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> from the two associated cells <picture><source srcset="form_5960_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K^-$" src="form_5960.png"/></picture> and <picture><source srcset="form_5961_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K^+$" src="form_5961.png"/></picture>, and <picture><source srcset="form_5962_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{v}=\frac{v^- + v^+}{2}$" src="form_5962.png"/></picture> is the average from both sides.</p>
+<p>The terms in the equation represent the cell integral after integration by parts, the primal consistency term that arises at the element interfaces due to integration by parts and insertion of an average flux, the adjoint consistency term that is added for restoring symmetry of the underlying matrix, and a penalty term with factor <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture>, whose magnitude is equal the length of the cells in direction normal to face multiplied by <picture><source srcset="form_5963_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k(k+1)$" src="form_5963.png"/></picture>, see <a class="el" href="step_39.html">step-39</a>. The penalty term is chosen such that an inverse estimate holds and the final weak form is coercive, i.e., positive definite in the discrete setting. The adjoint consistency term and the penalty term involve the jump <picture><source srcset="form_5964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{u_h}$" src="form_5964.png"/></picture> at the element interfaces, which disappears for the analytic solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture>. Thus, these terms are consistent with the original PDE, ensuring that the method can retain optimal orders of convergence.</p>
 <p>In the implementation below, we implement the weak form above by moving the normal vector <picture><source srcset="form_5965_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}^-$" src="form_5965.png"/></picture> from the jump terms to the derivatives to form a <em>normal</em> derivative of the form <picture><source srcset="form_5966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}^-\cdot \nabla u_h$" src="form_5966.png"/></picture>. This makes the implementation on quadrature points slightly more efficient because we only need to work with scalar terms rather than tensors, and is mathematically equivalent.</p>
-<p>For boundary conditions, we use the so-called mirror principle that defines <em>artificial</em> exterior values <picture><source srcset="form_2795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^+$" src="form_2795.png"/></picture> by extrapolation from the interior solution <picture><source srcset="form_2797_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^-$" src="form_2797.png"/></picture> combined with the given boundary data, setting <picture><source srcset="form_5967_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^+ = -u^- + 2
+<p>For boundary conditions, we use the so-called mirror principle that defines <em>artificial</em> exterior values <picture><source srcset="form_2788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^+$" src="form_2788.png"/></picture> by extrapolation from the interior solution <picture><source srcset="form_2790_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^-$" src="form_2790.png"/></picture> combined with the given boundary data, setting <picture><source srcset="form_5967_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^+ = -u^- + 2
 g_\text{D}$" src="form_5967.png"/></picture> and <picture><source srcset="form_5968_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}^-\cdot \nabla u^+ = \mathbf{n}^-\cdot \nabla u^-$" src="form_5968.png"/></picture> on Dirichlet boundaries and <picture><source srcset="form_5969_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^+=u^-$" src="form_5969.png"/></picture> and <picture><source srcset="form_5970_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}^-\cdot \nabla u^+ =
--\mathbf{n}^-\cdot \nabla u^- + 2 g_\text{N}$" src="form_5970.png"/></picture> on Neumann boundaries, for given Dirichlet values <picture><source srcset="form_5971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_\text{D}$" src="form_5971.png"/></picture> and Neumann values <picture><source srcset="form_5972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_\text{N}$" src="form_5972.png"/></picture>. These expressions are then inserted in the above weak form. Contributions involving the known quantities <picture><source srcset="form_5971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_\text{D}$" src="form_5971.png"/></picture> and <picture><source srcset="form_5972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_\text{N}$" src="form_5972.png"/></picture> are eventually moved to the right hand side, whereas the unknown value <picture><source srcset="form_2797_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^-$" src="form_2797.png"/></picture> is retained on the left hand side and contributes to the matrix terms similarly as interior faces. Upon these manipulations, the same weak form as in <a class="el" href="step_39.html">step-39</a> is obtained.</p>
+-\mathbf{n}^-\cdot \nabla u^- + 2 g_\text{N}$" src="form_5970.png"/></picture> on Neumann boundaries, for given Dirichlet values <picture><source srcset="form_5971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_\text{D}$" src="form_5971.png"/></picture> and Neumann values <picture><source srcset="form_5972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_\text{N}$" src="form_5972.png"/></picture>. These expressions are then inserted in the above weak form. Contributions involving the known quantities <picture><source srcset="form_5971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_\text{D}$" src="form_5971.png"/></picture> and <picture><source srcset="form_5972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_\text{N}$" src="form_5972.png"/></picture> are eventually moved to the right hand side, whereas the unknown value <picture><source srcset="form_2790_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^-$" src="form_2790.png"/></picture> is retained on the left hand side and contributes to the matrix terms similarly as interior faces. Upon these manipulations, the same weak form as in <a class="el" href="step_39.html">step-39</a> is obtained.</p>
 <p><a class="anchor" id="FaceintegrationsupportinMatrixFreeandFEFaceEvaluation"></a></p><h3>Face integration support in <a class="el" href="classMatrixFree.html">MatrixFree</a> and <a class="el" href="classFEFaceEvaluation.html">FEFaceEvaluation</a></h3>
 <p>The matrix-free framework of deal.II provides the necessary infrastructure to implement the action of the discretized equation above. As opposed to the <a class="el" href="classMatrixFree.html#href_anchor">MatrixFree::cell_loop()</a> that we used in <a class="el" href="step_37.html">step-37</a> and <a class="el" href="step_48.html">step-48</a>, we now build a code in terms of <a class="el" href="classMatrixFree.html#href_anchor">MatrixFree::loop()</a> that takes three function pointers, one for the cell integrals, one for the inner face integrals, and one for the boundary face integrals (in analogy to the design of <a class="el" href="namespaceMeshWorker.html">MeshWorker</a> used in the <a class="el" href="step_39.html">step-39</a> tutorial program). In each of these three functions, we then implement the respective terms on the quadrature points. For interpolation between the vector entries and the values and gradients on quadrature points, we use the class <a class="el" href="classFEEvaluation.html">FEEvaluation</a> for cell contributions and <a class="el" href="classFEFaceEvaluation.html">FEFaceEvaluation</a> for face contributions. The basic usage of these functions has been discussed extensively in the <a class="el" href="step_37.html">step-37</a> tutorial program.</p>
 <p>In <a class="el" href="classMatrixFree.html#href_anchor">MatrixFree::loop()</a>, all interior faces are visited exactly once, so one must make sure to compute the contributions from both the test functions <picture><source srcset="form_5973_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h^-$" src="form_5973.png"/></picture> and <picture><source srcset="form_5974_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h^+$" src="form_5974.png"/></picture>. Given the fact that the test functions on both sides are indeed independent, the weak form above effectively means that we submit the same contribution to both an <a class="el" href="classFEFaceEvaluation.html">FEFaceEvaluation</a> object called <code>phi_inner</code> and <code>phi_outer</code> for testing with the normal derivative of the test function, and values with opposite sign for testing with the values of the test function, because the latter involves opposite signs due to the jump term. For faces between cells of different refinement level, the integration is done from the refined side, and <a class="el" href="classFEFaceEvaluation.html">FEFaceEvaluation</a> automatically performs interpolation to a subface on the coarse side. Thus, a hanging node never appears explicitly in a user implementation of a weak form.</p>
@@ -154,7 +154,7 @@
 <p>This optimization is not only useful for computing the face integrals, but also for the MPI ghost layer exchange: In a naive exchange, we would need to send all degrees of freedom of a cell to another processor if the other processor is responsible for computing the face's contribution. Since we know that only some of the degrees of freedom in the evaluation with <a class="el" href="classFEFaceEvaluation.html">FEFaceEvaluation</a> are touched, it is natural to only exchange the relevant ones. The <a class="el" href="classMatrixFree.html#href_anchor">MatrixFree::loop()</a> function has support for a selected data exchange when combined with <a class="el" href="classLinearAlgebra_1_1distributed_1_1Vector.html">LinearAlgebra::distributed::Vector</a>. To make this happen, we need to tell the loop what kind of evaluation on faces we are going to do, using an argument of type <a class="el" href="classMatrixFree.html#href_anchor">MatrixFree::DataAccessOnFaces</a>, as can be seen in the implementation of <code>LaplaceOperator::vmult()</code> below. The way data is exchanged in that case is as follows: The ghost layer data in the vector still pretends to represent all degrees of freedom, such that <a class="el" href="classFEFaceEvaluation.html">FEFaceEvaluation</a> can continue to read the values as if the cell were a locally owned one. The data exchange routines take care of the task for packing and unpacking the data into this format. While this sounds pretty complicated, we will show in the results section below that this really pays off by comparing the performance to a baseline code that does not specify the data access on faces.</p>
 <p><a class="anchor" id="AnapproximateblockJacobismootherusingthefastdiagonalizationmethod"></a></p><h3>An approximate block-Jacobi smoother using the fast diagonalization method</h3>
 <p>In the tradition of the <a class="el" href="step_37.html">step-37</a> program, we again solve a Poisson problem with a geometric multigrid preconditioner inside a conjugate gradient solver. Instead of computing the diagonal and use the basic <a class="el" href="classPreconditionChebyshev.html">PreconditionChebyshev</a> as a smoother, we choose a different strategy in this tutorial program. We implement a block-Jacobi preconditioner, where a block refers to all degrees of freedom on a cell. Rather than building the full cell matrix and applying its LU factorization (or inverse) in the preconditioner &mdash; an operation that would be heavily memory bandwidth bound and thus pretty slow &mdash; we approximate the inverse of the block by a special technique called fast diagonalization method.</p>
-<p>The idea of the method is to take use of the structure of the cell matrix. In case of the Laplacian with constant coefficients discretized on a Cartesian mesh, the cell matrix <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture> can be written as  </p><p class="formulaDsp">
+<p>The idea of the method is to take use of the structure of the cell matrix. In case of the Laplacian with constant coefficients discretized on a Cartesian mesh, the cell matrix <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture> can be written as  </p><p class="formulaDsp">
 <picture><source srcset="form_1935_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 L &amp;= A_1 \otimes M_0 + M_1 \otimes A_0
 \end{align*}" src="form_1935.png"/></picture>
@@ -165,7 +165,7 @@
 \end{align*}" src="form_5977.png"/></picture>
 </p>
 <p> in 3D. The matrices <picture><source srcset="form_5978_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_0$" src="form_5978.png"/></picture> and <picture><source srcset="form_5979_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_1$" src="form_5979.png"/></picture> denote the 1D Laplace matrix (including the cell and face term associated to the current cell values <picture><source srcset="form_5980_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^-_h$" src="form_5980.png"/></picture> and <picture><source srcset="form_5981_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v^-_h$" src="form_5981.png"/></picture>) and <picture><source srcset="form_5982_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_0$" src="form_5982.png"/></picture> and <picture><source srcset="form_5983_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_1$" src="form_5983.png"/></picture> are the mass matrices. Note that this simple tensor product structure is lost once there are non-constant coefficients on the cell or the geometry is not constant any more. We mention that a similar setup could also be used to replace the computed integrals with this final tensor product form of the matrices, which would cut the operations for the operator evaluation into less than half. However, given the fact that this only holds for Cartesian cells and constant coefficients, which is a pretty narrow case, we refrain from pursuing this idea.</p>
-<p>Interestingly, the exact inverse of the matrix <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture> can be found through tensor products due to a method introduced by Lynch et al. <b>[Lynch1964]</b> in 1964,  </p><p class="formulaDsp">
+<p>Interestingly, the exact inverse of the matrix <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture> can be found through tensor products due to a method introduced by Lynch et al. <b>[Lynch1964]</b> in 1964,  </p><p class="formulaDsp">
 <picture><source srcset="form_1940_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 L^{-1} &amp;= S_1 \otimes S_0 (\Lambda_1 \otimes I + I \otimes \Lambda_0)^{-1}
 S_1^\mathrm T \otimes S_0^\mathrm T,
@@ -176,7 +176,7 @@
 A_d s  &amp;= \lambda M_d s, \quad d = 0, \ldots,\mathrm{dim-1},
 \end{align*}" src="form_5984.png"/></picture>
 </p>
-<p> and <picture><source srcset="form_1943_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Lambda_d$" src="form_1943.png"/></picture> is the diagonal matrix representing the generalized eigenvalues <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture>. Note that the vectors <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> are such that they simultaneously diagonalize <picture><source srcset="form_1944_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_d$" src="form_1944.png"/></picture> and <picture><source srcset="form_1945_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_d$" src="form_1945.png"/></picture>, i.e. <picture><source srcset="form_1946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_d^{\mathrm T} A_d S_d =
+<p> and <picture><source srcset="form_1943_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Lambda_d$" src="form_1943.png"/></picture> is the diagonal matrix representing the generalized eigenvalues <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture>. Note that the vectors <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> are such that they simultaneously diagonalize <picture><source srcset="form_1944_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_d$" src="form_1944.png"/></picture> and <picture><source srcset="form_1945_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M_d$" src="form_1945.png"/></picture>, i.e. <picture><source srcset="form_1946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_d^{\mathrm T} A_d S_d =
 \Lambda_d$" src="form_1946.png"/></picture> and <picture><source srcset="form_1947_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_d^{\mathrm T} M_d S_d = I$" src="form_1947.png"/></picture>.</p>
 <p>The deal.II library implements a class using this concept, called <a class="el" href="classTensorProductMatrixSymmetricSum.html">TensorProductMatrixSymmetricSum</a>.</p>
 <p>For the sake of this program, we stick with constant coefficients and Cartesian meshes, even though an approximate version based on tensor products would still be possible for a more general mesh, and the operator evaluation itself is of course generic. Also, we do not bother with adaptive meshes where the multigrid algorithm would need to get access to flux matrices over the edges of different refinement, as explained in <a class="el" href="step_39.html">step-39</a>. One thing we do, however, is to still wrap our block-Jacobi preconditioner inside <a class="el" href="classPreconditionChebyshev.html">PreconditionChebyshev</a>. That class relieves us from finding an appropriate relaxation parameter (which would be around 0.7 in 2D and 0.5 in 3D for the block-Jacobi smoother), and often increases smoothing efficiency somewhat over plain Jacobi smoothing, especially when using several iterations.</p>
@@ -229,7 +229,7 @@
 <div class="line">    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dimension             = 3;</div>
 <div class="line">  </div>
 </div><!-- fragment --><p><a class="anchor" id="Equationdata"></a> </p><h3>Equation data</h3>
-<p>In analogy to <a class="el" href="step_7.html">step-7</a>, we define an analytic solution that we try to reproduce with our discretization. Since the aim of this tutorial is to show matrix-free methods, we choose one of the simplest possibilities, namely a cosine function whose derivatives are simple enough for us to compute analytically. Further down, the wave number 2.4 we select here will be matched with the domain extent in <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>-direction that is 2.5, such that we obtain a periodic solution at <picture><source srcset="form_5985_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x = 2.5$" src="form_5985.png"/></picture> including <picture><source srcset="form_5986_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$6pi$" src="form_5986.png"/></picture> or three full wave revolutions in the cosine. The first function defines the solution and its gradient for expressing the analytic solution for the Dirichlet and Neumann boundary conditions, respectively. Furthermore, a class representing the negative Laplacian of the solution is used to represent the right hand side (forcing) function that we use to match the given analytic solution in the discretized version (manufactured solution).</p>
+<p>In analogy to <a class="el" href="step_7.html">step-7</a>, we define an analytic solution that we try to reproduce with our discretization. Since the aim of this tutorial is to show matrix-free methods, we choose one of the simplest possibilities, namely a cosine function whose derivatives are simple enough for us to compute analytically. Further down, the wave number 2.4 we select here will be matched with the domain extent in <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>-direction that is 2.5, such that we obtain a periodic solution at <picture><source srcset="form_5985_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x = 2.5$" src="form_5985.png"/></picture> including <picture><source srcset="form_5986_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$6pi$" src="form_5986.png"/></picture> or three full wave revolutions in the cosine. The first function defines the solution and its gradient for expressing the analytic solution for the Dirichlet and Neumann boundary conditions, respectively. Furthermore, a class representing the negative Laplacian of the solution is used to represent the right hand side (forcing) function that we use to match the given analytic solution in the discretized version (manufactured solution).</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keyword">class </span>Solution : <span class="keyword">public</span> <a class="code hl_class" href="classFunction.html">Function</a>&lt;dim&gt;</div>
 <div class="line">    {</div>
@@ -584,11 +584,11 @@
 <div class="line">  </div>
 <div class="line">  </div>
 <div class="line">  </div>
-</div><!-- fragment --><p>The boundary face function follows by and large the interior face function. The only difference is the fact that we do not have a separate <a class="el" href="classFEFaceEvaluation.html">FEFaceEvaluation</a> object that provides us with exterior values <picture><source srcset="form_2795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^+$" src="form_2795.png"/></picture>, but we must define them from the boundary conditions and interior values <picture><source srcset="form_2797_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^-$" src="form_2797.png"/></picture>. As explained in the introduction, we use <picture><source srcset="form_5990_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^+ = -u^- + 2
+</div><!-- fragment --><p>The boundary face function follows by and large the interior face function. The only difference is the fact that we do not have a separate <a class="el" href="classFEFaceEvaluation.html">FEFaceEvaluation</a> object that provides us with exterior values <picture><source srcset="form_2788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^+$" src="form_2788.png"/></picture>, but we must define them from the boundary conditions and interior values <picture><source srcset="form_2790_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^-$" src="form_2790.png"/></picture>. As explained in the introduction, we use <picture><source srcset="form_5990_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^+ = -u^- + 2
    g_\text{D}$" src="form_5990.png"/></picture> and <picture><source srcset="form_5991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}^-\cdot \nabla u^+ = \mathbf{n}^-\cdot \nabla
    u^-$" src="form_5991.png"/></picture> on Dirichlet boundaries and <picture><source srcset="form_5969_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^+=u^-$" src="form_5969.png"/></picture> and <picture><source srcset="form_5992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}^-\cdot \nabla
-   u^+ = -\mathbf{n}^-\cdot \nabla u^- + 2 g_\text{N}$" src="form_5992.png"/></picture> on Neumann boundaries. Since this operation implements the homogeneous part, i.e., the matrix-vector product, we must neglect the boundary functions <picture><source srcset="form_5971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_\text{D}$" src="form_5971.png"/></picture> and <picture><source srcset="form_5972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_\text{N}$" src="form_5972.png"/></picture> here, and added them to the right hand side in <code>LaplaceProblem::compute_rhs()</code>. Note that due to extension of the solution <picture><source srcset="form_2797_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^-$" src="form_2797.png"/></picture> to the exterior via <picture><source srcset="form_2795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^+$" src="form_2795.png"/></picture>, we can keep all factors <picture><source srcset="form_3007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0.5$" src="form_3007.png"/></picture> the same as in the inner face function, see also the discussion in <a class="el" href="step_39.html">step-39</a>.</p>
-<p>There is one catch at this point: The implementation below uses a boolean variable <code>is_dirichlet</code> to switch between the Dirichlet and the Neumann cases. However, we solve a problem where we also want to impose periodic boundary conditions on some boundaries, namely along those in the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> direction. One might wonder how those conditions should be handled here. The answer is that <a class="el" href="classMatrixFree.html">MatrixFree</a> automatically treats periodic boundaries as what they are technically, namely an inner face where the solution values of two adjacent cells meet and must be treated by proper numerical fluxes. Thus, all the faces on the periodic boundaries will appear in the <code>apply_face()</code> function and not in this one.</p>
+   u^+ = -\mathbf{n}^-\cdot \nabla u^- + 2 g_\text{N}$" src="form_5992.png"/></picture> on Neumann boundaries. Since this operation implements the homogeneous part, i.e., the matrix-vector product, we must neglect the boundary functions <picture><source srcset="form_5971_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_\text{D}$" src="form_5971.png"/></picture> and <picture><source srcset="form_5972_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_\text{N}$" src="form_5972.png"/></picture> here, and added them to the right hand side in <code>LaplaceProblem::compute_rhs()</code>. Note that due to extension of the solution <picture><source srcset="form_2790_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^-$" src="form_2790.png"/></picture> to the exterior via <picture><source srcset="form_2788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u^+$" src="form_2788.png"/></picture>, we can keep all factors <picture><source srcset="form_3070_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0.5$" src="form_3070.png"/></picture> the same as in the inner face function, see also the discussion in <a class="el" href="step_39.html">step-39</a>.</p>
+<p>There is one catch at this point: The implementation below uses a boolean variable <code>is_dirichlet</code> to switch between the Dirichlet and the Neumann cases. However, we solve a problem where we also want to impose periodic boundary conditions on some boundaries, namely along those in the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> direction. One might wonder how those conditions should be handled here. The answer is that <a class="el" href="classMatrixFree.html">MatrixFree</a> automatically treats periodic boundaries as what they are technically, namely an inner face where the solution values of two adjacent cells meet and must be treated by proper numerical fluxes. Thus, all the faces on the periodic boundaries will appear in the <code>apply_face()</code> function and not in this one.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim, <span class="keywordtype">int</span> fe_degree, <span class="keyword">typename</span> number&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> LaplaceOperator&lt;dim, fe_degree, number&gt;::apply_boundary(</div>
 <div class="line">      <span class="keyword">const</span> <a class="code hl_class" href="classMatrixFree.html">MatrixFree&lt;dim, number&gt;</a> &amp;                   data,</div>
@@ -699,7 +699,7 @@
 <div class="line">          }</div>
 <div class="line">  </div>
 </div><!-- fragment --><p>Next, we go through the cells and pass the scaled matrices to <a class="el" href="classTensorProductMatrixSymmetricSum.html">TensorProductMatrixSymmetricSum</a> to actually compute the generalized eigenvalue problem for representing the inverse: Since the matrix approximation is constructed as <picture><source srcset="form_5993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A\otimes M + M\otimes A$" src="form_5993.png"/></picture> and the weights are constant for each element, we can apply all weights on the Laplace matrix and simply keep the mass matrices unscaled. In the loop over cells, we want to make use of the geometry compression provided by the <a class="el" href="classMatrixFree.html">MatrixFree</a> class and check if the current geometry is the same as on the last cell batch, in which case there is nothing to do. This compression can be accessed by <a class="el" href="classFEEvaluationData.html#href_anchor">FEEvaluation::get_mapping_data_index_offset()</a> once <code>reinit()</code> has been called.</p>
-<p>Once we have accessed the inverse Jacobian through the <a class="el" href="classFEEvaluation.html">FEEvaluation</a> access function (we take the one for the zeroth quadrature point as they should be the same on all quadrature points for a Cartesian cell), we check that it is diagonal and then extract the determinant of the original Jacobian, i.e., the inverse of the determinant of the inverse Jacobian, and set the weight as <picture><source srcset="form_5994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{det}(J) / h_d^2$" src="form_5994.png"/></picture> according to the 1d Laplacian times <picture><source srcset="form_4649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d-1$" src="form_4649.png"/></picture> copies of the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>.</p>
+<p>Once we have accessed the inverse Jacobian through the <a class="el" href="classFEEvaluation.html">FEEvaluation</a> access function (we take the one for the zeroth quadrature point as they should be the same on all quadrature points for a Cartesian cell), we check that it is diagonal and then extract the determinant of the original Jacobian, i.e., the inverse of the determinant of the inverse Jacobian, and set the weight as <picture><source srcset="form_5994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{det}(J) / h_d^2$" src="form_5994.png"/></picture> according to the 1d Laplacian times <picture><source srcset="form_4699_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d-1$" src="form_4699.png"/></picture> copies of the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a>.</p>
 <div class="fragment"><div class="line">      cell_matrices.clear();</div>
 <div class="line">      <a class="code hl_class" href="classFEEvaluation.html">FEEvaluation&lt;dim, fe_degree, fe_degree + 1, 1, number&gt;</a> phi(*data);</div>
 <div class="line">      <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> old_mapping_data_index = <a class="code hl_variable" href="namespacenumbers.html#href_anchor">numbers::invalid_unsigned_int</a>;</div>
@@ -1138,7 +1138,7 @@
 <div class="ttc" id="anamespaceVectorTools_html_a676190d2c897ac5da68a9c460fa95832"><div class="ttname"><a href="namespaceVectorTools.html#href_anchor">VectorTools::integrate_difference</a></div><div class="ttdeci">void integrate_difference(const Mapping&lt; dim, spacedim &gt; &amp;mapping, const DoFHandler&lt; dim, spacedim &gt; &amp;dof, const InVector &amp;fe_function, const Function&lt; spacedim, typename InVector::value_type &gt; &amp;exact_solution, OutVector &amp;difference, const Quadrature&lt; dim &gt; &amp;q, const NormType &amp;norm, const Function&lt; spacedim, double &gt; *weight=nullptr, const double exponent=2.)</div></div>
 <div class="ttc" id="anamespaceVectorTools_html_a69967cb7a148a7169963126249213db1aa3903caf348e2d5dc54d1b49e15c1e8e"><div class="ttname"><a href="namespaceVectorTools.html#href_anchor">VectorTools::L2_norm</a></div><div class="ttdeci">@ L2_norm</div><div class="ttdef"><b>Definition</b> <a href="vector__tools__common_8h_source.html#href_anchor">vector_tools_common.h:113</a></div></div>
 <div class="ttc" id="anamespacestd_html_aa2def4dc0bd5b6d07af7aff83feba9b2"><div class="ttname"><a href="namespacestd.html#href_anchor">std::sqrt</a></div><div class="ttdeci">::VectorizedArray&lt; Number, width &gt; sqrt(const ::VectorizedArray&lt; Number, width &gt; &amp;)</div><div class="ttdef"><b>Definition</b> <a href="vectorization_8h_source.html#href_anchor">vectorization.h:5946</a></div></div>
-</div><!-- fragment --><p>The <code>run()</code> function sets up the initial grid and then runs the multigrid program in the usual way. As a domain, we choose a rectangle with periodic boundary conditions in the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture>-direction, a Dirichlet condition on the front face in <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> direction (i.e., the face with index number 2, with boundary id equal to 0), and Neumann conditions on the back face as well as the two faces in <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> direction for the 3d case (with boundary id equal to 1). The extent of the domain is a bit different in the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> direction (where we want to achieve a periodic solution given the definition of <code>Solution</code>) as compared to the <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> and <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> directions.</p>
+</div><!-- fragment --><p>The <code>run()</code> function sets up the initial grid and then runs the multigrid program in the usual way. As a domain, we choose a rectangle with periodic boundary conditions in the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture>-direction, a Dirichlet condition on the front face in <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> direction (i.e., the face with index number 2, with boundary id equal to 0), and Neumann conditions on the back face as well as the two faces in <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> direction for the 3d case (with boundary id equal to 1). The extent of the domain is a bit different in the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> direction (where we want to achieve a periodic solution given the definition of <code>Solution</code>) as compared to the <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> and <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> directions.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim, <span class="keywordtype">int</span> fe_degree&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> LaplaceProblem&lt;dim, fe_degree&gt;::run()</div>
 <div class="line">    {</div>
@@ -1334,7 +1334,7 @@
 <tr>
 <th>MDoFs/s </th><td>2.94 </td><td>3.29 </td><td>3.62 </td><td>3.72 </td><td>3.47 </td><td>3.41 </td><td>2.93 </td><td>2.88 </td><td>2.57 </td><td>2.27 </td><td>2.01 </td><td>1.87  </td></tr>
 </table>
-<p>We clearly see how the efficiency per DoF initially improves until it reaches a maximum for the polynomial degree <picture><source srcset="form_5998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=4$" src="form_5998.png"/></picture>. This effect is surprising, not only because higher polynomial degrees often yield a vastly better solution, but especially also when having matrix-based schemes in mind where the denser coupling at higher degree leads to a monotonously decreasing throughput (and a drastic one in 3D, with <picture><source srcset="form_5998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=4$" src="form_5998.png"/></picture> being more than ten times slower than <picture><source srcset="form_4799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=1$" src="form_4799.png"/></picture>!). For higher degrees, the throughput decreases a bit, which is both due to an increase in the number of iterations (going from 12 at <picture><source srcset="form_5999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=2,3,4$" src="form_5999.png"/></picture> to 19 at <picture><source srcset="form_131_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=10$" src="form_131.png"/></picture>) and due to the <picture><source srcset="form_225_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O(k)$" src="form_225.png"/></picture> complexity of operator evaluation. Nonetheless, efficiency as the time to solution would be still better for higher polynomial degrees because they have better convergence rates (at least for problems as simple as this one): For <picture><source srcset="form_6000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=12$" src="form_6000.png"/></picture>, we reach roundoff accuracy already with 1 million DoFs (solver time less than a second), whereas for <picture><source srcset="form_6001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=8$" src="form_6001.png"/></picture> we need 24 million DoFs and 8 seconds. For <picture><source srcset="form_6002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=5$" src="form_6002.png"/></picture>, the error is around <picture><source srcset="form_6003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-9}$" src="form_6003.png"/></picture> with 57m DoFs and thus still far away from roundoff, despite taking 16 seconds.</p>
+<p>We clearly see how the efficiency per DoF initially improves until it reaches a maximum for the polynomial degree <picture><source srcset="form_5998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=4$" src="form_5998.png"/></picture>. This effect is surprising, not only because higher polynomial degrees often yield a vastly better solution, but especially also when having matrix-based schemes in mind where the denser coupling at higher degree leads to a monotonously decreasing throughput (and a drastic one in 3D, with <picture><source srcset="form_5998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=4$" src="form_5998.png"/></picture> being more than ten times slower than <picture><source srcset="form_4799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=1$" src="form_4799.png"/></picture>!). For higher degrees, the throughput decreases a bit, which is both due to an increase in the number of iterations (going from 12 at <picture><source srcset="form_5999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=2,3,4$" src="form_5999.png"/></picture> to 19 at <picture><source srcset="form_224_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=10$" src="form_224.png"/></picture>) and due to the <picture><source srcset="form_225_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O(k)$" src="form_225.png"/></picture> complexity of operator evaluation. Nonetheless, efficiency as the time to solution would be still better for higher polynomial degrees because they have better convergence rates (at least for problems as simple as this one): For <picture><source srcset="form_6000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=12$" src="form_6000.png"/></picture>, we reach roundoff accuracy already with 1 million DoFs (solver time less than a second), whereas for <picture><source srcset="form_6001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=8$" src="form_6001.png"/></picture> we need 24 million DoFs and 8 seconds. For <picture><source srcset="form_6002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=5$" src="form_6002.png"/></picture>, the error is around <picture><source srcset="form_6003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-9}$" src="form_6003.png"/></picture> with 57m DoFs and thus still far away from roundoff, despite taking 16 seconds.</p>
 <p>Note that the above numbers are a bit pessimistic because they include the time it takes the Chebyshev smoother to compute an eigenvalue estimate, which is around 10 percent of the solver time. If the system is solved several times (as e.g. common in fluid dynamics), this eigenvalue cost is only paid once and faster times become available.</p>
 <p><a class="anchor" id="Evaluationofefficiencyofingredients"></a></p><h3>Evaluation of efficiency of ingredients</h3>
 <p>Finally, we take a look at some of the special ingredients presented in this tutorial program, namely the <a class="el" href="classFE__DGQHermite.html">FE_DGQHermite</a> basis in particular and the specification of <a class="el" href="classMatrixFree.html#href_anchor">MatrixFree::DataAccessOnFaces</a>. In the following table, the third row shows the optimized solver above, the fourth row shows the timings with only the <a class="el" href="classMatrixFree.html#href_anchor">MatrixFree::DataAccessOnFaces</a> set to <code>unspecified</code> rather than the optimal <code>gradients</code>, and the last one with replacing <a class="el" href="classFE__DGQHermite.html">FE_DGQHermite</a> by the basic <a class="el" href="classFE__DGQ.html">FE_DGQ</a> elements where both the MPI exchange are more expensive and the operations done by <a class="el" href="classFEFaceEvaluation.html#href_anchor">FEFaceEvaluation::gather_evaluate()</a> and <a class="el" href="classFEFaceEvaluation.html#href_anchor">FEFaceEvaluation::integrate_scatter()</a>.</p>
@@ -1351,7 +1351,7 @@
 <th>Solver time <a class="el" href="classFE__DGQ.html">FE_DGQ</a> [s] </th><td>0.712 </td><td>2.041 </td><td>5.066 </td><td>9.335 </td><td>2.379 </td><td>3.802 </td><td>6.564 </td><td>9.714 </td><td>14.54 </td><td>22.76 </td><td>4.148 </td><td>5.857  </td></tr>
 </table>
 <p>The data in the table shows that not using <a class="el" href="classMatrixFree.html#href_anchor">MatrixFree::DataAccessOnFaces</a> increases costs by around 10% for higher polynomial degrees. For lower degrees, the difference is obviously less pronounced because the volume-to-surface ratio is more beneficial and less data needs to be exchanged. The difference is larger when looking at the matrix-vector product only, rather than the full multigrid solver shown here, with around 20% worse timings just because of the MPI communication.</p>
-<p>For <picture><source srcset="form_4799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=1$" src="form_4799.png"/></picture> and <picture><source srcset="form_1182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=2$" src="form_1182.png"/></picture>, the Hermite-like basis functions do obviously not really pay off (indeed, for <picture><source srcset="form_4799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=1$" src="form_4799.png"/></picture> the polynomials are exactly the same as for <a class="el" href="classFE__DGQ.html">FE_DGQ</a>) and the results are similar as with the <a class="el" href="classFE__DGQ.html">FE_DGQ</a> basis. However, for degrees starting at three, we see an increasing advantage for <a class="el" href="classFE__DGQHermite.html">FE_DGQHermite</a>, showing the effectiveness of these basis functions.</p>
+<p>For <picture><source srcset="form_4799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=1$" src="form_4799.png"/></picture> and <picture><source srcset="form_1174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=2$" src="form_1174.png"/></picture>, the Hermite-like basis functions do obviously not really pay off (indeed, for <picture><source srcset="form_4799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=1$" src="form_4799.png"/></picture> the polynomials are exactly the same as for <a class="el" href="classFE__DGQ.html">FE_DGQ</a>) and the results are similar as with the <a class="el" href="classFE__DGQ.html">FE_DGQ</a> basis. However, for degrees starting at three, we see an increasing advantage for <a class="el" href="classFE__DGQHermite.html">FE_DGQHermite</a>, showing the effectiveness of these basis functions.</p>
 <p><a class="anchor" id="Possibilitiesforextension"></a></p><h3>Possibilities for extension</h3>
 <p>As mentioned in the introduction, the fast diagonalization method as realized here is tied to a Cartesian mesh with constant coefficients. When dealing with meshes that contain deformed cells or with variable coefficients, it is common to determine a nearby Cartesian mesh cell as an approximation. This can be done with the class <a class="el" href="classTensorProductMatrixSymmetricSumCollection.html">TensorProductMatrixSymmetricSumCollection</a>. Here, one can insert cell matrices similarly to the <a class="el" href="classPreconditionBlock.html#href_anchor">PreconditionBlockJacobi::initialize()</a> function of this tutorial program. The benefit of the collection class is that cells on which the coefficient of the PDE has the same value can re-use the same Laplacian matrix, which reduces the memory consumption for the inverse matrices. As compared to the algorithm implemented in this tutorial program, one would define the length scales as the distances between opposing faces. For continuous elements, the code project &lt;a href=<a href="https://github.com/peterrum/dealii-dd-and-schwarz">https://github.com/peterrum/dealii-dd-and-schwarz</a>"&gt;Cache-optimized and
 low-overhead implementations of multigrid smoothers for high-order FEM
/usr/share/doc/packages/dealii/doxygen/deal.II/step_6.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_6.html	2024-03-17 21:57:47.899261820 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_6.html	2024-03-17 21:57:47.899261820 +0000
@@ -170,14 +170,14 @@
   \|\nabla(u-u_h)\|_{\Omega} \le C h_\text{max}^p \| \nabla^{p+1} u \|_{\Omega},
 \end{align*}" src="form_6004.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> is some constant independent of <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> and <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture>, <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> is the polynomial degree of the finite element in use, and <picture><source srcset="form_6005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_\text{max}$" src="form_6005.png"/></picture> is the diameter of the largest cell. So if the <em>largest</em> cell is important, then why would we want to make the mesh fine in some parts of the domain but not all?</p>
+<p> where <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> is some constant independent of <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> and <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture>, <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> is the polynomial degree of the finite element in use, and <picture><source srcset="form_6005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_\text{max}$" src="form_6005.png"/></picture> is the diameter of the largest cell. So if the <em>largest</em> cell is important, then why would we want to make the mesh fine in some parts of the domain but not all?</p>
 <p>The answer lies in the observation that the formula above is not optimal. In fact, some more work shows that the following is a better estimate (which you should compare to the square of the estimate above):  </p><p class="formulaDsp">
 <picture><source srcset="form_6006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \|\nabla(u-u_h)\|_{\Omega}^2 \le C \sum_K h_K^{2p} \| \nabla^{p+1} u \|^2_K.
 \end{align*}" src="form_6006.png"/></picture>
 </p>
 <p> (Because <picture><source srcset="form_6007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_K\le h_\text{max}$" src="form_6007.png"/></picture>, this formula immediately implies the previous one if you just pull the mesh size out of the sum.) What this formula suggests is that it is not necessary to make the <em>largest</em> cell small, but that the cells really only need to be small <em>where <picture><source srcset="form_6008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\| \nabla^{p+1} u \|_K$" src="form_6008.png"/></picture> is large</em>! In other words: The mesh really only has to be fine where the solution has large variations, as indicated by the <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>st derivative. This makes intuitive sense: if, for example, we use a linear element <picture><source srcset="form_1047_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p=1$" src="form_1047.png"/></picture>, then places where the solution is nearly linear (as indicated by <picture><source srcset="form_6009_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla^2 u$" src="form_6009.png"/></picture> being small) will be well resolved even if the mesh is coarse. Only those places where the second derivative is large will be poorly resolved by large elements, and consequently that's where we should make the mesh small.</p>
-<p>Of course, this <em>a priori estimate</em> is not very useful in practice since we don't know the exact solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> of the problem, and consequently, we cannot compute <picture><source srcset="form_6010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla^{p+1}u$" src="form_6010.png"/></picture>. But, and that is the approach commonly taken, we can compute numerical approximations of <picture><source srcset="form_6010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla^{p+1}u$" src="form_6010.png"/></picture> based only on the discrete solution <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> that we have computed before. We will discuss this in slightly more detail below. This will then help us determine which cells have a large <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>st derivative, and these are then candidates for refining the mesh.</p>
+<p>Of course, this <em>a priori estimate</em> is not very useful in practice since we don't know the exact solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> of the problem, and consequently, we cannot compute <picture><source srcset="form_6010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla^{p+1}u$" src="form_6010.png"/></picture>. But, and that is the approach commonly taken, we can compute numerical approximations of <picture><source srcset="form_6010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla^{p+1}u$" src="form_6010.png"/></picture> based only on the discrete solution <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> that we have computed before. We will discuss this in slightly more detail below. This will then help us determine which cells have a large <picture><source srcset="form_564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p+1$" src="form_564.png"/></picture>st derivative, and these are then candidates for refining the mesh.</p>
 <p><a class="anchor" id="Howtodealwithhangingnodesintheory"></a></p><h3>How to deal with hanging nodes in theory </h3>
 <p>The methods using triangular meshes mentioned above go to great lengths to make sure that each vertex is a vertex of all adjacent cells &ndash; i.e., that there are no hanging nodes. This then automatically makes sure that we can define shape functions in such a way that they are globally continuous (if we use the common <picture><source srcset="form_276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_p$" src="form_276.png"/></picture> Lagrange finite element methods we have been using so far in the tutorial programs, as represented by the <a class="el" href="classFE__Q.html">FE_Q</a> class).</p>
 <p>On the other hand, if we define shape functions on meshes with hanging nodes, we may end up with shape functions that are not continuous. To see this, think about the situation above where the top right cell is not refined, and consider for a moment the use of a bilinear finite element. In that case, the shape functions associated with the hanging nodes are defined in the obvious way on the two small cells adjacent to each of the hanging nodes. But how do we extend them to the big adjacent cells? Clearly, the function's extension to the big cell cannot be bilinear because then it needs to be linear along each edge of the large cell, and that means that it needs to be zero on the entire edge because it needs to be zero on the two vertices of the large cell on that edge. But it is not zero at the hanging node itself when seen from the small cells' side &ndash; so it is not continuous. The following three figures show three of the shape functions along the edges in question that turn out to not be continuous when defined in the usual way simply based on the cells they are adjacent to:</p>
@@ -193,7 +193,7 @@
 <img src="hanging_nodes_shape_functions_3.png" alt=""/>
 <div class="caption">
 A discontinuous shape function adjacent to a hanging node</div></div>
- </div> </div> </div><p>But we do want the finite element solution to be continuous so that we have a &ldquo;conforming finite element method&rdquo; where the discrete finite element space is a proper subset of the <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture> function space in which we seek the solution of the Laplace equation. To guarantee that the global solution is continuous at these nodes as well, we have to state some additional constraints on the values of the solution at these nodes. The trick is to realize that while the shape functions shown above are discontinuous (and consequently an <em>arbitrary</em> linear combination of them is also discontinuous), that linear combinations in which the shape functions are added up as <picture><source srcset="form_6011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)=\sum_j U_j \varphi_j(\mathbf x)$" src="form_6011.png"/></picture> can be continuous <em>if the coefficients <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> satisfy certain relationships</em>. In other words, the coefficients <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> can not be chosen arbitrarily but have to satisfy certain constraints so that the function <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> is in fact continuous. What these constraints have to look is relatively easy to understand conceptually, but the implementation in software is complicated and takes several thousand lines of code. On the other hand, in user code, it is only about half a dozen lines you have to add when dealing with hanging nodes.</p>
+ </div> </div> </div><p>But we do want the finite element solution to be continuous so that we have a &ldquo;conforming finite element method&rdquo; where the discrete finite element space is a proper subset of the <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture> function space in which we seek the solution of the Laplace equation. To guarantee that the global solution is continuous at these nodes as well, we have to state some additional constraints on the values of the solution at these nodes. The trick is to realize that while the shape functions shown above are discontinuous (and consequently an <em>arbitrary</em> linear combination of them is also discontinuous), that linear combinations in which the shape functions are added up as <picture><source srcset="form_6011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(\mathbf x)=\sum_j U_j \varphi_j(\mathbf x)$" src="form_6011.png"/></picture> can be continuous <em>if the coefficients <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> satisfy certain relationships</em>. In other words, the coefficients <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> can not be chosen arbitrarily but have to satisfy certain constraints so that the function <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> is in fact continuous. What these constraints have to look is relatively easy to understand conceptually, but the implementation in software is complicated and takes several thousand lines of code. On the other hand, in user code, it is only about half a dozen lines you have to add when dealing with hanging nodes.</p>
 <p>In the program below, we will show how we can get these constraints from deal.II, and how to use them in the solution of the linear system of equations. Before going over the details of the program below, you may want to take a look at the <a class="el" href="group__constraints.html">Constraints on degrees of freedom</a> documentation module that explains how these constraints can be computed and what classes in deal.II work on them.</p>
 <p><a class="anchor" id="Howtodealwithhangingnodesinpractice"></a></p><h3>How to deal with hanging nodes in practice </h3>
 <p>The practice of hanging node constraints is rather simpler than the theory we have outlined above. In reality, you will really only have to add about half a dozen lines of additional code to a program like <a class="el" href="step_4.html">step-4</a> to make it work with adaptive meshes that have hanging nodes. The interesting part about this is that it is entirely independent of the equation you are solving: The algebraic nature of these constraints has nothing to do with the equation and only depends on the choice of finite element. As a consequence, the code to deal with these constraints is entirely contained in the deal.II library itself, and you do not need to worry about the details.</p>
@@ -206,11 +206,11 @@
 <p>These four steps are really all that is necessary &ndash; it's that simple from a user perspective. The fact that, in the function calls mentioned above, you will run through several thousand lines of not-so-trivial code is entirely immaterial to this: In user code, there are really only four additional steps.</p>
 <p><a class="anchor" id="Howweobtainlocallyrefinedmeshes"></a></p><h3>How we obtain locally refined meshes </h3>
 <p>The next question, now that we know how to <em>deal</em> with meshes that have these hanging nodes is how we <em>obtain</em> them.</p>
-<p>A simple way has already been shown in <a class="el" href="step_1.html">step-1</a>: If you <em>know</em> where it is necessary to refine the mesh, then you can create one by hand. But in reality, we don't know this: We don't know the solution of the PDE up front (because, if we did, we wouldn't have to use the finite element method), and consequently we do not know where it is necessary to add local mesh refinement to better resolve areas where the solution has strong variations. But the discussion above shows that maybe we can get away with using the discrete solution <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> on one mesh to estimate the derivatives <picture><source srcset="form_6012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla^{p+1} u$" src="form_6012.png"/></picture>, and then use this to determine which cells are too large and which already small enough. We can then generate a new mesh from the current one using local mesh refinement. If necessary, this step is then repeated until we are happy with our numerical solution &ndash; or, more commonly, until we run out of computational resources or patience.</p>
+<p>A simple way has already been shown in <a class="el" href="step_1.html">step-1</a>: If you <em>know</em> where it is necessary to refine the mesh, then you can create one by hand. But in reality, we don't know this: We don't know the solution of the PDE up front (because, if we did, we wouldn't have to use the finite element method), and consequently we do not know where it is necessary to add local mesh refinement to better resolve areas where the solution has strong variations. But the discussion above shows that maybe we can get away with using the discrete solution <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> on one mesh to estimate the derivatives <picture><source srcset="form_6012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla^{p+1} u$" src="form_6012.png"/></picture>, and then use this to determine which cells are too large and which already small enough. We can then generate a new mesh from the current one using local mesh refinement. If necessary, this step is then repeated until we are happy with our numerical solution &ndash; or, more commonly, until we run out of computational resources or patience.</p>
 <p>So that's exactly what we will do. The locally refined grids are produced using an <em>error estimator</em> which estimates the energy error for numerical solutions of the Laplace operator. Since it was developed by Kelly and co-workers, we often refer to it as the &ldquo;Kelly refinement indicator&rdquo; in the library, documentation, and mailing list. The class that implements it is called <a class="el" href="classKellyErrorEstimator.html">KellyErrorEstimator</a>, and there is a great deal of information to be found in the documentation of that class that need not be repeated here. The summary, however, is that the class computes a vector with as many entries as there are <a class="el" href="DEALGlossary.html#href_anchor">active cells</a>, and where each entry contains an estimate of the error on that cell. This estimate is then used to refine the cells of the mesh: those cells that have a large error will be marked for refinement, those that have a particularly small estimate will be marked for coarsening. We don't have to do this by hand: The functions in namespace <a class="el" href="namespaceGridRefinement.html">GridRefinement</a> will do all of this for us once we have obtained the vector of error estimates.</p>
 <p>It is worth noting that while the Kelly error estimator was developed for Laplace's equation, it has proven to be a suitable tool to generate locally refined meshes for a wide range of equations, not even restricted to elliptic only problems. Although it will create non-optimal meshes for other equations, it is often a good way to quickly produce meshes that are well adapted to the features of solutions, such as regions of great variation or discontinuities.</p>
 <p><a class="anchor" id="Boundaryconditions"></a></p><h3>Boundary conditions </h3>
-<p>It turns out that one can see Dirichlet boundary conditions as just another constraint on the degrees of freedom. It's a particularly simple one, indeed: If <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> is a degree of freedom on the boundary, with position <picture><source srcset="form_6013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_j$" src="form_6013.png"/></picture>, then imposing the boundary condition <picture><source srcset="form_4749_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=g$" src="form_4749.png"/></picture> on <picture><source srcset="form_3116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3116.png"/></picture> simply yields the constraint <picture><source srcset="form_6014_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j=g({\mathbf x}_j)$" src="form_6014.png"/></picture>.</p>
+<p>It turns out that one can see Dirichlet boundary conditions as just another constraint on the degrees of freedom. It's a particularly simple one, indeed: If <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> is a degree of freedom on the boundary, with position <picture><source srcset="form_6013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_j$" src="form_6013.png"/></picture>, then imposing the boundary condition <picture><source srcset="form_4749_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=g$" src="form_4749.png"/></picture> on <picture><source srcset="form_3192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3192.png"/></picture> simply yields the constraint <picture><source srcset="form_6014_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j=g({\mathbf x}_j)$" src="form_6014.png"/></picture>.</p>
 <p>The <a class="el" href="classAffineConstraints.html">AffineConstraints</a> class can handle such constraints as well, which makes it convenient to let the same object we use for hanging node constraints also deal with these Dirichlet boundary conditions. This way, we don't need to apply the boundary conditions after assembly (like we did in the earlier steps). All that is necessary is that we call the variant of <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::interpolate_boundary_values()</a> that returns its information in an <a class="el" href="classAffineConstraints.html">AffineConstraints</a> object, rather than the <code>std::map</code> we have used in previous tutorial programs.</p>
 <p><a class="anchor" id="Otherthingsthisprogramshows"></a> </p><h3>Other things this program shows </h3>
 <p>Since the concepts used for locally refined grids are so important, we do not show much other material in this example. The most important exception is that we show how to use biquadratic elements instead of the bilinear ones which we have used in all previous examples. In fact, the use of higher order elements is accomplished by only replacing three lines of the program, namely the initialization of the <code>fe</code> member variable in the constructor of the main class of this program, and the use of an appropriate quadrature formula in two places. The rest of the program is unchanged.</p>
@@ -667,8 +667,8 @@
 <td align="center"><img src="https://www.dealii.org/images/steps/developer/step-6.q2.dofs_vs_iterations.png" alt="" class="inline"/>  </td><td align="center"><img src="https://www.dealii.org/images/steps/developer/step-6.q2.dofs_vs_time.png" alt="" class="inline"/>   </td></tr>
 </table>
 <p>As we can see, all preconditioners behave pretty much the same on this simple problem, with the number of iterations growing like <picture><source srcset="form_6017_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal
-O}(N^{1/2})$" src="form_6017.png"/></picture> and because each iteration requires around <picture><source srcset="form_3453_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal
-O}(N)$" src="form_3453.png"/></picture> operations the total CPU time grows like <picture><source srcset="form_6018_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal
+O}(N^{1/2})$" src="form_6017.png"/></picture> and because each iteration requires around <picture><source srcset="form_3317_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal
+O}(N)$" src="form_3317.png"/></picture> operations the total CPU time grows like <picture><source srcset="form_6018_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal
 O}(N^{3/2})$" src="form_6018.png"/></picture> (for the few smallest meshes, the CPU time is so small that it doesn't record). Note that even though it is the simplest method, Jacobi is the fastest for this problem.</p>
 <p>The situation changes slightly when the finite element is not a bi-quadratic one (i.e., polynomial degree two) as selected in the constructor of this program, but a bi-linear one (polynomial degree one). If one makes this change, the results are as follows:</p>
 <table width="60%" align="center">
@@ -676,7 +676,7 @@
 <td align="center"><img src="https://www.dealii.org/images/steps/developer/step-6.q1.dofs_vs_iterations.png" alt="" class="inline"/>  </td><td align="center"><img src="https://www.dealii.org/images/steps/developer/step-6.q1.dofs_vs_time.png" alt="" class="inline"/>   </td></tr>
 </table>
 <p>In other words, while the increase in iterations and CPU time is as before, Jacobi is now the method that requires the most iterations; it is still the fastest one, however, owing to the simplicity of the operations it has to perform. This is not to say that Jacobi is actually a good preconditioner &ndash; for problems of appreciable size, it is definitely not, and other methods will be substantially better &ndash; but really only that it is fast because its implementation is so simple that it can compensate for a larger number of iterations.</p>
-<p>The message to take away from this is not that simplicity in preconditioners is always best. While this may be true for the current problem, it definitely is not once we move to more complicated problems (elasticity or Stokes, for examples <a class="el" href="step_8.html">step-8</a> or <a class="el" href="step_22.html">step-22</a>). Secondly, all of these preconditioners still lead to an increase in the number of iterations as the number <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> of degrees of freedom grows, for example <picture><source srcset="form_6019_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N^\alpha)$" src="form_6019.png"/></picture>; this, in turn, leads to a total growth in effort as <picture><source srcset="form_6020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N^{1+\alpha})$" src="form_6020.png"/></picture> since each iteration takes <picture><source srcset="form_183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_183.png"/></picture> work. This behavior is undesirable: we would really like to solve linear systems with <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> unknowns in a total of <picture><source srcset="form_183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_183.png"/></picture> work; there is a class of preconditioners that can achieve this, namely geometric (<a class="el" href="step_16.html">step-16</a>, <a class="el" href="step_37.html">step-37</a>, <a class="el" href="step_39.html">step-39</a>) or algebraic multigrid (<a class="el" href="step_31.html">step-31</a>, <a class="el" href="step_40.html">step-40</a>, and several others) preconditioners. They are, however, significantly more complex than the preconditioners outlined above, and so we will leave their use to these later tutorial programs. The point to make, however, is that "real" finite element programs do not use the preconditioners we mention above: These are simply shown for expository purposes.</p>
+<p>The message to take away from this is not that simplicity in preconditioners is always best. While this may be true for the current problem, it definitely is not once we move to more complicated problems (elasticity or Stokes, for examples <a class="el" href="step_8.html">step-8</a> or <a class="el" href="step_22.html">step-22</a>). Secondly, all of these preconditioners still lead to an increase in the number of iterations as the number <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> of degrees of freedom grows, for example <picture><source srcset="form_6019_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N^\alpha)$" src="form_6019.png"/></picture>; this, in turn, leads to a total growth in effort as <picture><source srcset="form_6020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N^{1+\alpha})$" src="form_6020.png"/></picture> since each iteration takes <picture><source srcset="form_157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_157.png"/></picture> work. This behavior is undesirable: we would really like to solve linear systems with <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> unknowns in a total of <picture><source srcset="form_157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N)$" src="form_157.png"/></picture> work; there is a class of preconditioners that can achieve this, namely geometric (<a class="el" href="step_16.html">step-16</a>, <a class="el" href="step_37.html">step-37</a>, <a class="el" href="step_39.html">step-39</a>) or algebraic multigrid (<a class="el" href="step_31.html">step-31</a>, <a class="el" href="step_40.html">step-40</a>, and several others) preconditioners. They are, however, significantly more complex than the preconditioners outlined above, and so we will leave their use to these later tutorial programs. The point to make, however, is that "real" finite element programs do not use the preconditioners we mention above: These are simply shown for expository purposes.</p>
 <p>Finally, the last message to take home is that when the data shown above was generated (in 2018), linear systems with 100,000 unknowns are easily solved on a desktop or laptop machine in about a second, making the solution of relatively simple 2d problems even to very high accuracy not that big a task as it used to be in the past. At the same time, the situation for 3d problems continues to be quite different: A uniform 2d mesh with 100,000 unknowns corresponds to a grid with about <picture><source srcset="form_6021_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$300 \times 300$" src="form_6021.png"/></picture> nodes; the corresponding 3d mesh has <picture><source srcset="form_6022_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$300 \times 300 \times 300$" src="form_6022.png"/></picture> nodes and 30 million unknowns. Because finite element matrices in 3d have many more nonzero entries than in 2d, solving these linear systems will not only take 300 times as much CPU time, but substantially longer. In other words, achieving the same resolution in 3d <em>is</em> quite a large problem, and solving it within a reasonable amount of time <em>will</em> require much more work to implement better linear solvers. As mentioned above, multigrid methods and matrix-free methods (see, for example, <a class="el" href="step_37.html">step-37</a>), along with parallelization (<a class="el" href="step_40.html">step-40</a>) will be necessary, but are then also able to comfortably solve such linear systems.</p>
 <p><a class="anchor" id="Abettermesh"></a></p><h4>A better mesh</h4>
 <p>If you look at the meshes above, you will see even though the domain is the unit disk, and the jump in the coefficient lies along a circle, the cells that make up the mesh do not track this geometry well. The reason, already hinted at in <a class="el" href="step_1.html">step-1</a>, is that in the absence of other information, the <a class="el" href="classTriangulation.html">Triangulation</a> class only sees a bunch of coarse grid cells but has, of course, no real idea what kind of geometry they might represent when looked at together. For this reason, we need to tell the <a class="el" href="classTriangulation.html">Triangulation</a> what to do when a cell is refined: where should the new vertices at the edge midpoints and the cell midpoint be located so that the child cells better represent the desired geometry than the parent cell.</p>
@@ -794,15 +794,15 @@
   -\Delta u = f
 \]" src="form_6025.png"/></picture>
 </p>
-<p> on smoothly bounded, convex domains are known to be smooth themselves. The exact degree of smoothness, i.e., the function space in which the solution lives, depends on how smooth exactly the boundary of the domain is, and how smooth the right hand side is. Some regularity of the solution may be lost at the boundary, but one generally has that the solution is twice more differentiable in compact subsets of the domain than the right hand side. If, in particular, the right hand side satisfies <picture><source srcset="form_6026_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\in C^\infty(\Omega)$" src="form_6026.png"/></picture>, then <picture><source srcset="form_6027_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u \in C^\infty(\Omega_i)$" src="form_6027.png"/></picture> where <picture><source srcset="form_6028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega_i$" src="form_6028.png"/></picture> is any compact subset of <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> ( <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> is an open domain, so a compact subset needs to keep a positive distance from <picture><source srcset="form_3116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3116.png"/></picture>).</p>
-<p>The situation we chose for the current example is different, however: we look at an equation with a non-constant coefficient <picture><source srcset="form_2178_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)$" src="form_2178.png"/></picture>:  </p><p class="formulaDsp">
+<p> on smoothly bounded, convex domains are known to be smooth themselves. The exact degree of smoothness, i.e., the function space in which the solution lives, depends on how smooth exactly the boundary of the domain is, and how smooth the right hand side is. Some regularity of the solution may be lost at the boundary, but one generally has that the solution is twice more differentiable in compact subsets of the domain than the right hand side. If, in particular, the right hand side satisfies <picture><source srcset="form_6026_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\in C^\infty(\Omega)$" src="form_6026.png"/></picture>, then <picture><source srcset="form_6027_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u \in C^\infty(\Omega_i)$" src="form_6027.png"/></picture> where <picture><source srcset="form_6028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega_i$" src="form_6028.png"/></picture> is any compact subset of <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> ( <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> is an open domain, so a compact subset needs to keep a positive distance from <picture><source srcset="form_3192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3192.png"/></picture>).</p>
+<p>The situation we chose for the current example is different, however: we look at an equation with a non-constant coefficient <picture><source srcset="form_2158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)$" src="form_2158.png"/></picture>:  </p><p class="formulaDsp">
 <picture><source srcset="form_6029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   -\nabla \cdot (a \nabla u) = f.
 \]" src="form_6029.png"/></picture>
 </p>
-<p> Here, if <picture><source srcset="form_1010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_1010.png"/></picture> is not smooth, then the solution will not be smooth either, regardless of <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture>. In particular, we expect that wherever <picture><source srcset="form_1010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_1010.png"/></picture> is discontinuous along a line (or along a plane in 3d), the solution will have a kink. This is easy to see: if for example <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> is continuous, then <picture><source srcset="form_6030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=-\nabla \cdot (a \nabla u)$" src="form_6030.png"/></picture> needs to be continuous. This means that <picture><source srcset="form_6031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a \nabla u$" src="form_6031.png"/></picture> must be continuously differentiable (not have a kink). Consequently, if <picture><source srcset="form_1010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_1010.png"/></picture> has a discontinuity, then <picture><source srcset="form_2177_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u$" src="form_2177.png"/></picture> must have an opposite discontinuity so that the two exactly cancel and their product yields a function without a discontinuity. But for <picture><source srcset="form_2177_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u$" src="form_2177.png"/></picture> to have a discontinuity, <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> must have a kink. This is of course exactly what is happening in the current example, and easy to observe in the pictures of the solution.</p>
-<p>In general, if the coefficient <picture><source srcset="form_2178_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)$" src="form_2178.png"/></picture> is discontinuous along a line in 2d, or a plane in 3d, then the solution may have a kink, but the gradient of the solution will not go to infinity. That means, that the solution is at least still in the <a href="https://en.wikipedia.org/wiki/Sobolev_space">Sobolev space</a> <picture><source srcset="form_2733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W^{1,\infty}$" src="form_2733.png"/></picture> (i.e., roughly speaking, in the space of functions whose derivatives are bounded). On the other hand, we know that in the most extreme cases &ndash; i.e., where the domain has reentrant corners, the right hand side only satisfies <picture><source srcset="form_6032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\in H^{-1}$" src="form_6032.png"/></picture>, or the coefficient <picture><source srcset="form_1010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_1010.png"/></picture> is only in <picture><source srcset="form_2806_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^\infty$" src="form_2806.png"/></picture> &ndash; all we can expect is that <picture><source srcset="form_6033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in H^1$" src="form_6033.png"/></picture> (i.e., the <a href="https://en.wikipedia.org/wiki/Sobolev_space#href_anchor">Sobolev space</a> of functions whose derivative is square integrable), a much larger space than <picture><source srcset="form_2733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W^{1,\infty}$" src="form_2733.png"/></picture>. It is not very difficult to create cases where the solution is in a space <picture><source srcset="form_6034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{1+s}$" src="form_6034.png"/></picture> where we can get <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> to become as small as we want. Such cases are often used to test adaptive finite element methods because the mesh will have to resolve the singularity that causes the solution to not be in <picture><source srcset="form_2733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W^{1,\infty}$" src="form_2733.png"/></picture> any more.</p>
-<p>The typical example one uses for this is called the <em>Kellogg problem</em> (referring to <b>[Kel74]</b>), which in the commonly used form has a coefficient <picture><source srcset="form_2178_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)$" src="form_2178.png"/></picture> that has different values in the four quadrants of the plane (or eight different values in the octants of <picture><source srcset="form_1404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^3$" src="form_1404.png"/></picture>). The exact degree of regularity (the <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> in the index of the Sobolev space above) depends on the values of <picture><source srcset="form_2178_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)$" src="form_2178.png"/></picture> coming together at the origin, and by choosing the jumps large enough, the regularity of the solution can be made as close as desired to <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture>.</p>
+<p> Here, if <picture><source srcset="form_964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_964.png"/></picture> is not smooth, then the solution will not be smooth either, regardless of <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture>. In particular, we expect that wherever <picture><source srcset="form_964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_964.png"/></picture> is discontinuous along a line (or along a plane in 3d), the solution will have a kink. This is easy to see: if for example <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> is continuous, then <picture><source srcset="form_6030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=-\nabla \cdot (a \nabla u)$" src="form_6030.png"/></picture> needs to be continuous. This means that <picture><source srcset="form_6031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a \nabla u$" src="form_6031.png"/></picture> must be continuously differentiable (not have a kink). Consequently, if <picture><source srcset="form_964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_964.png"/></picture> has a discontinuity, then <picture><source srcset="form_2157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u$" src="form_2157.png"/></picture> must have an opposite discontinuity so that the two exactly cancel and their product yields a function without a discontinuity. But for <picture><source srcset="form_2157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u$" src="form_2157.png"/></picture> to have a discontinuity, <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> must have a kink. This is of course exactly what is happening in the current example, and easy to observe in the pictures of the solution.</p>
+<p>In general, if the coefficient <picture><source srcset="form_2158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)$" src="form_2158.png"/></picture> is discontinuous along a line in 2d, or a plane in 3d, then the solution may have a kink, but the gradient of the solution will not go to infinity. That means, that the solution is at least still in the <a href="https://en.wikipedia.org/wiki/Sobolev_space">Sobolev space</a> <picture><source srcset="form_2733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W^{1,\infty}$" src="form_2733.png"/></picture> (i.e., roughly speaking, in the space of functions whose derivatives are bounded). On the other hand, we know that in the most extreme cases &ndash; i.e., where the domain has reentrant corners, the right hand side only satisfies <picture><source srcset="form_6032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\in H^{-1}$" src="form_6032.png"/></picture>, or the coefficient <picture><source srcset="form_964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_964.png"/></picture> is only in <picture><source srcset="form_2799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^\infty$" src="form_2799.png"/></picture> &ndash; all we can expect is that <picture><source srcset="form_6033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in H^1$" src="form_6033.png"/></picture> (i.e., the <a href="https://en.wikipedia.org/wiki/Sobolev_space#href_anchor">Sobolev space</a> of functions whose derivative is square integrable), a much larger space than <picture><source srcset="form_2733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W^{1,\infty}$" src="form_2733.png"/></picture>. It is not very difficult to create cases where the solution is in a space <picture><source srcset="form_6034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{1+s}$" src="form_6034.png"/></picture> where we can get <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> to become as small as we want. Such cases are often used to test adaptive finite element methods because the mesh will have to resolve the singularity that causes the solution to not be in <picture><source srcset="form_2733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$W^{1,\infty}$" src="form_2733.png"/></picture> any more.</p>
+<p>The typical example one uses for this is called the <em>Kellogg problem</em> (referring to <b>[Kel74]</b>), which in the commonly used form has a coefficient <picture><source srcset="form_2158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)$" src="form_2158.png"/></picture> that has different values in the four quadrants of the plane (or eight different values in the octants of <picture><source srcset="form_1422_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^3$" src="form_1422.png"/></picture>). The exact degree of regularity (the <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> in the index of the Sobolev space above) depends on the values of <picture><source srcset="form_2158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)$" src="form_2158.png"/></picture> coming together at the origin, and by choosing the jumps large enough, the regularity of the solution can be made as close as desired to <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture>.</p>
 <p>To implement something like this, one could replace the coefficient function by the following (shown here only for the 2d case): </p><div class="fragment"><div class="line"><span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line"><span class="keywordtype">double</span> coefficient (<span class="keyword">const</span> <a class="code hl_class" href="classPoint.html">Point&lt;dim&gt;</a> &amp;p)</div>
 <div class="line">{</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_60.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_60.html	2024-03-17 21:57:47.979262314 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_60.html	2024-03-17 21:57:47.987262363 +0000
@@ -132,24 +132,24 @@
 <dl class="section note"><dt>Note</dt><dd>If you use this program as a basis for your own work, please consider citing it in your list of references. The initial version of this work was contributed to the deal.II project by the authors listed in the following citation:  <a href="https://doi.org/10.5281/zenodo.1243280"><img src="https://zenodo.org/badge/DOI/10.5281/zenodo.1243280.svg" alt="10.5281/zenodo.1243280"/></a> </dd></dl>
 <p><a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p><a class="anchor" id="NonmatchinggridconstraintsthroughdistributedLagrangemultipliers"></a></p><h3>Non-matching grid constraints through distributed Lagrange multipliers</h3>
-<p>In this tutorial we consider the case of two domains, <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> in <picture><source srcset="form_6035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^{\text{spacedim}}$" src="form_6035.png"/></picture> and <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> in <picture><source srcset="form_6036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^{\text{dim}}$" src="form_6036.png"/></picture>, where <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is embedded in <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> ( <picture><source srcset="form_6037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma \subseteq \Omega$" src="form_6037.png"/></picture>). We want to solve a partial differential equation on <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, enforcing some conditions on the solution of the problem <em>on the embedded domain</em> <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>.</p>
+<p>In this tutorial we consider the case of two domains, <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> in <picture><source srcset="form_6035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^{\text{spacedim}}$" src="form_6035.png"/></picture> and <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> in <picture><source srcset="form_6036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R^{\text{dim}}$" src="form_6036.png"/></picture>, where <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is embedded in <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> ( <picture><source srcset="form_6037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma \subseteq \Omega$" src="form_6037.png"/></picture>). We want to solve a partial differential equation on <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, enforcing some conditions on the solution of the problem <em>on the embedded domain</em> <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>.</p>
 <p>There are two interesting scenarios:</p>
 <ul>
-<li>the geometrical dimension <code>dim</code> of the embedded domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is the same of the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> (<code>spacedim</code>), that is, the spacedim-dimensional measure of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is not zero, or</li>
-<li>the embedded domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> has an intrinsic dimension <code>dim</code> which is smaller than that of <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> (<code>spacedim</code>), thus its spacedim-dimensional measure is zero; for example it is a curve embedded in a two dimensional domain, or a surface embedded in a three-dimensional domain.</li>
+<li>the geometrical dimension <code>dim</code> of the embedded domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is the same of the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> (<code>spacedim</code>), that is, the spacedim-dimensional measure of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is not zero, or</li>
+<li>the embedded domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> has an intrinsic dimension <code>dim</code> which is smaller than that of <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> (<code>spacedim</code>), thus its spacedim-dimensional measure is zero; for example it is a curve embedded in a two dimensional domain, or a surface embedded in a three-dimensional domain.</li>
 </ul>
-<p>In both cases define the restriction operator <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture> as the operator that, given a continuous function on <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, returns its (continuous) restriction on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, i.e.,</p>
+<p>In both cases define the restriction operator <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture> as the operator that, given a continuous function on <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, returns its (continuous) restriction on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, i.e.,</p>
 <p class="formulaDsp">
 <picture><source srcset="form_6038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \gamma : C^0(\Omega) \mapsto C^0(\Gamma), \quad \text{ s.t. } \gamma u = u|_{\Gamma} \in C^0(\Gamma),
 \quad \forall u \in C^0(\Omega).
 \]" src="form_6038.png"/></picture>
 </p>
-<p>It is well known that the operator <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture> can be extended to a continuous operator on <picture><source srcset="form_3502_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Omega)$" src="form_3502.png"/></picture>, mapping functions in <picture><source srcset="form_3502_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Omega)$" src="form_3502.png"/></picture> to functions in <picture><source srcset="form_6039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Gamma)$" src="form_6039.png"/></picture> when the intrinsic dimension of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is the same of <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>.</p>
-<p>The same is true, with a less regular range space (namely <picture><source srcset="form_6040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{1/2}(\Gamma)$" src="form_6040.png"/></picture>), when the dimension of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is one less with respect to <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, and <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> does not have a boundary. In this second case, the operator <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture> is also known as the <em>trace</em> operator, and it is well defined for Lipschitz co-dimension one curves and surfaces <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> embedded in <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> (read <a href="https://en.wikipedia.org/wiki/Trace_operator">this wikipedia article</a> for further details on the trace operator).</p>
-<p>The co-dimension two case is a little more complicated, and in general it is not possible to construct a continuous trace operator, not even from <picture><source srcset="form_3502_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Omega)$" src="form_3502.png"/></picture> to <picture><source srcset="form_6041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2(\Gamma)$" src="form_6041.png"/></picture>, when the dimension of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is zero or one respectively in two and three dimensions.</p>
-<p>In this tutorial program we're not interested in further details on <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture>: we take the extension <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture> for granted, assuming that the dimension of the embedded domain (<code>dim</code>) is always smaller by one or equal with respect to the dimension of the embedding domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> (<code>spacedim</code>).</p>
-<p>We are going to solve the following differential problem: given a sufficiently regular function <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, a forcing term <picture><source srcset="form_6042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f \in L^2(\Omega)$" src="form_6042.png"/></picture> and a Dirichlet boundary condition <picture><source srcset="form_6043_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_D$" src="form_6043.png"/></picture> on <picture><source srcset="form_2866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega$" src="form_2866.png"/></picture>, find the solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> to</p>
+<p>It is well known that the operator <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture> can be extended to a continuous operator on <picture><source srcset="form_3510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Omega)$" src="form_3510.png"/></picture>, mapping functions in <picture><source srcset="form_3510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Omega)$" src="form_3510.png"/></picture> to functions in <picture><source srcset="form_6039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Gamma)$" src="form_6039.png"/></picture> when the intrinsic dimension of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is the same of <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>.</p>
+<p>The same is true, with a less regular range space (namely <picture><source srcset="form_6040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{1/2}(\Gamma)$" src="form_6040.png"/></picture>), when the dimension of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is one less with respect to <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, and <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> does not have a boundary. In this second case, the operator <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture> is also known as the <em>trace</em> operator, and it is well defined for Lipschitz co-dimension one curves and surfaces <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> embedded in <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> (read <a href="https://en.wikipedia.org/wiki/Trace_operator">this wikipedia article</a> for further details on the trace operator).</p>
+<p>The co-dimension two case is a little more complicated, and in general it is not possible to construct a continuous trace operator, not even from <picture><source srcset="form_3510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Omega)$" src="form_3510.png"/></picture> to <picture><source srcset="form_6041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2(\Gamma)$" src="form_6041.png"/></picture>, when the dimension of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is zero or one respectively in two and three dimensions.</p>
+<p>In this tutorial program we're not interested in further details on <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture>: we take the extension <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture> for granted, assuming that the dimension of the embedded domain (<code>dim</code>) is always smaller by one or equal with respect to the dimension of the embedding domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> (<code>spacedim</code>).</p>
+<p>We are going to solve the following differential problem: given a sufficiently regular function <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, a forcing term <picture><source srcset="form_6042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f \in L^2(\Omega)$" src="form_6042.png"/></picture> and a Dirichlet boundary condition <picture><source srcset="form_6043_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_D$" src="form_6043.png"/></picture> on <picture><source srcset="form_2907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega$" src="form_2907.png"/></picture>, find the solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> to</p>
 <p class="formulaDsp">
 <picture><source srcset="form_6044_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 - \Delta u + \gamma^T \lambda &amp;=&amp; f  \text{ in } \Omega\\
@@ -157,35 +157,35 @@
 u &amp; = &amp; u_D \text{ on } \partial\Omega.
 \end{eqnarray*}" src="form_6044.png"/></picture>
 </p>
-<p>This is a constrained problem, where we are looking for a function <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> that solves the Poisson equation and that satisfies Dirichlet boundary conditions <picture><source srcset="form_6045_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=u_D$" src="form_6045.png"/></picture> on <picture><source srcset="form_2866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega$" src="form_2866.png"/></picture>, subject to the constraint <picture><source srcset="form_6046_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma u = g$" src="form_6046.png"/></picture> using a Lagrange multiplier.</p>
-<p>When <picture><source srcset="form_3214_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=0$" src="form_3214.png"/></picture> this problem has a physical interpretation: harmonic functions, i.e., functions that satisfy the Laplace equation, can be thought of as the displacements of a membrane whose boundary values are prescribed. The current situation then corresponds to finding the shape of a membrane for which not only the displacement at the boundary, but also on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is prescribed. For example, if <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is a closed curve in 2d space, then that would model a soap film that is held in place by a wire loop along <picture><source srcset="form_2866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega$" src="form_2866.png"/></picture> as well as a second loop along <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>. In cases where <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is a whole area, you can think of this as a membrane that is stretched over an obstacle where <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is the contact area. (If the contact area is not known we have a different problem &ndash; called the "obstacle problem" &ndash; which is modeled in <a class="el" href="step_41.html">step-41</a>.)</p>
-<p>As a first example we study the zero Dirichlet boundary condition on <picture><source srcset="form_3116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3116.png"/></picture>. The same equations apply if we apply zero Neumann boundary conditions on <picture><source srcset="form_3116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3116.png"/></picture> or a mix of the two.</p>
-<p>The variational formulation can be derived by introducing two infinite dimensional spaces <picture><source srcset="form_2014_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega)$" src="form_2014.png"/></picture> and <picture><source srcset="form_6047_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q^*(\Gamma)$" src="form_6047.png"/></picture>, respectively for the solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> and for the Lagrange multiplier <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture>.</p>
+<p>This is a constrained problem, where we are looking for a function <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> that solves the Poisson equation and that satisfies Dirichlet boundary conditions <picture><source srcset="form_6045_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=u_D$" src="form_6045.png"/></picture> on <picture><source srcset="form_2907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega$" src="form_2907.png"/></picture>, subject to the constraint <picture><source srcset="form_6046_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma u = g$" src="form_6046.png"/></picture> using a Lagrange multiplier.</p>
+<p>When <picture><source srcset="form_3106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=0$" src="form_3106.png"/></picture> this problem has a physical interpretation: harmonic functions, i.e., functions that satisfy the Laplace equation, can be thought of as the displacements of a membrane whose boundary values are prescribed. The current situation then corresponds to finding the shape of a membrane for which not only the displacement at the boundary, but also on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is prescribed. For example, if <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is a closed curve in 2d space, then that would model a soap film that is held in place by a wire loop along <picture><source srcset="form_2907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega$" src="form_2907.png"/></picture> as well as a second loop along <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>. In cases where <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is a whole area, you can think of this as a membrane that is stretched over an obstacle where <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is the contact area. (If the contact area is not known we have a different problem &ndash; called the "obstacle problem" &ndash; which is modeled in <a class="el" href="step_41.html">step-41</a>.)</p>
+<p>As a first example we study the zero Dirichlet boundary condition on <picture><source srcset="form_3192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3192.png"/></picture>. The same equations apply if we apply zero Neumann boundary conditions on <picture><source srcset="form_3192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3192.png"/></picture> or a mix of the two.</p>
+<p>The variational formulation can be derived by introducing two infinite dimensional spaces <picture><source srcset="form_2013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega)$" src="form_2013.png"/></picture> and <picture><source srcset="form_6047_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q^*(\Gamma)$" src="form_6047.png"/></picture>, respectively for the solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> and for the Lagrange multiplier <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture>.</p>
 <p>Multiplying the first equation by <picture><source srcset="form_6048_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v \in V(\Omega)$" src="form_6048.png"/></picture> and the second by <picture><source srcset="form_6049_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q \in
-Q(\Gamma)$" src="form_6049.png"/></picture>, integrating by parts when possible, and exploiting the boundary conditions on <picture><source srcset="form_3116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3116.png"/></picture>, we obtain the following variational problem:</p>
-<p>Given a sufficiently regular function <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, find the solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> to  </p><p class="formulaDsp">
+Q(\Gamma)$" src="form_6049.png"/></picture>, integrating by parts when possible, and exploiting the boundary conditions on <picture><source srcset="form_3192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3192.png"/></picture>, we obtain the following variational problem:</p>
+<p>Given a sufficiently regular function <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, find the solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> to  </p><p class="formulaDsp">
 <picture><source srcset="form_6050_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 (\nabla u, \nabla v)_{\Omega} + (\lambda, \gamma v)_{\Gamma} &amp;=&amp; (f,v)_{\Omega} \qquad \forall v \in V(\Omega) \\
 (\gamma u, q)_{\Gamma} &amp;=&amp; (g,q)_{\Gamma} \qquad \forall q \in Q(\Gamma),
 \end{eqnarray*}" src="form_6050.png"/></picture>
 </p>
-<p>where <picture><source srcset="form_6051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\cdot, \cdot)_{\Omega}$" src="form_6051.png"/></picture> and <picture><source srcset="form_6052_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\cdot, \cdot)_{\Gamma}$" src="form_6052.png"/></picture> represent, respectively, <picture><source srcset="form_1209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2$" src="form_1209.png"/></picture> scalar products in <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> and in <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>.</p>
-<p>Inspection of the variational formulation tells us that the space <picture><source srcset="form_2014_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega)$" src="form_2014.png"/></picture> can be taken to be <picture><source srcset="form_292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1_0(\Omega)$" src="form_292.png"/></picture>. The space <picture><source srcset="form_6053_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q(\Gamma)$" src="form_6053.png"/></picture>, in the co-dimension zero case, should be taken as <picture><source srcset="form_6039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Gamma)$" src="form_6039.png"/></picture>, while in the co-dimension one case should be taken as <picture><source srcset="form_6040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{1/2}(\Gamma)$" src="form_6040.png"/></picture>.</p>
-<p>The function <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> should therefore be either in <picture><source srcset="form_6039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Gamma)$" src="form_6039.png"/></picture> (for the co-dimension zero case) or <picture><source srcset="form_6040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{1/2}(\Gamma)$" src="form_6040.png"/></picture> (for the co-dimension one case). This leaves us with a Lagrange multiplier <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> in <picture><source srcset="form_6047_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q^*(\Gamma)$" src="form_6047.png"/></picture>, which is either <picture><source srcset="form_6054_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{-1}(\Gamma)$" src="form_6054.png"/></picture> or <picture><source srcset="form_6055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{-1/2}(\Gamma)$" src="form_6055.png"/></picture>.</p>
-<p>There are two options for the discretization of the problem above. One could choose matching discretizations, where the <a class="el" href="classTriangulation.html">Triangulation</a> for <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is aligned with the <a class="el" href="classTriangulation.html">Triangulation</a> for <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, or one could choose to discretize the two domains in a completely independent way.</p>
-<p>The first option is clearly more indicated for the simple problem we proposed above: it is sufficient to use a single <a class="el" href="classTriangulation.html">Triangulation</a> for <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> and then impose certain constraints depending <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>. An example of this approach is studied in <a class="el" href="step_40.html">step-40</a>, where the solution has to stay above an obstacle and this is achieved imposing constraints on <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>.</p>
+<p>where <picture><source srcset="form_6051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\cdot, \cdot)_{\Omega}$" src="form_6051.png"/></picture> and <picture><source srcset="form_6052_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\cdot, \cdot)_{\Gamma}$" src="form_6052.png"/></picture> represent, respectively, <picture><source srcset="form_1209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2$" src="form_1209.png"/></picture> scalar products in <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> and in <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>.</p>
+<p>Inspection of the variational formulation tells us that the space <picture><source srcset="form_2013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(\Omega)$" src="form_2013.png"/></picture> can be taken to be <picture><source srcset="form_292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1_0(\Omega)$" src="form_292.png"/></picture>. The space <picture><source srcset="form_6053_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q(\Gamma)$" src="form_6053.png"/></picture>, in the co-dimension zero case, should be taken as <picture><source srcset="form_6039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Gamma)$" src="form_6039.png"/></picture>, while in the co-dimension one case should be taken as <picture><source srcset="form_6040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{1/2}(\Gamma)$" src="form_6040.png"/></picture>.</p>
+<p>The function <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> should therefore be either in <picture><source srcset="form_6039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Gamma)$" src="form_6039.png"/></picture> (for the co-dimension zero case) or <picture><source srcset="form_6040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{1/2}(\Gamma)$" src="form_6040.png"/></picture> (for the co-dimension one case). This leaves us with a Lagrange multiplier <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> in <picture><source srcset="form_6047_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q^*(\Gamma)$" src="form_6047.png"/></picture>, which is either <picture><source srcset="form_6054_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{-1}(\Gamma)$" src="form_6054.png"/></picture> or <picture><source srcset="form_6055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^{-1/2}(\Gamma)$" src="form_6055.png"/></picture>.</p>
+<p>There are two options for the discretization of the problem above. One could choose matching discretizations, where the <a class="el" href="classTriangulation.html">Triangulation</a> for <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is aligned with the <a class="el" href="classTriangulation.html">Triangulation</a> for <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, or one could choose to discretize the two domains in a completely independent way.</p>
+<p>The first option is clearly more indicated for the simple problem we proposed above: it is sufficient to use a single <a class="el" href="classTriangulation.html">Triangulation</a> for <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> and then impose certain constraints depending <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>. An example of this approach is studied in <a class="el" href="step_40.html">step-40</a>, where the solution has to stay above an obstacle and this is achieved imposing constraints on <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>.</p>
 <p>To solve more complex problems, for example one where the domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is time dependent, the second option could be a more viable solution. Handling non aligned meshes is complex by itself: to illustrate how is done we study a simple problem.</p>
 <p>The technique we describe here is presented in the literature using one of many names: the <b>immersed finite element method</b>, the <b>fictitious boundary method</b>, the <b>distributed Lagrange multiplier method</b>, and others. The main principle is that the discretization of the two grids and of the two finite element spaces are kept completely independent. This technique is particularly efficient for the simulation of fluid-structure interaction problems, where the configuration of the embedded structure is part of the problem itself, and one solves a (possibly non-linear) elastic problem to determine the (time dependent) configuration of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, and a (possibly non-linear) flow problem in <picture><source srcset="form_6056_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega
 \setminus \Gamma$" src="form_6056.png"/></picture>, plus coupling conditions on the interface between the fluid and the solid.</p>
 <p>In this tutorial program we keep things a little simpler, and we assume that the configuration of the embedded domain is given in one of two possible ways:</p>
 <ul>
-<li>as a deformation mapping <picture><source srcset="form_6057_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi: \Gamma_0 \mapsto \Gamma \subseteq \Omega$" src="form_6057.png"/></picture>, defined on a continuous finite dimensional space on <picture><source srcset="form_6058_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_0$" src="form_6058.png"/></picture> and representing, for any point <picture><source srcset="form_6059_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x \in \Gamma_0$" src="form_6059.png"/></picture>, its coordinate <picture><source srcset="form_2050_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x)$" src="form_2050.png"/></picture> in <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>;</li>
-<li>as a displacement mapping <picture><source srcset="form_6060_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta \psi(x) = \psi(x)-x$" src="form_6060.png"/></picture> for <picture><source srcset="form_6061_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x\in \Gamma_0$" src="form_6061.png"/></picture>, representing for any point <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> the displacement vector applied in order to deform <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> to its actual configuration <picture><source srcset="form_6062_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x) = x +\delta\psi(x)$" src="form_6062.png"/></picture>.</li>
+<li>as a deformation mapping <picture><source srcset="form_6057_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi: \Gamma_0 \mapsto \Gamma \subseteq \Omega$" src="form_6057.png"/></picture>, defined on a continuous finite dimensional space on <picture><source srcset="form_6058_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_0$" src="form_6058.png"/></picture> and representing, for any point <picture><source srcset="form_6059_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x \in \Gamma_0$" src="form_6059.png"/></picture>, its coordinate <picture><source srcset="form_2061_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x)$" src="form_2061.png"/></picture> in <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>;</li>
+<li>as a displacement mapping <picture><source srcset="form_6060_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta \psi(x) = \psi(x)-x$" src="form_6060.png"/></picture> for <picture><source srcset="form_6061_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x\in \Gamma_0$" src="form_6061.png"/></picture>, representing for any point <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> the displacement vector applied in order to deform <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> to its actual configuration <picture><source srcset="form_6062_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x) = x +\delta\psi(x)$" src="form_6062.png"/></picture>.</li>
 </ul>
-<p>We define the embedded reference domain <picture><source srcset="form_6058_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_0$" src="form_6058.png"/></picture> <code>embedded_grid</code>: on this triangulation we construct a finite dimensional space (<code>embedded_configuration_dh</code>) to describe either the deformation or the displacement through a <a class="el" href="classFiniteElement.html">FiniteElement</a> system of <a class="el" href="classFE__Q.html">FE_Q</a> objects (<code>embedded_configuration_fe</code>). This finite dimensional space is used only to interpolate a user supplied function (<code>embedded_configuration_function</code>) representing either <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_517.png"/></picture> (if the parameter <code>use_displacement</code> is set to <code>false</code>) or <picture><source srcset="form_6063_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta\psi$" src="form_6063.png"/></picture> (if the parameter <code>use_displacement</code> is set to <code>true</code>).</p>
-<p>The Lagrange multiplier <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> and the user supplied function <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> are defined through another finite dimensional space <code>embedded_dh</code>, and through another <a class="el" href="classFiniteElement.html">FiniteElement</a> <code>embedded_fe</code>, using the same reference domain. In order to take into account the deformation of the domain, either a <a class="el" href="classMappingFEField.html">MappingFEField</a> or a <a class="el" href="classMappingQEulerian.html">MappingQEulerian</a> object are initialized with the <code>embedded_configuration</code> vector.</p>
+<p>We define the embedded reference domain <picture><source srcset="form_6058_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_0$" src="form_6058.png"/></picture> <code>embedded_grid</code>: on this triangulation we construct a finite dimensional space (<code>embedded_configuration_dh</code>) to describe either the deformation or the displacement through a <a class="el" href="classFiniteElement.html">FiniteElement</a> system of <a class="el" href="classFE__Q.html">FE_Q</a> objects (<code>embedded_configuration_fe</code>). This finite dimensional space is used only to interpolate a user supplied function (<code>embedded_configuration_function</code>) representing either <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_526.png"/></picture> (if the parameter <code>use_displacement</code> is set to <code>false</code>) or <picture><source srcset="form_6063_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta\psi$" src="form_6063.png"/></picture> (if the parameter <code>use_displacement</code> is set to <code>true</code>).</p>
+<p>The Lagrange multiplier <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> and the user supplied function <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> are defined through another finite dimensional space <code>embedded_dh</code>, and through another <a class="el" href="classFiniteElement.html">FiniteElement</a> <code>embedded_fe</code>, using the same reference domain. In order to take into account the deformation of the domain, either a <a class="el" href="classMappingFEField.html">MappingFEField</a> or a <a class="el" href="classMappingQEulerian.html">MappingQEulerian</a> object are initialized with the <code>embedded_configuration</code> vector.</p>
 <p>In the embedding space, a standard finite dimensional space <code>space_dh</code> is constructed on the embedding grid <code>space_grid</code>, using the <a class="el" href="classFiniteElement.html">FiniteElement</a> <code>space_fe</code>, following almost verbatim the approach taken in <a class="el" href="step_6.html">step-6</a>.</p>
-<p>We represent the discretizations of the spaces <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> and <picture><source srcset="form_1639_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q$" src="form_1639.png"/></picture> with  </p><p class="formulaDsp">
+<p>We represent the discretizations of the spaces <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> and <picture><source srcset="form_1642_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q$" src="form_1642.png"/></picture> with  </p><p class="formulaDsp">
 <picture><source srcset="form_6064_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 V_h(\Omega) = \text{span} \{v_i\}_{i=1}^n
 \]" src="form_6064.png"/></picture>
@@ -195,7 +195,7 @@
 Q_h(\Gamma) = \text{span} \{q_i\}_{i=1}^m
 \]" src="form_6065.png"/></picture>
 </p>
-<p> respectively, where <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> is the dimension of <code>space_dh</code>, and <picture><source srcset="form_367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_367.png"/></picture> the dimension of <code>embedded_dh</code>.</p>
+<p> respectively, where <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> is the dimension of <code>space_dh</code>, and <picture><source srcset="form_352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m$" src="form_352.png"/></picture> the dimension of <code>embedded_dh</code>.</p>
 <p>Once all the finite dimensional spaces are defined, the variational formulation of the problem above leaves us with the following finite dimensional system of equations:</p>
 <p class="formulaDsp">
 <picture><source srcset="form_6066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
@@ -223,7 +223,7 @@
 G_{\alpha} &amp;\dealcoloneq&amp; (g, q_\alpha)_\Gamma \qquad \alpha = 1,\dots, m.
 \end{eqnarray*}" src="form_6067.png"/></picture>
 </p>
-<p>While the matrix <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is the standard <a class="el" href="DEALGlossary.html#href_anchor">stiffness matrix</a> for the Poisson problem on <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, and the vector <picture><source srcset="form_1737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1737.png"/></picture> is a standard right-hand-side vector for a finite element problem with forcing term <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, (see, for example, <a class="el" href="step_3.html">step-3</a>), the matrix <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> or its transpose <picture><source srcset="form_6068_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^T$" src="form_6068.png"/></picture> are non-standard since they couple information on two non-matching grids.</p>
+<p>While the matrix <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is the standard <a class="el" href="DEALGlossary.html#href_anchor">stiffness matrix</a> for the Poisson problem on <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, and the vector <picture><source srcset="form_1739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G$" src="form_1739.png"/></picture> is a standard right-hand-side vector for a finite element problem with forcing term <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, (see, for example, <a class="el" href="step_3.html">step-3</a>), the matrix <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> or its transpose <picture><source srcset="form_6068_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^T$" src="form_6068.png"/></picture> are non-standard since they couple information on two non-matching grids.</p>
 <p>In particular, the integral that appears in the computation of a single entry of <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>, is computed on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>. As usual in finite elements we split this integral into contributions from all cells of the triangulation used to discretize <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, we transform the integral on <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to an integral on the reference element <picture><source srcset="form_267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat K$" src="form_267.png"/></picture>, where <picture><source srcset="form_6069_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_{K}$" src="form_6069.png"/></picture> is the mapping from <picture><source srcset="form_267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat K$" src="form_267.png"/></picture> to <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, and compute the integral on <picture><source srcset="form_267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat K$" src="form_267.png"/></picture> using a quadrature formula:</p>
 <p class="formulaDsp">
 <picture><source srcset="form_6070_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
@@ -233,14 +233,14 @@
 \]" src="form_6070.png"/></picture>
 </p>
 <p>Computing this sum is non-trivial because we have to evaluate <picture><source srcset="form_6071_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(v_j \circ F_{K})
-(\hat x_i)$" src="form_6071.png"/></picture>. In general, if <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> and <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> are not aligned, the point <picture><source srcset="form_6072_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_{K}(\hat x_i)$" src="form_6072.png"/></picture> is completely arbitrary with respect to <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, and unless we figure out a way to interpolate all basis functions of <picture><source srcset="form_6073_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h(\Omega)$" src="form_6073.png"/></picture> on an arbitrary point on <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, we cannot compute the integral needed for an entry of the matrix <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>.</p>
+(\hat x_i)$" src="form_6071.png"/></picture>. In general, if <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> and <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> are not aligned, the point <picture><source srcset="form_6072_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_{K}(\hat x_i)$" src="form_6072.png"/></picture> is completely arbitrary with respect to <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, and unless we figure out a way to interpolate all basis functions of <picture><source srcset="form_6073_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h(\Omega)$" src="form_6073.png"/></picture> on an arbitrary point on <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, we cannot compute the integral needed for an entry of the matrix <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>.</p>
 <p>To evaluate <picture><source srcset="form_6074_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(v_j \circ F_{K}) (\hat x_i)$" src="form_6074.png"/></picture> the following steps needs to be taken (as shown in the picture below):</p>
 <ul>
 <li>For a given cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> in <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> compute the real point <picture><source srcset="form_6075_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_i \dealcoloneq F_{K} (\hat
-x_i)$" src="form_6075.png"/></picture>, where <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture> is one of the quadrature points used for the integral on <picture><source srcset="form_6076_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K
+x_i)$" src="form_6075.png"/></picture>, where <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture> is one of the quadrature points used for the integral on <picture><source srcset="form_6076_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K
 \subseteq \Gamma$" src="form_6076.png"/></picture>.</li>
-<li>Find the cell of <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> in which <picture><source srcset="form_2111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_i$" src="form_2111.png"/></picture> lies. We shall call this element <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture>.</li>
-<li>To evaluate the basis function use the inverse of the mapping <picture><source srcset="form_6077_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_T$" src="form_6077.png"/></picture> that transforms the reference element <picture><source srcset="form_6078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat T$" src="form_6078.png"/></picture> into the element <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture>: <picture><source srcset="form_6079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_j(y_i) = \hat
+<li>Find the cell of <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> in which <picture><source srcset="form_2102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_i$" src="form_2102.png"/></picture> lies. We shall call this element <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture>.</li>
+<li>To evaluate the basis function use the inverse of the mapping <picture><source srcset="form_6077_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_T$" src="form_6077.png"/></picture> that transforms the reference element <picture><source srcset="form_6078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat T$" src="form_6078.png"/></picture> into the element <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture>: <picture><source srcset="form_6079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_j(y_i) = \hat
 v_j \circ G^{-1}_{T} (y_i)$" src="form_6079.png"/></picture>.</li>
 </ul>
 <p align="center"></p>
@@ -259,8 +259,8 @@
 <p>The problem we solve here is identical to <a class="el" href="step_4.html">step-4</a>, with the difference that we impose some constraints on an embedded domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>. The tutorial is written in a dimension independent way, and in the results section we show how to vary both <code>dim</code> and <code>spacedim</code>.</p>
 <p>The tutorial is compiled for <code>dim</code> equal to one and <code>spacedim</code> equal to two. If you want to run the program in embedding dimension <code>spacedim</code> equal to three, you will most likely want to change the reference domain for <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> to be, for example, something you read from file, or a closed sphere that you later deform to something more interesting.</p>
 <p>In the default scenario, <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> has co-dimension one, and this tutorial program implements the Fictitious Boundary Method. As it turns out, the same techniques are used in the Variational Immersed Finite Element Method, and the coupling operator <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> defined above is the same in almost all of these non-matching methods.</p>
-<p>The embedded domain is assumed to be included in <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, which we take as the unit square <picture><source srcset="form_735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]^2$" src="form_735.png"/></picture>. The definition of the fictitious domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> can be modified through the parameter file, and can be given as a mapping from the reference interval <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture> to a curve in <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>.</p>
-<p>If the curve is closed, then the results will be similar to running the same problem on a grid whose boundary is <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>. The program will happily run also with a non-closed <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, although in those cases the mathematical formulation of the problem is more difficult, since <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> will have a boundary by itself that has co-dimension two with respect to the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>.</p>
+<p>The embedded domain is assumed to be included in <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, which we take as the unit square <picture><source srcset="form_735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]^2$" src="form_735.png"/></picture>. The definition of the fictitious domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> can be modified through the parameter file, and can be given as a mapping from the reference interval <picture><source srcset="form_581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[0,1]$" src="form_581.png"/></picture> to a curve in <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>.</p>
+<p>If the curve is closed, then the results will be similar to running the same problem on a grid whose boundary is <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>. The program will happily run also with a non-closed <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, although in those cases the mathematical formulation of the problem is more difficult, since <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> will have a boundary by itself that has co-dimension two with respect to the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>.</p>
 <p><a class="anchor" id="References"></a></p><h3>References</h3>
 <ul>
 <li>
@@ -334,8 +334,8 @@
 <div class="ttc" id="agroup__LAOperators_html_ga52a70111839180da28ccfebb4c588eca"><div class="ttname"><a href="group__LAOperators.html#href_anchor">linear_operator</a></div><div class="ttdeci">LinearOperator&lt; Range, Domain, Payload &gt; linear_operator(const OperatorExemplar &amp;, const Matrix &amp;)</div><div class="ttdef"><b>Definition</b> <a href="linear__operator_8h_source.html#href_anchor">linear_operator.h:1408</a></div></div>
 <div class="ttc" id="anamespacedealii_html"><div class="ttname"><a href="namespacedealii.html">dealii</a></div><div class="ttdef"><b>Definition</b> <a href="namespace__dealii_8h_source.html#href_anchor">namespace_dealii.h:26</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="DistributedLagrangeProblem"></a> </p><h3>DistributedLagrangeProblem</h3>
-<p>In the DistributedLagrangeProblem, we need two parameters describing the dimensions of the domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> (<code>dim</code>) and of the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> (<code>spacedim</code>).</p>
-<p>These will be used to initialize a <a class="el" href="classTriangulation.html">Triangulation&lt;dim,spacedim&gt;</a> (for <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>) and a Triangulation&lt;spacedim,spacedim&gt; (for <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>).</p>
+<p>In the DistributedLagrangeProblem, we need two parameters describing the dimensions of the domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> (<code>dim</code>) and of the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> (<code>spacedim</code>).</p>
+<p>These will be used to initialize a <a class="el" href="classTriangulation.html">Triangulation&lt;dim,spacedim&gt;</a> (for <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>) and a Triangulation&lt;spacedim,spacedim&gt; (for <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>).</p>
 <p>A novelty with respect to other tutorial programs is the heavy use of std::unique_ptr. These behave like classical pointers, with the advantage of doing automatic house-keeping: the contained object is automatically destroyed as soon as the unique_ptr goes out of scope, even if it is inside a container or there's an exception. Moreover it does not allow for duplicate pointers, which prevents ownership problems. We do this, because we want to be able to i) construct the problem, ii) read the parameters, and iii) initialize all objects according to what is specified in a parameter file.</p>
 <p>We construct the parameters of our problem in the internal class <code>Parameters</code>, derived from <a class="el" href="classParameterAcceptor.html">ParameterAcceptor</a>. The <code>DistributedLagrangeProblem</code> class takes a const reference to a <code>Parameters</code> object, so that it is not possible to modify the parameters from within the DistributedLagrangeProblem class itself.</p>
 <p>We could have initialized the parameters first, and then pass the parameters to the DistributedLagrangeProblem assuming all entries are set to the desired values, but this has two disadvantages:</p>
@@ -357,16 +357,16 @@
 <div class="line">  </div>
 <div class="ttc" id="aclassParameterAcceptor_html"><div class="ttname"><a href="classParameterAcceptor.html">ParameterAcceptor</a></div><div class="ttdef"><b>Definition</b> <a href="parameter__acceptor_8h_source.html#href_anchor">parameter_acceptor.h:361</a></div></div>
 </div><!-- fragment --><p>The parameters now described can all be set externally using a parameter file: if no parameter file is present when running the executable, the program will create a "parameters.prm" file with the default values defined here, and then abort to give the user a chance to modify the parameters.prm file.</p>
-<p>Initial refinement for the embedding grid, corresponding to the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>.</p>
+<p>Initial refinement for the embedding grid, corresponding to the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>.</p>
 <div class="fragment"><div class="line">        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> initial_refinement = 4;</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>The interaction between the embedded grid <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> and the embedding grid <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is handled through the computation of <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>, which involves all cells of <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> overlapping with parts of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>: a higher refinement of such cells might improve quality of our computations. For this reason we define <code>delta_refinement</code>: if it is greater than zero, then we mark each cell of the space grid that contains a vertex of the embedded grid and its neighbors, execute the refinement, and repeat this process <code>delta_refinement</code> times.</p>
+</div><!-- fragment --><p>The interaction between the embedded grid <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> and the embedding grid <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is handled through the computation of <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>, which involves all cells of <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> overlapping with parts of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>: a higher refinement of such cells might improve quality of our computations. For this reason we define <code>delta_refinement</code>: if it is greater than zero, then we mark each cell of the space grid that contains a vertex of the embedded grid and its neighbors, execute the refinement, and repeat this process <code>delta_refinement</code> times.</p>
 <div class="fragment"><div class="line">        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> delta_refinement = 3;</div>
 <div class="line">  </div>
 </div><!-- fragment --><p>Starting refinement of the embedded grid, corresponding to the domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>.</p>
 <div class="fragment"><div class="line">        <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> initial_embedded_refinement = 8;</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>The list of boundary ids where we impose (possibly inhomogeneous) Dirichlet boundary conditions. On the remaining boundary ids (if any), we impose homogeneous Neumann boundary conditions. As a default problem we have zero Dirichlet boundary conditions on <picture><source srcset="form_2866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega$" src="form_2866.png"/></picture></p>
+</div><!-- fragment --><p>The list of boundary ids where we impose (possibly inhomogeneous) Dirichlet boundary conditions. On the remaining boundary ids (if any), we impose homogeneous Neumann boundary conditions. As a default problem we have zero Dirichlet boundary conditions on <picture><source srcset="form_2907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \Omega$" src="form_2907.png"/></picture></p>
 <div class="fragment"><div class="line">        std::list&lt;types::boundary_id&gt; dirichlet_ids{0, 1, 2, 3};</div>
 <div class="line">  </div>
 </div><!-- fragment --><p><a class="el" href="classFiniteElement.html">FiniteElement</a> degree of the embedding space: <picture><source srcset="form_6073_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h(\Omega)$" src="form_6073.png"/></picture></p>
@@ -445,7 +445,7 @@
 <div class="line">      std::unique_ptr&lt;Mapping&lt;dim, spacedim&gt;&gt; embedded_mapping;</div>
 <div class="line">  </div>
 <div class="ttc" id="aclassParameterAcceptorProxy_html"><div class="ttname"><a href="classParameterAcceptorProxy.html">ParameterAcceptorProxy</a></div><div class="ttdef"><b>Definition</b> <a href="parameter__acceptor_8h_source.html#href_anchor">parameter_acceptor.h:699</a></div></div>
-</div><!-- fragment --><p>We do the same thing to specify the value of the forcing term <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture>. In this case the <a class="el" href="classFunction.html">Function</a> is a scalar one.</p>
+</div><!-- fragment --><p>We do the same thing to specify the value of the forcing term <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture>. In this case the <a class="el" href="classFunction.html">Function</a> is a scalar one.</p>
 <div class="fragment"><div class="line">      <a class="code hl_class" href="classParameterAcceptorProxy.html">ParameterAcceptorProxy&lt;Functions::ParsedFunction&lt;spacedim&gt;</a>&gt;</div>
 <div class="line">        embedding_rhs_function;</div>
 <div class="line">  </div>
@@ -594,7 +594,7 @@
 <div class="line">    {</div>
 <div class="ttc" id="anamespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div><div class="ttdoc">STL namespace.</div></div>
 </div><!-- fragment --><p>Here is a way to set default values for a <a class="el" href="classParameterAcceptor.html">ParameterAcceptor</a> class that was constructed using <a class="el" href="classParameterAcceptorProxy.html">ParameterAcceptorProxy</a>.</p>
-<p>In this case, we set the default deformation of the embedded grid to be a circle with radius <picture><source srcset="form_511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_511.png"/></picture> and center <picture><source srcset="form_6082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(Cx, Cy)$" src="form_6082.png"/></picture>, we set the default value for the embedded_value_function to be the constant one, and specify some sensible values for the <a class="el" href="classSolverControl.html">SolverControl</a> object.</p>
+<p>In this case, we set the default deformation of the embedded grid to be a circle with radius <picture><source srcset="form_520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R$" src="form_520.png"/></picture> and center <picture><source srcset="form_6082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(Cx, Cy)$" src="form_6082.png"/></picture>, we set the default value for the embedded_value_function to be the constant one, and specify some sensible values for the <a class="el" href="classSolverControl.html">SolverControl</a> object.</p>
 <p>It is fundamental for <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> to be embedded: from the definition of <picture><source srcset="form_6083_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C_{\alpha j}$" src="form_6083.png"/></picture> is clear that, if <picture><source srcset="form_6084_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma \not\subseteq \Omega$" src="form_6084.png"/></picture>, certain rows of the matrix <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> will be zero. This would be a problem, as the Schur complement method requires <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> to have full column rank.</p>
 <div class="fragment"><div class="line">      embedded_configuration_function.declare_parameters_call_back.connect(</div>
 <div class="line">        []() -&gt; <span class="keywordtype">void</span> {</div>
@@ -631,7 +631,7 @@
 <div class="line">      <a class="code hl_class" href="classTimerOutput_1_1Scope.html">TimerOutput::Scope</a> timer_section(monitor, <span class="stringliteral">&quot;Setup grids and dofs&quot;</span>);</div>
 <div class="line">  </div>
 <div class="ttc" id="aclassTimerOutput_1_1Scope_html"><div class="ttname"><a href="classTimerOutput_1_1Scope.html">TimerOutput::Scope</a></div><div class="ttdef"><b>Definition</b> <a href="timer_8h_source.html#href_anchor">timer.h:558</a></div></div>
-</div><!-- fragment --><p>Initializing <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>: constructing the <a class="el" href="classTriangulation.html">Triangulation</a> and wrapping it into a <code>std::unique_ptr</code> object</p>
+</div><!-- fragment --><p>Initializing <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>: constructing the <a class="el" href="classTriangulation.html">Triangulation</a> and wrapping it into a <code>std::unique_ptr</code> object</p>
 <div class="fragment"><div class="line">      space_grid = std::make_unique&lt;Triangulation&lt;spacedim&gt;&gt;();</div>
 <div class="line">  </div>
 </div><!-- fragment --><p>Next, we actually create the triangulation using <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_cube()</a>. The last argument is set to true: this activates colorization (i.e., assigning different boundary indicators to different parts of the boundary), which we use to assign the Dirichlet and Neumann conditions.</p>
@@ -682,7 +682,7 @@
 <div class="line">  </div>
 <div class="line">      setup_embedded_dofs();</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>In this tutorial program we not only refine <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> globally, but also allow a local refinement depending on the position of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, according to the value of <code>parameters.delta_refinement</code>, that we use to decide how many rounds of local refinement we should do on <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, corresponding to the position of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>.</p>
+</div><!-- fragment --><p>In this tutorial program we not only refine <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> globally, but also allow a local refinement depending on the position of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, according to the value of <code>parameters.delta_refinement</code>, that we use to decide how many rounds of local refinement we should do on <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, corresponding to the position of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_61.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_61.html	2024-03-17 21:57:48.071262882 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_61.html	2024-03-17 21:57:48.075262907 +0000
@@ -163,15 +163,15 @@
   \qquad \mathbf{x} \in \Gamma^N,
 \end{align*}" src="form_6088.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_6089_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega \subset \mathbb{R}^n (n=2,3)$" src="form_6089.png"/></picture> is a bounded domain. In the context of the flow of a fluid through a porous medium, <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> is the pressure, <picture><source srcset="form_4952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{K}$" src="form_4952.png"/></picture> is a permeability tensor, <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> is the source term, and <picture><source srcset="form_6090_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_D, u_N$" src="form_6090.png"/></picture> represent Dirichlet and Neumann boundary conditions. We can introduce a flux, <picture><source srcset="form_6091_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} = -\mathbf{K} \nabla p$" src="form_6091.png"/></picture>, that corresponds to the Darcy velocity (in the way we did in <a class="el" href="step_20.html">step-20</a>) and this variable will be important in the considerations below.</p>
-<p>In this program, we will consider a test case where the exact pressure is <picture><source srcset="form_6092_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p = \sin \left( \pi x\right)\sin\left(\pi y \right)$" src="form_6092.png"/></picture> on the unit square domain, with homogeneous Dirichelet boundary conditions and <picture><source srcset="form_4952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{K}$" src="form_4952.png"/></picture> the identity matrix. Then we will calculate <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> errors of pressure, velocity, and flux.</p>
+<p> where <picture><source srcset="form_6089_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega \subset \mathbb{R}^n (n=2,3)$" src="form_6089.png"/></picture> is a bounded domain. In the context of the flow of a fluid through a porous medium, <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> is the pressure, <picture><source srcset="form_4936_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{K}$" src="form_4936.png"/></picture> is a permeability tensor, <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> is the source term, and <picture><source srcset="form_6090_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_D, u_N$" src="form_6090.png"/></picture> represent Dirichlet and Neumann boundary conditions. We can introduce a flux, <picture><source srcset="form_6091_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} = -\mathbf{K} \nabla p$" src="form_6091.png"/></picture>, that corresponds to the Darcy velocity (in the way we did in <a class="el" href="step_20.html">step-20</a>) and this variable will be important in the considerations below.</p>
+<p>In this program, we will consider a test case where the exact pressure is <picture><source srcset="form_6092_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p = \sin \left( \pi x\right)\sin\left(\pi y \right)$" src="form_6092.png"/></picture> on the unit square domain, with homogeneous Dirichelet boundary conditions and <picture><source srcset="form_4936_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{K}$" src="form_4936.png"/></picture> the identity matrix. Then we will calculate <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> errors of pressure, velocity, and flux.</p>
 <p><a class="anchor" id="WeakGalerkinscheme"></a></p><h3>Weak Galerkin scheme </h3>
-<p>The Poisson equation above has a solution <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> that needs to satisfy the weak formulation of the problem,  </p><p class="formulaDsp">
+<p>The Poisson equation above has a solution <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> that needs to satisfy the weak formulation of the problem,  </p><p class="formulaDsp">
 <picture><source srcset="form_6093_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
 \mathcal{A}\left(p,q \right) = \mathcal{F} \left(q \right),
 \end{equation*}" src="form_6093.png"/></picture>
 </p>
-<p> for all test functions <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture>, where  </p><p class="formulaDsp">
+<p> for all test functions <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture>, where  </p><p class="formulaDsp">
 <picture><source srcset="form_6094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
 \mathcal{A}\left(p,q\right)
   \dealcoloneq \int_\Omega \left(\mathbf{K} \nabla p\right) \cdot \nabla q \;\mathrm{d}x,
@@ -184,14 +184,14 @@
   - \int_{\Gamma^N} u_N q \; \mathrm{d}x.
 \end{equation*}" src="form_6095.png"/></picture>
 </p>
-<p> Here, we have integrated by parts in the bilinear form, and we are evaluating the gradient of <picture><source srcset="form_6096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p,p$" src="form_6096.png"/></picture> in the interior and the values of <picture><source srcset="form_6_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_6.png"/></picture> on the boundary of the domain. All of this is well defined because we assume that the solution is in <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture> for which taking the gradient and evaluating boundary values are valid operations.</p>
-<p>The idea of the weak Galerkin method is now to approximate the exact <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> solution with a <em>discontinuous function</em> <picture><source srcset="form_6097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_h$" src="form_6097.png"/></picture>. This function may only be discontinuous along interfaces between cells, and because we will want to evaluate this function also along interfaces, we have to prescribe not only what values it is supposed to have in the cell interiors but also its values along interfaces. We do this by saying that <picture><source srcset="form_6097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_h$" src="form_6097.png"/></picture> is actually a tuple, <picture><source srcset="form_6098_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_h=(p^\circ,p^\partial)$" src="form_6098.png"/></picture>, though it's really just a single function that is either equal to <picture><source srcset="form_6099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p^\circ(x)$" src="form_6099.png"/></picture> or <picture><source srcset="form_6100_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p^\partial(x)$" src="form_6100.png"/></picture>, depending on whether it is evaluated at a point <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> that lies in the cell interior or on cell interfaces.</p>
-<p>We would then like to simply stick this approximation into the bilinear form above. This works for the case where we have to evaluate the test function <picture><source srcset="form_3218_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q_h$" src="form_3218.png"/></picture> on the boundary (where we would simply take its interface part <picture><source srcset="form_6101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q_h^\partial$" src="form_6101.png"/></picture>) but we have to be careful with the gradient because that is only defined in cell interiors. Consequently, the weak Galerkin scheme for the Poisson equation is defined by  </p><p class="formulaDsp">
+<p> Here, we have integrated by parts in the bilinear form, and we are evaluating the gradient of <picture><source srcset="form_6096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p,p$" src="form_6096.png"/></picture> in the interior and the values of <picture><source srcset="form_3_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q$" src="form_3.png"/></picture> on the boundary of the domain. All of this is well defined because we assume that the solution is in <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture> for which taking the gradient and evaluating boundary values are valid operations.</p>
+<p>The idea of the weak Galerkin method is now to approximate the exact <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> solution with a <em>discontinuous function</em> <picture><source srcset="form_6097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_h$" src="form_6097.png"/></picture>. This function may only be discontinuous along interfaces between cells, and because we will want to evaluate this function also along interfaces, we have to prescribe not only what values it is supposed to have in the cell interiors but also its values along interfaces. We do this by saying that <picture><source srcset="form_6097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_h$" src="form_6097.png"/></picture> is actually a tuple, <picture><source srcset="form_6098_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_h=(p^\circ,p^\partial)$" src="form_6098.png"/></picture>, though it's really just a single function that is either equal to <picture><source srcset="form_6099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p^\circ(x)$" src="form_6099.png"/></picture> or <picture><source srcset="form_6100_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p^\partial(x)$" src="form_6100.png"/></picture>, depending on whether it is evaluated at a point <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> that lies in the cell interior or on cell interfaces.</p>
+<p>We would then like to simply stick this approximation into the bilinear form above. This works for the case where we have to evaluate the test function <picture><source srcset="form_3107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q_h$" src="form_3107.png"/></picture> on the boundary (where we would simply take its interface part <picture><source srcset="form_6101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q_h^\partial$" src="form_6101.png"/></picture>) but we have to be careful with the gradient because that is only defined in cell interiors. Consequently, the weak Galerkin scheme for the Poisson equation is defined by  </p><p class="formulaDsp">
 <picture><source srcset="form_6102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
 \mathcal{A}_h\left(p_h,q \right) = \mathcal{F} \left(q_h \right),
 \end{equation*}" src="form_6102.png"/></picture>
 </p>
-<p> for all discrete test functions <picture><source srcset="form_3218_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q_h$" src="form_3218.png"/></picture>, where  </p><p class="formulaDsp">
+<p> for all discrete test functions <picture><source srcset="form_3107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$q_h$" src="form_3107.png"/></picture>, where  </p><p class="formulaDsp">
 <picture><source srcset="form_6103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
 \mathcal{A}_h\left(p_h,q_h\right)
   \dealcoloneq \sum_{K \in \mathbb{T}}
@@ -228,7 +228,7 @@
   p_h(\mathbf x) = \sum_j P_j \varphi_j(\mathbf x).
 \end{equation*}" src="form_6121.png"/></picture>
 </p>
-<p> Here, since <picture><source srcset="form_6097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_h$" src="form_6097.png"/></picture> has two components (the interior and the interface components), the same must hold true for the basis functions <picture><source srcset="form_2939_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(\mathbf x)$" src="form_2939.png"/></picture>, which we can write as <picture><source srcset="form_6122_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j = (\varphi_j^\circ,\varphi_j^\partial)$" src="form_6122.png"/></picture>. If you've followed the descriptions in <a class="el" href="step_8.html">step-8</a>, <a class="el" href="step_20.html">step-20</a>, and the <a class="el" href="group__vector__valued.html">documentation module on vector-valued problems</a>, it will be no surprise that for some values of <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>, <picture><source srcset="form_6123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j^\circ$" src="form_6123.png"/></picture> will be zero, whereas for other values of <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>, <picture><source srcset="form_6124_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j^\partial$" src="form_6124.png"/></picture> will be zero &ndash; i.e., shape functions will be of either one or the other kind. That is not important, here, however. What is important is that we need to wonder how we can represent <picture><source srcset="form_6125_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_{w,d} \varphi_j$" src="form_6125.png"/></picture> because that is clearly what will appear in the problem when we want to implement the bilinear form  </p><p class="formulaDsp">
+<p> Here, since <picture><source srcset="form_6097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_h$" src="form_6097.png"/></picture> has two components (the interior and the interface components), the same must hold true for the basis functions <picture><source srcset="form_3075_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(\mathbf x)$" src="form_3075.png"/></picture>, which we can write as <picture><source srcset="form_6122_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j = (\varphi_j^\circ,\varphi_j^\partial)$" src="form_6122.png"/></picture>. If you've followed the descriptions in <a class="el" href="step_8.html">step-8</a>, <a class="el" href="step_20.html">step-20</a>, and the <a class="el" href="group__vector__valued.html">documentation module on vector-valued problems</a>, it will be no surprise that for some values of <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>, <picture><source srcset="form_6123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j^\circ$" src="form_6123.png"/></picture> will be zero, whereas for other values of <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>, <picture><source srcset="form_6124_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j^\partial$" src="form_6124.png"/></picture> will be zero &ndash; i.e., shape functions will be of either one or the other kind. That is not important, here, however. What is important is that we need to wonder how we can represent <picture><source srcset="form_6125_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_{w,d} \varphi_j$" src="form_6125.png"/></picture> because that is clearly what will appear in the problem when we want to implement the bilinear form  </p><p class="formulaDsp">
 <picture><source srcset="form_6126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
 \mathcal{A}_h\left(p_h,q_h\right)
   = \sum_{K \in \mathbb{T}}
@@ -279,7 +279,7 @@
   \left(C^K\right)^T = \left(M^K\right)^{-1} G^K.
 \end{equation*}" src="form_6135.png"/></picture>
 </p>
-<p> (In this last step, we have assumed that the indices <picture><source srcset="form_5305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i,j,k$" src="form_5305.png"/></picture> only range over those degrees of freedom active on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, thereby ensuring that the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> on the space <picture><source srcset="form_6112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT_s(K)$" src="form_6112.png"/></picture> is invertible.) Equivalently, using the symmetry of the matrix <picture><source srcset="form_102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_102.png"/></picture>, we have that  </p><p class="formulaDsp">
+<p> (In this last step, we have assumed that the indices <picture><source srcset="form_5486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i,j,k$" src="form_5486.png"/></picture> only range over those degrees of freedom active on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, thereby ensuring that the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> on the space <picture><source srcset="form_6112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT_s(K)$" src="form_6112.png"/></picture> is invertible.) Equivalently, using the symmetry of the matrix <picture><source srcset="form_94_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$M$" src="form_94.png"/></picture>, we have that  </p><p class="formulaDsp">
 <picture><source srcset="form_6136_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   C^K = \left(G^K\right)^{T} \left(M^K\right)^{-1}.
 \end{equation*}" src="form_6136.png"/></picture>
@@ -315,7 +315,7 @@
     \mathbf v_l|_K.
 \end{equation*}" src="form_6142.png"/></picture>
 </p>
-<p> So, if we have the matrix <picture><source srcset="form_6129_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^K$" src="form_6129.png"/></picture> for each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, then we can easily compute the contribution <picture><source srcset="form_3062_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^K$" src="form_3062.png"/></picture> for cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to the matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> as follows:  </p><p class="formulaDsp">
+<p> So, if we have the matrix <picture><source srcset="form_6129_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^K$" src="form_6129.png"/></picture> for each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, then we can easily compute the contribution <picture><source srcset="form_2990_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^K$" src="form_2990.png"/></picture> for cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to the matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> as follows:  </p><p class="formulaDsp">
 <picture><source srcset="form_6143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   A^K_{ij} =
     \sum_k \sum_l C_{ik}^K C_{jl}^K
@@ -338,9 +338,9 @@
     \mathbf v_l|_K,
 \end{equation*}" src="form_6144.png"/></picture>
 </p>
-<p> which is really just the mass matrix on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> using the Raviart-Thomas basis and weighting by the permeability tensor <picture><source srcset="form_5045_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf K$" src="form_5045.png"/></picture>. The derivation here then shows that the weak Galerkin method really just requires us to compute these <picture><source srcset="form_6129_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^K$" src="form_6129.png"/></picture> and <picture><source srcset="form_6145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^K$" src="form_6145.png"/></picture> matrices on each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, and then <picture><source srcset="form_6146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^K = C^K H^K (C^K)^T$" src="form_6146.png"/></picture>, which is easily computed. The code to be shown below does exactly this.</p>
-<p>Having so computed the contribution <picture><source srcset="form_3062_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^K$" src="form_3062.png"/></picture> of cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to the global matrix, all we have to do is to "distribute" these local contributions into the global matrix. How this is done is first shown in <a class="el" href="step_3.html">step-3</a> and <a class="el" href="step_4.html">step-4</a>. In the current program, this will be facilitated by calling <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::distribute_local_to_global()</a>.</p>
-<p>A linear system of course also needs a right hand side. There is no difficulty associated with computing the right hand side here other than the fact that we only need to use the cell-interior part <picture><source srcset="form_6147_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i^\circ$" src="form_6147.png"/></picture> for each shape function <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture>.</p>
+<p> which is really just the mass matrix on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> using the Raviart-Thomas basis and weighting by the permeability tensor <picture><source srcset="form_5029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf K$" src="form_5029.png"/></picture>. The derivation here then shows that the weak Galerkin method really just requires us to compute these <picture><source srcset="form_6129_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^K$" src="form_6129.png"/></picture> and <picture><source srcset="form_6145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^K$" src="form_6145.png"/></picture> matrices on each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, and then <picture><source srcset="form_6146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^K = C^K H^K (C^K)^T$" src="form_6146.png"/></picture>, which is easily computed. The code to be shown below does exactly this.</p>
+<p>Having so computed the contribution <picture><source srcset="form_2990_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^K$" src="form_2990.png"/></picture> of cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to the global matrix, all we have to do is to "distribute" these local contributions into the global matrix. How this is done is first shown in <a class="el" href="step_3.html">step-3</a> and <a class="el" href="step_4.html">step-4</a>. In the current program, this will be facilitated by calling <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::distribute_local_to_global()</a>.</p>
+<p>A linear system of course also needs a right hand side. There is no difficulty associated with computing the right hand side here other than the fact that we only need to use the cell-interior part <picture><source srcset="form_6147_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i^\circ$" src="form_6147.png"/></picture> for each shape function <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture>.</p>
 <p><a class="anchor" id="PostprocessingandiLsub2subierrors"></a></p><h3>Post-processing and <em>L<sub>2</sub></em>-errors </h3>
 <p>The discussions in the previous sections have given us a linear system that we can solve for the numerical pressure <picture><source srcset="form_6097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_h$" src="form_6097.png"/></picture>. We can use this to compute an approximation to the variable <picture><source srcset="form_6148_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u = -{\mathbf K}\nabla p$" src="form_6148.png"/></picture> that corresponds to the velocity with which the medium flows in a porous medium if this is the model we are trying to solve. This kind of step &ndash; computing a derived quantity from the solution of the discrete problem &ndash; is typically called "post-processing".</p>
 <p>Here, instead of using the exact gradient of <picture><source srcset="form_6097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_h$" src="form_6097.png"/></picture>, let us instead use the discrete weak gradient of <picture><source srcset="form_6097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p_h$" src="form_6097.png"/></picture> to calculate the velocity on each element. As discussed above, on each element the gradient of the numerical pressure <picture><source srcset="form_6149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla p$" src="form_6149.png"/></picture> can be approximated by discrete weak gradients <picture><source srcset="form_6150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \nabla_{w,d}\phi_i$" src="form_6150.png"/></picture>:  </p><p class="formulaDsp">
@@ -358,7 +358,7 @@
 \end{align*}" src="form_6153.png"/></picture>
 </p>
 <p> where <picture><source srcset="form_6129_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^K$" src="form_6129.png"/></picture> is the expansion matrix from above, and <picture><source srcset="form_6154_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}_j$" src="form_6154.png"/></picture> is the basis function of the <picture><source srcset="form_6155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT$" src="form_6155.png"/></picture> space on a cell.</p>
-<p>Unfortunately, <picture><source srcset="form_6156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{K} \mathbf{v}_j$" src="form_6156.png"/></picture> may not be in the <picture><source srcset="form_6155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT$" src="form_6155.png"/></picture> space (unless, of course, if <picture><source srcset="form_5045_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf K$" src="form_5045.png"/></picture> is constant times the identity matrix). So, in order to represent it in a finite element program, we need to project it back into a finite dimensional space we can work with. Here, we will use the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture>-projection to project it back to the (broken) <picture><source srcset="form_6155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT$" src="form_6155.png"/></picture> space.</p>
+<p>Unfortunately, <picture><source srcset="form_6156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{K} \mathbf{v}_j$" src="form_6156.png"/></picture> may not be in the <picture><source srcset="form_6155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT$" src="form_6155.png"/></picture> space (unless, of course, if <picture><source srcset="form_5029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf K$" src="form_5029.png"/></picture> is constant times the identity matrix). So, in order to represent it in a finite element program, we need to project it back into a finite dimensional space we can work with. Here, we will use the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture>-projection to project it back to the (broken) <picture><source srcset="form_6155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$RT$" src="form_6155.png"/></picture> space.</p>
 <p>We define the projection as  <picture><source srcset="form_6157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$ \mathbf{Q}_h \left( \mathbf{K}\mathbf{v}_j \right) =
 \sum_{k} d_{jk}\mathbf{v}_k$" src="form_6157.png"/></picture> on each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. For any <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>,  <picture><source srcset="form_6158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\left( \mathbf{Q}_h \left( \mathbf{Kv}_j \right),\mathbf{v}_k \right)_K =
 \left( \mathbf{Kv}_j,\mathbf{v}_k \right)_K.$" src="form_6158.png"/></picture> So, rather than the formula shown above, the numerical velocity on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> instead becomes  </p><p class="formulaDsp">
@@ -399,7 +399,7 @@
     \frac{|K|}{|\gamma|} \|\mathbf{u} \cdot \mathbf{n} - \mathbf{u}_h \cdot \mathbf{n}\|_{L_2(\gamma)}^2,
 \end{align*}" src="form_6166.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_6167_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$| K |$" src="form_6167.png"/></picture> is the area of the element, <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture> are faces of the element, <picture><source srcset="form_2492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}$" src="form_2492.png"/></picture> are unit normal vectors of each face. The last of these norms measures the accuracy of the normal component of the velocity vectors over the interfaces between the cells of the mesh. The scaling factor <picture><source srcset="form_6168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|K|/|\gamma|$" src="form_6168.png"/></picture> is chosen so as to scale out the difference in the length (or area) of the collection of interfaces as the mesh size changes.</p>
+<p> where <picture><source srcset="form_6167_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$| K |$" src="form_6167.png"/></picture> is the area of the element, <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture> are faces of the element, <picture><source srcset="form_2492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}$" src="form_2492.png"/></picture> are unit normal vectors of each face. The last of these norms measures the accuracy of the normal component of the velocity vectors over the interfaces between the cells of the mesh. The scaling factor <picture><source srcset="form_6168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|K|/|\gamma|$" src="form_6168.png"/></picture> is chosen so as to scale out the difference in the length (or area) of the collection of interfaces as the mesh size changes.</p>
 <p>The first of these errors above is easily computed using <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::integrate_difference</a>. The others require a bit more work and are implemented in the code below.</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
 <p><a class="anchor" id="Includefiles"></a> </p><h3>Include files</h3>
@@ -493,7 +493,7 @@
 <div class="ttc" id="aclassVector_html"><div class="ttname"><a href="classVector.html">Vector</a></div><div class="ttdef"><b>Definition</b> <a href="vector_8h_source.html#href_anchor">vector.h:109</a></div></div>
 <div class="ttc" id="ap4est__wrappers_8cc_html_ace00f2f80d9780ef9aa1007e1c22c6a4"><div class="ttname"><a href="p4est__wrappers_8cc.html#href_anchor">triangulation</a></div><div class="ttdeci">const ::parallel::distributed::Triangulation&lt; dim, spacedim &gt; * triangulation</div><div class="ttdef"><b>Definition</b> <a href="p4est__wrappers_8cc_source.html#href_anchor">p4est_wrappers.cc:69</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="Righthandsideboundaryvaluesandexactsolution"></a> </p><h3>Right hand side, boundary values, and exact solution</h3>
-<p>Next, we define the coefficient matrix <picture><source srcset="form_4952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{K}$" src="form_4952.png"/></picture> (here, the identity matrix), Dirichlet boundary conditions, the right-hand side <picture><source srcset="form_6169_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f = 2\pi^2 \sin(\pi x) \sin(\pi y)$" src="form_6169.png"/></picture>, and the exact solution that corresponds to these choices for <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> and <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture>, namely <picture><source srcset="form_6170_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p =
+<p>Next, we define the coefficient matrix <picture><source srcset="form_4936_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{K}$" src="form_4936.png"/></picture> (here, the identity matrix), Dirichlet boundary conditions, the right-hand side <picture><source srcset="form_6169_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f = 2\pi^2 \sin(\pi x) \sin(\pi y)$" src="form_6169.png"/></picture>, and the exact solution that corresponds to these choices for <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> and <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture>, namely <picture><source srcset="form_6170_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p =
    \sin(\pi x) \sin(\pi y)$" src="form_6170.png"/></picture>.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keyword">class </span>Coefficient : <span class="keyword">public</span> <a class="code hl_class" href="classTensorFunction.html">TensorFunction</a>&lt;2, dim&gt;</div>
@@ -852,7 +852,7 @@
 </div><!-- fragment --><p><code>cell_matrix_C</code> is then the matrix product between the transpose of <picture><source srcset="form_6137_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G^K$" src="form_6137.png"/></picture> and the inverse of the mass matrix (where this inverse is stored in <code>cell_matrix_M</code>):</p>
 <div class="fragment"><div class="line">          cell_matrix_G.Tmmult(cell_matrix_C, cell_matrix_M);</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>Finally we can compute the local matrix <picture><source srcset="form_3062_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^K$" src="form_3062.png"/></picture>. Element <picture><source srcset="form_6174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^K_{ij}$" src="form_6174.png"/></picture> is given by <picture><source srcset="form_6175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{E} \sum_{k,l} C_{ik} C_{jl}
+</div><!-- fragment --><p>Finally we can compute the local matrix <picture><source srcset="form_2990_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^K$" src="form_2990.png"/></picture>. Element <picture><source srcset="form_6174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A^K_{ij}$" src="form_6174.png"/></picture> is given by <picture><source srcset="form_6175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{E} \sum_{k,l} C_{ik} C_{jl}
    (\mathbf{K} \mathbf{v}_k) \cdot \mathbf{v}_l
    \mathrm{d}x$" src="form_6175.png"/></picture>. We have calculated the coefficients <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> in the previous step, and so obtain the following after suitably re-arranging the loops:</p>
 <div class="fragment"><div class="line">          local_matrix = 0;</div>
@@ -1006,7 +1006,7 @@
 <div class="line">                  }</div>
 <div class="line">              }</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>To compute the matrix <picture><source srcset="form_1479_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1479.png"/></picture> mentioned in the introduction, we then need to evaluate <picture><source srcset="form_6180_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D=M^{-1}E$" src="form_6180.png"/></picture> as explained in the introduction:</p>
+</div><!-- fragment --><p>To compute the matrix <picture><source srcset="form_1480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D$" src="form_1480.png"/></picture> mentioned in the introduction, we then need to evaluate <picture><source srcset="form_6180_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D=M^{-1}E$" src="form_6180.png"/></picture> as explained in the introduction:</p>
 <div class="fragment"><div class="line">          cell_matrix_M.gauss_jordan();</div>
 <div class="line">          cell_matrix_M.mmult(cell_matrix_D, cell_matrix_E);</div>
 <div class="line">  </div>
@@ -1303,7 +1303,7 @@
 <div class="line">    <span class="keywordflow">return</span> 0;</div>
 <div class="line">  }</div>
 </div><!-- fragment --><p> <a class="anchor" id="Results"></a></p><h1>Results</h1>
-<p>We run the program with a right hand side that will produce the solution <picture><source srcset="form_6182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p = \sin(\pi x) \sin(\pi y)$" src="form_6182.png"/></picture> and with homogeneous Dirichlet boundary conditions in the domain <picture><source srcset="form_5216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega = (0,1)^2$" src="form_5216.png"/></picture>. In addition, we choose the coefficient matrix in the differential operator <picture><source srcset="form_4952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{K}$" src="form_4952.png"/></picture> as the identity matrix. We test this setup using <picture><source srcset="form_6183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mbox{WG}(Q_0,Q_0;RT_{[0]})$" src="form_6183.png"/></picture>, <picture><source srcset="form_6184_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mbox{WG}(Q_1,Q_1;RT_{[1]})$" src="form_6184.png"/></picture> and <picture><source srcset="form_6185_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mbox{WG}(Q_2,Q_2;RT_{[2]})$" src="form_6185.png"/></picture> element combinations, which one can select by using the appropriate constructor argument for the <code>WGDarcyEquation</code> object in <code>main()</code>. We will then visualize pressure values in interiors of cells and on faces. We want to see that the pressure maximum is around 1 and the minimum is around 0. With mesh refinement, the convergence rates of pressure, velocity and flux should then be around 1 for <picture><source srcset="form_6183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mbox{WG}(Q_0,Q_0;RT_{[0]})$" src="form_6183.png"/></picture> , 2 for <picture><source srcset="form_6184_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mbox{WG}(Q_1,Q_1;RT_{[1]})$" src="form_6184.png"/></picture>, and 3 for <picture><source srcset="form_6185_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mbox{WG}(Q_2,Q_2;RT_{[2]})$" src="form_6185.png"/></picture>.</p>
+<p>We run the program with a right hand side that will produce the solution <picture><source srcset="form_6182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p = \sin(\pi x) \sin(\pi y)$" src="form_6182.png"/></picture> and with homogeneous Dirichlet boundary conditions in the domain <picture><source srcset="form_5455_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega = (0,1)^2$" src="form_5455.png"/></picture>. In addition, we choose the coefficient matrix in the differential operator <picture><source srcset="form_4936_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{K}$" src="form_4936.png"/></picture> as the identity matrix. We test this setup using <picture><source srcset="form_6183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mbox{WG}(Q_0,Q_0;RT_{[0]})$" src="form_6183.png"/></picture>, <picture><source srcset="form_6184_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mbox{WG}(Q_1,Q_1;RT_{[1]})$" src="form_6184.png"/></picture> and <picture><source srcset="form_6185_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mbox{WG}(Q_2,Q_2;RT_{[2]})$" src="form_6185.png"/></picture> element combinations, which one can select by using the appropriate constructor argument for the <code>WGDarcyEquation</code> object in <code>main()</code>. We will then visualize pressure values in interiors of cells and on faces. We want to see that the pressure maximum is around 1 and the minimum is around 0. With mesh refinement, the convergence rates of pressure, velocity and flux should then be around 1 for <picture><source srcset="form_6183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mbox{WG}(Q_0,Q_0;RT_{[0]})$" src="form_6183.png"/></picture> , 2 for <picture><source srcset="form_6184_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mbox{WG}(Q_1,Q_1;RT_{[1]})$" src="form_6184.png"/></picture>, and 3 for <picture><source srcset="form_6185_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mbox{WG}(Q_2,Q_2;RT_{[2]})$" src="form_6185.png"/></picture>.</p>
 <p><a class="anchor" id="TestresultsoniWGQsub0subQsub0subRTsub0subi"></a></p><h3>Test results on <em>WG(Q<sub>0</sub>,Q<sub>0</sub>;RT<sub>[0]</sub>)</em></h3>
 <p>The following figures show interior pressures and face pressures using the <picture><source srcset="form_6183_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mbox{WG}(Q_0,Q_0;RT_{[0]})$" src="form_6183.png"/></picture> element. The mesh is refined 2 times (top) and 4 times (bottom), respectively. (This number can be adjusted in the <code>make_grid()</code> function.) When the mesh is coarse, one can see the face pressures <picture><source srcset="form_6172_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p^\partial$" src="form_6172.png"/></picture> neatly between the values of the interior pressures <picture><source srcset="form_6171_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p^\circ$" src="form_6171.png"/></picture> on the two adjacent cells.</p>
 <table align="center">
/usr/share/doc/packages/dealii/doxygen/deal.II/step_62.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_62.html	2024-03-17 21:57:48.179263549 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_62.html	2024-03-17 21:57:48.183263574 +0000
@@ -154,10 +154,10 @@
 <dl class="section note"><dt>Note</dt><dd>As a prerequisite of this program, you need to have <a class="el" href="namespaceHDF5.html">HDF5</a>, complex PETSc, and the p4est libraries installed. The installation of deal.II together with these additional libraries is described in the <a href="../../readme.html" target="body">README</a> file.</dd></dl>
 <p><a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p>A phononic crystal is a periodic nanostructure that modifies the motion of mechanical vibrations or <a href="https://en.wikipedia.org/wiki/Phonon">phonons</a>. Phononic structures can be used to disperse, route and confine mechanical vibrations. These structures have potential applications in <a href="https://journals.aps.org/rmp/abstract/10.1103/RevModPhys.86.1391">quantum information</a> and have been used to study <a href="https://science.sciencemag.org/content/358/6360/203">macroscopic quantum phenomena</a>. Phononic crystals are usually fabricated in <a href="https://en.wikipedia.org/wiki/Cleanroom">cleanrooms</a>.</p>
-<p>In this tutorial we show how to a design a <a href="https://doi.org/10.1103/PhysRevA.94.033813">phononic superlattice cavity</a> which is a particular type of phononic crystal that can be used to confine mechanical vibrations. A phononic superlattice cavity is formed by two <a href="https://en.wikipedia.org/wiki/Distributed_Bragg_reflector">Distributed Bragg Reflector</a>, mirrors and a <picture><source srcset="form_6192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda/2$" src="form_6192.png"/></picture> cavity where <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> is the acoustic wavelength. Acoustic DBRs are periodic structures where a set of bilayer stacks with contrasting physical properties (sound velocity index) is repeated <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> times. Superlattice cavities are usually grown on a <a href="https://en.wikipedia.org/wiki/Gallium_arsenide">Gallium Arsenide</a> wafer by <a href="https://en.wikipedia.org/wiki/Molecular-beam_epitaxy">Molecular Beam Epitaxy</a>. The bilayers correspond to GaAs/AlAs mirror pairs. As shown below, the thickness of the mirror layers (brown and green) is <picture><source srcset="form_6193_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda/4$" src="form_6193.png"/></picture> and the thickness of the cavity (blue) is <picture><source srcset="form_6192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda/2$" src="form_6192.png"/></picture>.</p>
+<p>In this tutorial we show how to a design a <a href="https://doi.org/10.1103/PhysRevA.94.033813">phononic superlattice cavity</a> which is a particular type of phononic crystal that can be used to confine mechanical vibrations. A phononic superlattice cavity is formed by two <a href="https://en.wikipedia.org/wiki/Distributed_Bragg_reflector">Distributed Bragg Reflector</a>, mirrors and a <picture><source srcset="form_6192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda/2$" src="form_6192.png"/></picture> cavity where <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> is the acoustic wavelength. Acoustic DBRs are periodic structures where a set of bilayer stacks with contrasting physical properties (sound velocity index) is repeated <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> times. Superlattice cavities are usually grown on a <a href="https://en.wikipedia.org/wiki/Gallium_arsenide">Gallium Arsenide</a> wafer by <a href="https://en.wikipedia.org/wiki/Molecular-beam_epitaxy">Molecular Beam Epitaxy</a>. The bilayers correspond to GaAs/AlAs mirror pairs. As shown below, the thickness of the mirror layers (brown and green) is <picture><source srcset="form_6193_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda/4$" src="form_6193.png"/></picture> and the thickness of the cavity (blue) is <picture><source srcset="form_6192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda/2$" src="form_6192.png"/></picture>.</p>
 <p><img src="https://www.dealii.org/images/steps/developer/step-62.01.svg" alt="Phononic superlattice cavity" style="pointer-events: none;" height="200" class="inline"/></p>
 <p>In this tutorial we calculate the <a href="https://en.wikipedia.org/wiki/Band_gap">band gap</a> and the mechanical resonance of a phononic superlattice cavity but the code presented here can be easily used to design and calculate other types of <a href="https://science.sciencemag.org/content/358/6360/203">phononic crystals</a>.</p>
-<p>The device is a waveguide in which the wave goes from left to right. The simulations of this tutorial are done in 2D, but the code is dimension independent and can be easily used with 3D simulations. The waveguide width is equal to the <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> dimension of the domain and the waveguide length is equal to the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> dimension of the domain. There are two regimes that depend on the waveguide width:</p><ul>
+<p>The device is a waveguide in which the wave goes from left to right. The simulations of this tutorial are done in 2D, but the code is dimension independent and can be easily used with 3D simulations. The waveguide width is equal to the <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> dimension of the domain and the waveguide length is equal to the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> dimension of the domain. There are two regimes that depend on the waveguide width:</p><ul>
 <li>Single mode: In this case the width of the structure is much smaller than the wavelength. This case can be solved either with FEM (the approach that we take here) or with a simple semi-analytical <a href="https://en.wikipedia.org/wiki/Transfer_matrix">1D transfer matrix formalism</a>.</li>
 <li>Multimode: In this case the width of the structure is larger than the wavelength. This case can be solved using FEM or with a <a href="https://doi.org/10.1103/PhysRevA.94.033813">scattering matrix formalism</a>. Although we do not study this case in this tutorial, it is very easy to reach the multimode regime by increasing the parameter waveguide width (<code>dimension_y</code> in the jupyter notebook).</li>
 </ul>
@@ -201,7 +201,7 @@
 + \frac{1}{s_l}\partial_l u_k\right)
 \]" src="form_6201.png"/></picture>
 </p>
-<p> where summation over repeated indices (here <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>, as well as <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> and <picture><source srcset="form_1712_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l$" src="form_1712.png"/></picture>) is as always implied. Note that the strain is no longer symmetric after applying the complex coordinate stretching of the PML. This set of equations can be written as  </p><p class="formulaDsp">
+<p> where summation over repeated indices (here <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>, as well as <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> and <picture><source srcset="form_1631_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l$" src="form_1631.png"/></picture>) is as always implied. Note that the strain is no longer symmetric after applying the complex coordinate stretching of the PML. This set of equations can be written as  </p><p class="formulaDsp">
 <picture><source srcset="form_6202_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 -\omega^2\rho \xi  u_m - \partial_n \left(\frac{\xi c_{mnkl}}{2s_n s_k} \partial_k u_l
 + \frac{\xi c_{mnkl}}{2s_n s_l} \partial_l u_k\right) = f_m
@@ -213,13 +213,13 @@
 +  \beta_{mnkl}\partial_l u_k\right) = f_m
 \]" src="form_6206.png"/></picture>
 </p>
-<p>We can multiply by <picture><source srcset="form_6207_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_m$" src="form_6207.png"/></picture> and integrate over the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> and integrate by parts.  </p><p class="formulaDsp">
+<p>We can multiply by <picture><source srcset="form_6207_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_m$" src="form_6207.png"/></picture> and integrate over the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> and integrate by parts.  </p><p class="formulaDsp">
 <picture><source srcset="form_6208_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 -\omega^2\int_\Omega\rho\xi\varphi_m u_m + \int_\Omega\partial_n\varphi_m \left(\frac{\xi c_{mnkl}}{2s_n s_k} \partial_k u_l
 + \frac{\xi c_{mnkl}}{2s_n s_l} \partial_l u_k\right) = \int_\Omega\varphi_m f_m
 \end{eqnarray*}" src="form_6208.png"/></picture>
 </p>
-<p> It is this set of equations we want to solve for a set of frequencies <picture><source srcset="form_3735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega$" src="form_3735.png"/></picture> in order to compute the transmission coefficient as function of frequency. The linear system becomes  </p><p class="formulaDsp">
+<p> It is this set of equations we want to solve for a set of frequencies <picture><source srcset="form_3839_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega$" src="form_3839.png"/></picture> in order to compute the transmission coefficient as function of frequency. The linear system becomes  </p><p class="formulaDsp">
 <picture><source srcset="form_6209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 AU&amp;=&amp;F\\
 A_{ij} &amp;=&amp; -\omega^2\int_\Omega\rho \xi\varphi_m^i \varphi_m^j + \int_\Omega\partial_n\varphi_m^i \left(\frac{\xi c_{mnkl}}{2s_n s_k} \partial_k \varphi_l^j
@@ -391,7 +391,7 @@
 <div class="line">      <span class="keyword">const</span> <a class="code hl_class" href="classPoint.html">Point&lt;dim&gt;</a> force_center;</div>
 <div class="line">  </div>
 <div class="line">    <span class="keyword">public</span>:</div>
-</div><!-- fragment --><p>In this particular simulation the force has only a <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> component, <picture><source srcset="form_6210_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_y=0$" src="form_6210.png"/></picture>.</p>
+</div><!-- fragment --><p>In this particular simulation the force has only a <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> component, <picture><source srcset="form_6210_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_y=0$" src="form_6210.png"/></picture>.</p>
 <div class="fragment"><div class="line">      <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> force_component = 0;</div>
 <div class="line">    };</div>
 <div class="line">  </div>
@@ -512,7 +512,7 @@
 <div class="line">  </div>
 <div class="ttc" id="aclassFullMatrix_html"><div class="ttname"><a href="classFullMatrix.html">FullMatrix</a></div><div class="ttdef"><b>Definition</b> <a href="full__matrix_8h_source.html#href_anchor">full_matrix.h:79</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="Theget_stiffness_tensorfunction"></a> </p><h4>The <code>get_stiffness_tensor()</code> function</h4>
-<p>This function returns the stiffness tensor of the material. For the sake of simplicity we consider the stiffness to be isotropic and homogeneous; only the density <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture> depends on the position. As we have previously shown in <a class="el" href="step_8.html">step-8</a>, if the stiffness is isotropic and homogeneous, the stiffness coefficients <picture><source srcset="form_6195_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_{ijkl}$" src="form_6195.png"/></picture> can be expressed as a function of the two coefficients <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> and <picture><source srcset="form_3066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_3066.png"/></picture>. The coefficient tensor reduces to  </p><p class="formulaDsp">
+<p>This function returns the stiffness tensor of the material. For the sake of simplicity we consider the stiffness to be isotropic and homogeneous; only the density <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture> depends on the position. As we have previously shown in <a class="el" href="step_8.html">step-8</a>, if the stiffness is isotropic and homogeneous, the stiffness coefficients <picture><source srcset="form_6195_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_{ijkl}$" src="form_6195.png"/></picture> can be expressed as a function of the two coefficients <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> and <picture><source srcset="form_2994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_2994.png"/></picture>. The coefficient tensor reduces to  </p><p class="formulaDsp">
 <picture><source srcset="form_6211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    c_{ijkl}
    =
@@ -655,7 +655,7 @@
    \right.\\ F_y &amp;= 0
    \end{align*}" src="form_6213.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_1010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_1010.png"/></picture> is the maximum amplitude that takes the force and <picture><source srcset="form_6214_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_x$" src="form_6214.png"/></picture> and <picture><source srcset="form_6215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_y$" src="form_6215.png"/></picture> are the standard deviations for the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> and <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> components. Note that the pulse has been cropped to <picture><source srcset="form_6216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_\textrm{min}&lt;x&lt;x_\textrm{max}$" src="form_6216.png"/></picture> and <picture><source srcset="form_6217_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_\textrm{min} &lt;y&lt;y_\textrm{max}$" src="form_6217.png"/></picture>.</p>
+<p> where <picture><source srcset="form_964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_964.png"/></picture> is the maximum amplitude that takes the force and <picture><source srcset="form_6214_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_x$" src="form_6214.png"/></picture> and <picture><source srcset="form_6215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_y$" src="form_6215.png"/></picture> are the standard deviations for the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> and <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> components. Note that the pulse has been cropped to <picture><source srcset="form_6216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_\textrm{min}&lt;x&lt;x_\textrm{max}$" src="form_6216.png"/></picture> and <picture><source srcset="form_6217_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_\textrm{min} &lt;y&lt;y_\textrm{max}$" src="form_6217.png"/></picture>.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">double</span> RightHandSide&lt;dim&gt;::value(<span class="keyword">const</span> <a class="code hl_class" href="classPoint.html">Point&lt;dim&gt;</a> &amp; p,</div>
 <div class="line">                                     <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> component) <span class="keyword">const</span></div>
@@ -748,7 +748,7 @@
 <div class="line">  </div>
 <div class="ttc" id="anamespacestd_html_a7c6dd82cc3e9f70e162ddc6b9d5af521"><div class="ttname"><a href="namespacestd.html#href_anchor">std::max</a></div><div class="ttdeci">::VectorizedArray&lt; Number, width &gt; max(const ::VectorizedArray&lt; Number, width &gt; &amp;, const ::VectorizedArray&lt; Number, width &gt; &amp;)</div><div class="ttdef"><b>Definition</b> <a href="vectorization_8h_source.html#href_anchor">vectorization.h:6024</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="TheRhoclassimplementation"></a> </p><h4>The <code>Rho</code> class implementation</h4>
-<p>This class is used to define the mass density. As we have explained before, a phononic superlattice cavity is formed by two <a href="https://en.wikipedia.org/wiki/Band_gap">Distributed Reflector</a>, mirrors and a <picture><source srcset="form_6192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda/2$" src="form_6192.png"/></picture> cavity where <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> is the acoustic wavelength. Acoustic DBRs are periodic structures where a set of bilayer stacks with contrasting physical properties (sound velocity index) is repeated <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> times. The change of in the wave velocity is generated by alternating layers with different density.</p>
+<p>This class is used to define the mass density. As we have explained before, a phononic superlattice cavity is formed by two <a href="https://en.wikipedia.org/wiki/Band_gap">Distributed Reflector</a>, mirrors and a <picture><source srcset="form_6192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda/2$" src="form_6192.png"/></picture> cavity where <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> is the acoustic wavelength. Acoustic DBRs are periodic structures where a set of bilayer stacks with contrasting physical properties (sound velocity index) is repeated <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> times. The change of in the wave velocity is generated by alternating layers with different density.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    Rho&lt;dim&gt;::Rho(<a class="code hl_class" href="classHDF5_1_1Group.html">HDF5::Group</a> &amp;data)</div>
 <div class="line">      : <a class="code hl_class" href="classFunction.html">Function</a>&lt;dim&gt;(1)</div>
@@ -780,7 +780,7 @@
    c = \frac{K_e}{\rho}
    \]" src="form_6219.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_6220_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_e$" src="form_6220.png"/></picture> is the effective elastic constant and <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture> the density. Here we consider the case in which the waveguide width is much smaller than the wavelength. In this case it can be shown that for the two dimensional case  </p><p class="formulaDsp">
+<p> where <picture><source srcset="form_6220_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_e$" src="form_6220.png"/></picture> is the effective elastic constant and <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture> the density. Here we consider the case in which the waveguide width is much smaller than the wavelength. In this case it can be shown that for the two dimensional case  </p><p class="formulaDsp">
 <picture><source srcset="form_6221_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    K_e = 4\mu\frac{\lambda +\mu}{\lambda+2\mu}
    \]" src="form_6221.png"/></picture>
@@ -814,7 +814,7 @@
 <div class="line">  </div>
 <div class="ttc" id="agroup__Exceptions_html_ga70a0bb353656e704acf927945277bbc6"><div class="ttname"><a href="group__Exceptions.html#href_anchor">Assert</a></div><div class="ttdeci">#define Assert(cond, exc)</div><div class="ttdef"><b>Definition</b> <a href="include_2deal_8II_2base_2exceptions_8h_source.html#href_anchor">exceptions.h:1614</a></div></div>
 <div class="ttc" id="anamespacestd_html_aa2def4dc0bd5b6d07af7aff83feba9b2"><div class="ttname"><a href="namespacestd.html#href_anchor">std::sqrt</a></div><div class="ttdeci">::VectorizedArray&lt; Number, width &gt; sqrt(const ::VectorizedArray&lt; Number, width &gt; &amp;)</div><div class="ttdef"><b>Definition</b> <a href="vectorization_8h_source.html#href_anchor">vectorization.h:5946</a></div></div>
-</div><!-- fragment --><p>The density <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture> takes the following form <img src="https://www.dealii.org/images/steps/developer/step-62.04.svg" alt="Phononic superlattice cavity" style="pointer-events: none;" height="200" class="inline"/> where the brown color represents material_a and the green color represents material_b.</p>
+</div><!-- fragment --><p>The density <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture> takes the following form <img src="https://www.dealii.org/images/steps/developer/step-62.04.svg" alt="Phononic superlattice cavity" style="pointer-events: none;" height="200" class="inline"/> where the brown color represents material_a and the green color represents material_b.</p>
 <div class="fragment"><div class="line">      <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx = 0; idx &lt; nb_mirror_pairs; ++idx)</div>
 <div class="line">        {</div>
 <div class="line">          <span class="keyword">const</span> <span class="keywordtype">double</span> layer_transition_center =</div>
@@ -1055,7 +1055,7 @@
 <div class="line">      std::vector&lt;Vector&lt;std::complex&lt;double&gt;&gt;&gt; pml_values(</div>
 <div class="line">        n_q_points, <a class="code hl_class" href="classVector.html">Vector</a>&lt;std::complex&lt;double&gt;&gt;(dim));</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>We calculate the stiffness tensor for the <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> and <picture><source srcset="form_3066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_3066.png"/></picture> that have been defined in the jupyter notebook. Note that contrary to <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture> the stiffness is constant among for the whole domain.</p>
+</div><!-- fragment --><p>We calculate the stiffness tensor for the <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> and <picture><source srcset="form_2994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_2994.png"/></picture> that have been defined in the jupyter notebook. Note that contrary to <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture> the stiffness is constant among for the whole domain.</p>
 <div class="fragment"><div class="line">      <span class="keyword">const</span> <a class="code hl_class" href="classSymmetricTensor.html">SymmetricTensor&lt;4, dim&gt;</a> stiffness_tensor =</div>
 <div class="line">        get_stiffness_tensor&lt;dim&gt;(parameters.lambda, parameters.mu);</div>
 <div class="line">  </div>
@@ -1163,7 +1163,7 @@
    =\partial_j \phi_i
    \]" src="form_6224.png"/></picture>
 </p>
-<p> Note the position of the indices <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> and the notation that we use in this tutorial: <picture><source srcset="form_6225_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_j\phi_i$" src="form_6225.png"/></picture>. As the stiffness tensor is not symmetric, it is very easy to make a mistake.</p>
+<p> Note the position of the indices <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> and <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> and the notation that we use in this tutorial: <picture><source srcset="form_6225_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_j\phi_i$" src="form_6225.png"/></picture>. As the stiffness tensor is not symmetric, it is very easy to make a mistake.</p>
 <div class="fragment"><div class="line">                                      stiffness_coefficient +=</div>
 <div class="line">                                        grad_phi_i[m][n] *</div>
 <div class="line">                                        (alpha[m][n][k][l] * grad_phi_j[l][k] +</div>
@@ -1181,7 +1181,7 @@
 <div class="line">                      }</div>
 <div class="line">                  }</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>We loop again over the degrees of freedom of the cells to calculate the system matrix. These loops are really quick because we have already calculated the stiffness and mass matrices, only the value of <picture><source srcset="form_3735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega$" src="form_3735.png"/></picture> changes.</p>
+</div><!-- fragment --><p>We loop again over the degrees of freedom of the cells to calculate the system matrix. These loops are really quick because we have already calculated the stiffness and mass matrices, only the value of <picture><source srcset="form_3839_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega$" src="form_3839.png"/></picture> changes.</p>
 <div class="fragment"><div class="line">                <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; dofs_per_cell; ++i)</div>
 <div class="line">                  {</div>
 <div class="line">                    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; dofs_per_cell; ++j)</div>
@@ -1260,7 +1260,7 @@
 <div class="line">    {</div>
 <div class="line">      <a class="code hl_class" href="classTimerOutput_1_1Scope.html">TimerOutput::Scope</a> t(computing_timer, <span class="stringliteral">&quot;store_frequency_step_data&quot;</span>);</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>We store the displacement in the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> direction; the displacement in the <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> direction is negligible.</p>
+</div><!-- fragment --><p>We store the displacement in the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> direction; the displacement in the <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> direction is negligible.</p>
 <div class="fragment"><div class="line">      <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> probe_displacement_component = 0;</div>
 <div class="line">  </div>
 </div><!-- fragment --><p>The vector coordinates contains the coordinates in the <a class="el" href="namespaceHDF5.html">HDF5</a> file of the points of the probe that are located in locally owned cells. The vector displacement_data contains the value of the displacement at these points.</p>
@@ -1588,8 +1588,8 @@
 <div class="line">        <span class="keywordflow">for</span> (<span class="keyword">const</span> std::string &amp;group_name : group_names)</div>
 <div class="line">          {</div>
 </div><!-- fragment --><p>For each of these two group names, we now create the group and put attributes into these groups. Specifically, these are:</p><ul>
-<li>The dimensions of the waveguide (in <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> and <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> directions)</li>
-<li>The position of the probe (in <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> and <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> directions)</li>
+<li>The dimensions of the waveguide (in <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> and <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> directions)</li>
+<li>The position of the probe (in <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> and <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> directions)</li>
 <li>The number of points in the probe</li>
 <li>The global refinement level</li>
 <li>The cavity resonance frequency</li>
@@ -1769,17 +1769,17 @@
 <div class="line">plt.show()</div>
 <div class="line">h5_file.close()</div>
 </div><!-- fragment --><p>A phononic cavity is characterized by the <a href="https://en.wikipedia.org/wiki/Resonance">resonance frequency</a> and the <a href="https://en.wikipedia.org/wiki/Q_factor">the quality factor</a>. The quality factor is equal to the ratio between the stored energy in the resonator and the energy dissipated energy per cycle, which is approximately equivalent to the ratio between the resonance frequency and the <a href="https://en.wikipedia.org/wiki/Full_width_at_half_maximum">full width at half maximum (FWHM)</a>. The FWHM is equal to the bandwidth over which the power of vibration is greater than half the power at the resonant frequency.  </p><p class="formulaDsp">
-<picture><source srcset="form_6230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6226_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 Q = \frac{f_r}{\Delta f} = \frac{\omega_r}{\Delta \omega} =
 2 \pi \times \frac{\text{energy stored}}{\text{energy dissipated per cycle}}
-\]" src="form_6230.png"/></picture>
+\]" src="form_6226.png"/></picture>
 </p>
-<p>The square of the amplitude of the mechanical resonance <picture><source srcset="form_6231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a^2$" src="form_6231.png"/></picture> as a function of the frequency has a gaussian shape  </p><p class="formulaDsp">
-<picture><source srcset="form_6232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>The square of the amplitude of the mechanical resonance <picture><source srcset="form_6227_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a^2$" src="form_6227.png"/></picture> as a function of the frequency has a gaussian shape  </p><p class="formulaDsp">
+<picture><source srcset="form_6228_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 a^2 = a_\textrm{max}^2\frac{\omega^2\Gamma^2}{(\omega_r^2-\omega^2)^2+\Gamma^2\omega^2}
-\]" src="form_6232.png"/></picture>
+\]" src="form_6228.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_6233_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_r = \frac{\omega_r}{2\pi}$" src="form_6233.png"/></picture> is the resonance frequency and <picture><source srcset="form_6234_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma=\frac{\omega_r}{Q}$" src="form_6234.png"/></picture> is the dissipation rate. We used the previous equation in the jupyter notebook to fit the mechanical resonance.</p>
+<p> where <picture><source srcset="form_6229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f_r = \frac{\omega_r}{2\pi}$" src="form_6229.png"/></picture> is the resonance frequency and <picture><source srcset="form_6230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma=\frac{\omega_r}{Q}$" src="form_6230.png"/></picture> is the dissipation rate. We used the previous equation in the jupyter notebook to fit the mechanical resonance.</p>
 <p>Given the values we have chosen for the parameters, one could estimate the resonance frequency analytically. Indeed, this is then confirmed by what we get in this program: the phononic superlattice cavity exhibits a mechanical resonance at 20GHz and a quality factor of 5046. The following images show the transmission amplitude and phase as a function of frequency in the vicinity of the resonance frequency:</p>
 <p><img src="https://www.dealii.org/images/steps/developer/step-62.05.png" alt="Phononic superlattice cavity" height="400" class="inline"/> <img src="https://www.dealii.org/images/steps/developer/step-62.06.png" alt="Phononic superlattice cavity" height="400" class="inline"/></p>
 <p>The images above suggest that the periodic structure has its intended effect: It really only lets waves of a very specific frequency pass through, whereas all other waves are reflected. This is of course precisely what one builds these sorts of devices for. But it is not quite this easy. In practice, there is really only a "band gap", i.e., the device blocks waves other than the desired one at 20GHz only within a certain frequency range. Indeed, to find out how large this "gap" is within which waves are blocked, we can extend the frequency range to 16 GHz through the appropriate parameters in the input file. We then obtain the following image:</p>
@@ -1788,7 +1788,7 @@
 <p><a class="anchor" id="Modeprofile"></a></p><h3>Mode profile</h3>
 <p>We can inspect the mode profile with Paraview or VisIt. As we have discussed, at resonance all the mechanical energy is transmitted and the amplitude of motion is amplified inside the cavity. It can be observed that the PMLs are quite effective to truncate the solution. The following image shows the mode profile at resonance:</p>
 <p><img src="https://www.dealii.org/images/steps/developer/step-62.08.png" alt="Phononic superlattice cavity" height="400" class="inline"/></p>
-<p>On the other hand, out of resonance all the mechanical energy is reflected. The following image shows the profile at 19.75 GHz. Note the interference between the force pulse and the reflected wave at the position <picture><source srcset="form_6235_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=-8\mu\textrm{m}$" src="form_6235.png"/></picture>.</p>
+<p>On the other hand, out of resonance all the mechanical energy is reflected. The following image shows the profile at 19.75 GHz. Note the interference between the force pulse and the reflected wave at the position <picture><source srcset="form_6231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=-8\mu\textrm{m}$" src="form_6231.png"/></picture>.</p>
 <p><img src="https://www.dealii.org/images/steps/developer/step-62.09.png" alt="Phononic superlattice cavity" height="400" class="inline"/></p>
 <p><a class="anchor" id="Experimentalapplications"></a></p><h3>Experimental applications</h3>
 <p>Phononic superlattice cavities find application in <a href="https://journals.aps.org/rmp/abstract/10.1103/RevModPhys.86.1391">quantum optomechanics</a>. Here we have presented the simulation of a 2D superlattice cavity, but this code can be used as well to simulate "real world" 3D devices such as <a href="https://journals.aps.org/prb/abstract/10.1103/PhysRevB.99.060101">micropillar superlattice cavities</a>, which are promising candidates to study macroscopic quantum phenomena. The 20GHz mode of a micropillar superlattice cavity is essentially a mechanical harmonic oscillator that is very well isolated from the environment. If the device is cooled down to 20mK in a dilution fridge, the mode would then become a macroscopic quantum harmonic oscillator.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_63.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_63.html	2024-03-17 21:57:48.283264192 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_63.html	2024-03-17 21:57:48.287264216 +0000
@@ -153,40 +153,40 @@
 <p>This program solves an advection-diffusion problem using a geometric multigrid (GMG) preconditioner. The basics of this preconditioner are discussed in <a class="el" href="step_16.html">step-16</a>; here we discuss the necessary changes needed for a non-symmetric PDE. Additionally, we introduce the idea of block smoothing (as compared to point smoothing in <a class="el" href="step_16.html">step-16</a>), and examine the effects of DoF renumbering for additive and multiplicative smoothers.</p>
 <p><a class="anchor" id="Equation"></a></p><h3>Equation</h3>
 <p>The advection-diffusion equation is given by  </p><p class="formulaDsp">
-<picture><source srcset="form_6239_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_6232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 -\varepsilon \Delta u + \boldsymbol{\beta}\cdot \nabla u &amp; = f &amp;
 \text{ in } \Omega\\
 u &amp;= g &amp; \text{ on } \partial\Omega
-\end{align*}" src="form_6239.png"/></picture>
+\end{align*}" src="form_6232.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_6240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon&gt;0$" src="form_6240.png"/></picture>, <picture><source srcset="form_6241_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\beta}$" src="form_6241.png"/></picture> is the <em>advection direction</em>, and <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> is a source. A few notes:</p>
+<p> where <picture><source srcset="form_6233_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon&gt;0$" src="form_6233.png"/></picture>, <picture><source srcset="form_6234_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\beta}$" src="form_6234.png"/></picture> is the <em>advection direction</em>, and <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> is a source. A few notes:</p>
 <ol type="1">
-<li>If <picture><source srcset="form_6242_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\beta}=\boldsymbol{0}$" src="form_6242.png"/></picture>, this is the Laplace equation solved in <a class="el" href="step_16.html">step-16</a> (and many other places).</li>
-<li>If <picture><source srcset="form_6243_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon=0$" src="form_6243.png"/></picture> then this is the stationary advection equation solved in <a class="el" href="step_9.html">step-9</a>.</li>
-<li>One can define a dimensionless number for this problem, called the <em>Peclet number</em>: <picture><source srcset="form_6244_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{P} \dealcoloneq \frac{\|\boldsymbol{\beta}\|
-L}{\varepsilon}$" src="form_6244.png"/></picture>, where <picture><source srcset="form_533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_533.png"/></picture> is the length scale of the domain. It characterizes the kind of equation we are considering: If <picture><source srcset="form_6245_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{P}&gt;1$" src="form_6245.png"/></picture>, we say the problem is <em>advection-dominated</em>, else if <picture><source srcset="form_6246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{P}&lt;1$" src="form_6246.png"/></picture> we will say the problem is <em>diffusion-dominated</em>.</li>
+<li>If <picture><source srcset="form_6235_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\beta}=\boldsymbol{0}$" src="form_6235.png"/></picture>, this is the Laplace equation solved in <a class="el" href="step_16.html">step-16</a> (and many other places).</li>
+<li>If <picture><source srcset="form_6236_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon=0$" src="form_6236.png"/></picture> then this is the stationary advection equation solved in <a class="el" href="step_9.html">step-9</a>.</li>
+<li>One can define a dimensionless number for this problem, called the <em>Peclet number</em>: <picture><source srcset="form_6237_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{P} \dealcoloneq \frac{\|\boldsymbol{\beta}\|
+L}{\varepsilon}$" src="form_6237.png"/></picture>, where <picture><source srcset="form_537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L$" src="form_537.png"/></picture> is the length scale of the domain. It characterizes the kind of equation we are considering: If <picture><source srcset="form_6238_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{P}&gt;1$" src="form_6238.png"/></picture>, we say the problem is <em>advection-dominated</em>, else if <picture><source srcset="form_6239_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{P}&lt;1$" src="form_6239.png"/></picture> we will say the problem is <em>diffusion-dominated</em>.</li>
 </ol>
 <p>For the discussion in this tutorial we will be concerned with advection-dominated flow. This is the complicated case: We know that for diffusion-dominated problems, the standard Galerkin method works just fine, and we also know that simple multigrid methods such as those defined in <a class="el" href="step_16.html">step-16</a> are very efficient. On the other hand, for advection-dominated problems, the standard Galerkin approach leads to oscillatory and unstable discretizations, and simple solvers are often not very efficient. This tutorial program is therefore intended to address both of these issues.</p>
 <p><a class="anchor" id="Streamlinediffusion"></a></p><h4>Streamline diffusion</h4>
-<p>Using the standard Galerkin finite element method, for suitable test functions <picture><source srcset="form_2788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2788.png"/></picture>, a discrete weak form of the PDE would read  </p><p class="formulaDsp">
-<picture><source srcset="form_6247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>Using the standard Galerkin finite element method, for suitable test functions <picture><source srcset="form_2781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2781.png"/></picture>, a discrete weak form of the PDE would read  </p><p class="formulaDsp">
+<picture><source srcset="form_6240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 a(u_h,v_h) = F(v_h)
-\end{align*}" src="form_6247.png"/></picture>
+\end{align*}" src="form_6240.png"/></picture>
 </p>
 <p> where  </p><p class="formulaDsp">
-<picture><source srcset="form_6248_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_6241_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 a(u_h,v_h) &amp;= (\varepsilon \nabla v_h,\, \nabla u_h) +
 (v_h,\,\boldsymbol{\beta}\cdot \nabla u_h),\\
 F(v_h) &amp;= (v_h,\,f).
-\end{align*}" src="form_6248.png"/></picture>
+\end{align*}" src="form_6241.png"/></picture>
 </p>
 <p>Unfortunately, one typically gets oscillatory solutions with this approach. Indeed, the following error estimate can be shown for this formulation:  </p><p class="formulaDsp">
-<picture><source srcset="form_6249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_6242_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 \|\nabla (u-u_h)\| \leq (1+\mathcal{P}) \inf_{v_h} \|\nabla (u-v_h)\|.
-\end{align*}" src="form_6249.png"/></picture>
+\end{align*}" src="form_6242.png"/></picture>
 </p>
 <p> The infimum on the right can be estimated as follows if the exact solution is sufficiently smooth:  </p><p class="formulaDsp">
-<picture><source srcset="form_6250_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_6243_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \inf_{v_h} \|\nabla (u-v_h)\|.
   \le
   \|\nabla (u-I_h u)\|
@@ -194,52 +194,52 @@
   h^k
   C
   \|\nabla^k u)\|
-\end{align*}" src="form_6250.png"/></picture>
+\end{align*}" src="form_6243.png"/></picture>
 </p>
 <p> where <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> is the polynomial degree of the finite elements used. As a consequence, we obtain the estimate  </p><p class="formulaDsp">
-<picture><source srcset="form_6251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_6244_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 \|\nabla (u-u_h)\|
 \leq (1+\mathcal{P}) C h^k
   \|\nabla^k u)\|.
-\end{align*}" src="form_6251.png"/></picture>
+\end{align*}" src="form_6244.png"/></picture>
 </p>
-<p> In other words, the numerical solution will converge. On the other hand, given the definition of <picture><source srcset="form_6252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{P}$" src="form_6252.png"/></picture> above, we have to expect poor numerical solutions with a large error when <picture><source srcset="form_6253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon \ll
-\|\boldsymbol{\beta}\| L$" src="form_6253.png"/></picture>, i.e., if the problem has only a small amount of diffusion.</p>
+<p> In other words, the numerical solution will converge. On the other hand, given the definition of <picture><source srcset="form_6245_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{P}$" src="form_6245.png"/></picture> above, we have to expect poor numerical solutions with a large error when <picture><source srcset="form_6246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon \ll
+\|\boldsymbol{\beta}\| L$" src="form_6246.png"/></picture>, i.e., if the problem has only a small amount of diffusion.</p>
 <p>To combat this, we will consider the new weak form  </p><p class="formulaDsp">
-<picture><source srcset="form_6254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_6247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 a(u_h,\,v_h) + \sum_K (-\varepsilon \Delta u_h +
 \boldsymbol{\beta}\cdot \nabla u_h-f,\,\delta_K
 \boldsymbol{\beta}\cdot \nabla v_h)_K = F(v_h)
-\end{align*}" src="form_6254.png"/></picture>
+\end{align*}" src="form_6247.png"/></picture>
 </p>
-<p> where the sum is done over all cells <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> with the inner product taken for each cell, and <picture><source srcset="form_6255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_K$" src="form_6255.png"/></picture> is a cell-wise constant stabilization parameter defined in <b>[john2006discontinuity]</b>.</p>
-<p>Essentially, adding in the discrete strong form residual enhances the coercivity of the bilinear form <picture><source srcset="form_2903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\cdot,\cdot)$" src="form_2903.png"/></picture> which increases the stability of the discrete solution. This method is commonly referred to as <em>streamline diffusion</em> or <em>SUPG</em> (streamline upwind/Petrov-Galerkin).</p>
+<p> where the sum is done over all cells <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> with the inner product taken for each cell, and <picture><source srcset="form_6248_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_K$" src="form_6248.png"/></picture> is a cell-wise constant stabilization parameter defined in <b>[john2006discontinuity]</b>.</p>
+<p>Essentially, adding in the discrete strong form residual enhances the coercivity of the bilinear form <picture><source srcset="form_2821_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\cdot,\cdot)$" src="form_2821.png"/></picture> which increases the stability of the discrete solution. This method is commonly referred to as <em>streamline diffusion</em> or <em>SUPG</em> (streamline upwind/Petrov-Galerkin).</p>
 <p><a class="anchor" id="Smoothers"></a></p><h3>Smoothers</h3>
 <p>One of the goals of this tutorial is to expand from using a simple (point-wise) Gauss-Seidel (SOR) smoother that is used in <a class="el" href="step_16.html">step-16</a> (class <a class="el" href="classPreconditionSOR.html">PreconditionSOR</a>) on each level of the multigrid hierarchy. The term "point-wise" is traditionally used in solvers to indicate that one solves at one "grid point" at a time; for scalar problems, this means to use a solver that updates one unknown of the linear system at a time, keeping all of the others fixed; one would then iterate over all unknowns in the problem and, once done, start over again from the first unknown until these "sweeps" converge. Jacobi, Gauss-Seidel, and SOR iterations can all be interpreted in this way. In the context of multigrid, one does not think of these methods as "solvers", but as "smoothers". As such, one is not interested in actually solving the linear system. It is enough to remove the high-frequency part of the residual for the multigrid method to work, because that allows restricting the solution to a coarser mesh. Therefore, one only does a few, fixed number of "sweeps" over all unknowns. In the code in this tutorial this is controlled by the "Smoothing steps" parameter.</p>
 <p>But these methods are known to converge rather slowly when used as solvers. While as multigrid smoothers, they are surprisingly good, they can also be improved upon. In particular, we consider "cell-based" smoothers here as well. These methods solve for all unknowns on a cell at once, keeping all other unknowns fixed; they then move on to the next cell, and so on and so forth. One can think of them as "block" versions of Jacobi, Gauss-Seidel, or SOR, but because degrees of freedom are shared among multiple cells, these blocks overlap and the methods are in fact best be explained within the framework of additive and multiplicative Schwarz methods.</p>
-<p>In contrast to <a class="el" href="step_16.html">step-16</a>, our test problem contains an advective term. Especially with a small diffusion constant <picture><source srcset="form_6256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon$" src="form_6256.png"/></picture>, information is transported along streamlines in the given advection direction. This means that smoothers are likely to be more effective if they allow information to travel in downstream direction within a single smoother application. If we want to solve one unknown (or block of unknowns) at a time in the order in which these unknowns (or blocks) are enumerated, then this information propagation property requires reordering degrees of freedom or cells (for the cell-based smoothers) accordingly so that the ones further upstream are treated earlier (have lower indices) and those further downstream are treated later (have larger indices). The influence of the ordering will be visible in the results section.</p>
+<p>In contrast to <a class="el" href="step_16.html">step-16</a>, our test problem contains an advective term. Especially with a small diffusion constant <picture><source srcset="form_6249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon$" src="form_6249.png"/></picture>, information is transported along streamlines in the given advection direction. This means that smoothers are likely to be more effective if they allow information to travel in downstream direction within a single smoother application. If we want to solve one unknown (or block of unknowns) at a time in the order in which these unknowns (or blocks) are enumerated, then this information propagation property requires reordering degrees of freedom or cells (for the cell-based smoothers) accordingly so that the ones further upstream are treated earlier (have lower indices) and those further downstream are treated later (have larger indices). The influence of the ordering will be visible in the results section.</p>
 <p>Let us now briefly define the smoothers used in this tutorial. For a more detailed introduction, we refer to <b>[KanschatNotesIterative]</b> and the books <b>[smith2004domain]</b> and <b>[toselli2006domain]</b>. A Schwarz preconditioner requires a decomposition  </p><p class="formulaDsp">
-<picture><source srcset="form_6257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_6250_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 V = \sum_{j=1}^J V_j
-\end{align*}" src="form_6257.png"/></picture>
+\end{align*}" src="form_6250.png"/></picture>
 </p>
-<p> of our finite element space <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture>. Each subproblem <picture><source srcset="form_1651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1651.png"/></picture> also has a Ritz projection <picture><source srcset="form_6258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_j: V \rightarrow V_j$" src="form_6258.png"/></picture> based on the bilinear form <picture><source srcset="form_2903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\cdot,\cdot)$" src="form_2903.png"/></picture>. This projection induces a local operator <picture><source srcset="form_6259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_j$" src="form_6259.png"/></picture> for each subproblem <picture><source srcset="form_1651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1651.png"/></picture>. If <picture><source srcset="form_6260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Pi_j:V\rightarrow V_j$" src="form_6260.png"/></picture> is the orthogonal projector onto <picture><source srcset="form_1651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1651.png"/></picture>, one can show <picture><source srcset="form_6261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_jP_j=\Pi_j^TA$" src="form_6261.png"/></picture>.</p>
+<p> of our finite element space <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture>. Each subproblem <picture><source srcset="form_1654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1654.png"/></picture> also has a Ritz projection <picture><source srcset="form_6251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_j: V \rightarrow V_j$" src="form_6251.png"/></picture> based on the bilinear form <picture><source srcset="form_2821_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\cdot,\cdot)$" src="form_2821.png"/></picture>. This projection induces a local operator <picture><source srcset="form_6252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_j$" src="form_6252.png"/></picture> for each subproblem <picture><source srcset="form_1654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1654.png"/></picture>. If <picture><source srcset="form_6253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Pi_j:V\rightarrow V_j$" src="form_6253.png"/></picture> is the orthogonal projector onto <picture><source srcset="form_1654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1654.png"/></picture>, one can show <picture><source srcset="form_6254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_jP_j=\Pi_j^TA$" src="form_6254.png"/></picture>.</p>
 <p>With this we can define an <em>additive Schwarz preconditioner</em> for the operator <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> as  </p><p class="formulaDsp">
-<picture><source srcset="form_6262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_6255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
  B^{-1} = \sum_{j=1}^J P_j A^{-1} = \sum_{j=1}^J A_j^{-1} \Pi_j^T.
-\end{align*}" src="form_6262.png"/></picture>
+\end{align*}" src="form_6255.png"/></picture>
 </p>
-<p> In other words, we project our solution into each subproblem, apply the inverse of the subproblem <picture><source srcset="form_6259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_j$" src="form_6259.png"/></picture>, and sum the contributions up over all <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>.</p>
-<p>Note that one can interpret the point-wise (one unknown at a time) Jacobi method as an additive Schwarz method by defining a subproblem <picture><source srcset="form_1651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1651.png"/></picture> for each degree of freedom. Then, <picture><source srcset="form_6263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_j^{-1}$" src="form_6263.png"/></picture> becomes a multiplication with the inverse of a diagonal entry of <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture>.</p>
-<p>For the "Block Jacobi" method used in this tutorial, we define a subproblem <picture><source srcset="form_1651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1651.png"/></picture> for each cell of the mesh on the current level. Note that we use a continuous finite element, so these blocks are overlapping, as degrees of freedom on an interface between two cells belong to both subproblems. The logic for the Schwarz operator operating on the subproblems (in deal.II they are called "blocks") is implemented in the class <a class="el" href="classRelaxationBlock.html">RelaxationBlock</a>. The "Block
-Jacobi" method is implemented in the class <a class="el" href="classRelaxationBlockJacobi.html">RelaxationBlockJacobi</a>. Many aspects of the class (for example how the blocks are defined and how to invert the local subproblems <picture><source srcset="form_6259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_j$" src="form_6259.png"/></picture>) can be configured in the smoother data, see <a class="el" href="classRelaxationBlock_1_1AdditionalData.html">RelaxationBlock::AdditionalData</a> and <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::make_cell_patches()</a> for details.</p>
+<p> In other words, we project our solution into each subproblem, apply the inverse of the subproblem <picture><source srcset="form_6252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_j$" src="form_6252.png"/></picture>, and sum the contributions up over all <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>.</p>
+<p>Note that one can interpret the point-wise (one unknown at a time) Jacobi method as an additive Schwarz method by defining a subproblem <picture><source srcset="form_1654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1654.png"/></picture> for each degree of freedom. Then, <picture><source srcset="form_6256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_j^{-1}$" src="form_6256.png"/></picture> becomes a multiplication with the inverse of a diagonal entry of <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture>.</p>
+<p>For the "Block Jacobi" method used in this tutorial, we define a subproblem <picture><source srcset="form_1654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1654.png"/></picture> for each cell of the mesh on the current level. Note that we use a continuous finite element, so these blocks are overlapping, as degrees of freedom on an interface between two cells belong to both subproblems. The logic for the Schwarz operator operating on the subproblems (in deal.II they are called "blocks") is implemented in the class <a class="el" href="classRelaxationBlock.html">RelaxationBlock</a>. The "Block
+Jacobi" method is implemented in the class <a class="el" href="classRelaxationBlockJacobi.html">RelaxationBlockJacobi</a>. Many aspects of the class (for example how the blocks are defined and how to invert the local subproblems <picture><source srcset="form_6252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_j$" src="form_6252.png"/></picture>) can be configured in the smoother data, see <a class="el" href="classRelaxationBlock_1_1AdditionalData.html">RelaxationBlock::AdditionalData</a> and <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::make_cell_patches()</a> for details.</p>
 <p>So far, we discussed additive smoothers where the updates can be applied independently and there is no information flowing within a single smoother application. A <em>multiplicative Schwarz preconditioner</em> addresses this and is defined by  </p><p class="formulaDsp">
-<picture><source srcset="form_6264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_6257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
  B^{-1} = \left( I- \prod_{j=1}^J \left(I-P_j\right) \right) A^{-1}.
-\end{align*}" src="form_6264.png"/></picture>
+\end{align*}" src="form_6257.png"/></picture>
 </p>
-<p> In contrast to above, the updates on the subproblems <picture><source srcset="form_1651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1651.png"/></picture> are applied sequentially. This means that the update obtained when inverting the subproblem <picture><source srcset="form_6259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_j$" src="form_6259.png"/></picture> is immediately used in <picture><source srcset="form_6265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{j+1}$" src="form_6265.png"/></picture>. This becomes visible when writing out the project:  </p><p class="formulaDsp">
-<picture><source srcset="form_6266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> In contrast to above, the updates on the subproblems <picture><source srcset="form_1654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1654.png"/></picture> are applied sequentially. This means that the update obtained when inverting the subproblem <picture><source srcset="form_6252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_j$" src="form_6252.png"/></picture> is immediately used in <picture><source srcset="form_6258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_{j+1}$" src="form_6258.png"/></picture>. This becomes visible when writing out the project:  </p><p class="formulaDsp">
+<picture><source srcset="form_6259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
  B^{-1}
  =
  \left(
@@ -254,18 +254,18 @@
    \left[ \left(I-P_1\right)
    \left[ \left(I-P_2\right)\cdots
      \left[\left(I-P_J\right) A^{-1}\right] \cdots \right] \right]
-\end{align*}" src="form_6266.png"/></picture>
+\end{align*}" src="form_6259.png"/></picture>
 </p>
-<p>When defining the sub-spaces <picture><source srcset="form_1651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1651.png"/></picture> as whole blocks of degrees of freedom, this method is implemented in the class <a class="el" href="classRelaxationBlockSOR.html">RelaxationBlockSOR</a> and used when you select "Block SOR" in this tutorial. The class <a class="el" href="classRelaxationBlockSOR.html">RelaxationBlockSOR</a> is also derived from <a class="el" href="classRelaxationBlock.html">RelaxationBlock</a>. As such, both additive and multiplicative Schwarz methods are implemented in a unified framework.</p>
+<p>When defining the sub-spaces <picture><source srcset="form_1654_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_j$" src="form_1654.png"/></picture> as whole blocks of degrees of freedom, this method is implemented in the class <a class="el" href="classRelaxationBlockSOR.html">RelaxationBlockSOR</a> and used when you select "Block SOR" in this tutorial. The class <a class="el" href="classRelaxationBlockSOR.html">RelaxationBlockSOR</a> is also derived from <a class="el" href="classRelaxationBlock.html">RelaxationBlock</a>. As such, both additive and multiplicative Schwarz methods are implemented in a unified framework.</p>
 <p>Finally, let us note that the standard Gauss-Seidel (or SOR) method can be seen as a multiplicative Schwarz method with a subproblem for each DoF.</p>
 <p><a class="anchor" id="Testproblem"></a></p><h3>Test problem</h3>
-<p>We will be considering the following test problem: <picture><source srcset="form_6267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega =
-[-1,\,1]\times[-1,\,1]\backslash B_{0.3}(0)$" src="form_6267.png"/></picture>, i.e., a square with a circle of radius 0.3 centered at the origin removed. In addition, we use <picture><source srcset="form_6268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon=0.005$" src="form_6268.png"/></picture>, <picture><source srcset="form_6269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\beta} =
-[-\sin(\pi/6),\,\cos(\pi/6)]$" src="form_6269.png"/></picture>, <picture><source srcset="form_3214_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=0$" src="form_3214.png"/></picture>, and Dirichlet boundary values  </p><p class="formulaDsp">
-<picture><source srcset="form_6270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>We will be considering the following test problem: <picture><source srcset="form_6260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega =
+[-1,\,1]\times[-1,\,1]\backslash B_{0.3}(0)$" src="form_6260.png"/></picture>, i.e., a square with a circle of radius 0.3 centered at the origin removed. In addition, we use <picture><source srcset="form_6261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon=0.005$" src="form_6261.png"/></picture>, <picture><source srcset="form_6262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\beta} =
+[-\sin(\pi/6),\,\cos(\pi/6)]$" src="form_6262.png"/></picture>, <picture><source srcset="form_3106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f=0$" src="form_3106.png"/></picture>, and Dirichlet boundary values  </p><p class="formulaDsp">
+<picture><source srcset="form_6263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 g = \left\{\begin{array}{ll} 1 &amp; \text{if } x=-1 \text{ or } y=-1,\,x\geq 0.5 \\
 0 &amp; \text{otherwise} \end{array}\right.
-\end{align*}" src="form_6270.png"/></picture>
+\end{align*}" src="form_6263.png"/></picture>
 </p>
 <p>The following figures depict the solutions with (left) and without (right) streamline diffusion. Without streamline diffusion we see large oscillations around the boundary layer, demonstrating the instability of the standard Galerkin finite element method for this problem.</p>
 <table width="60%" align="center">
@@ -657,7 +657,7 @@
 <div class="line">      <a class="code hl_define" href="group__Exceptions.html#href_anchor">Assert</a>(component == 0, ExcIndexRange(component, 0, 1));</div>
 <div class="line">      (<span class="keywordtype">void</span>)component;</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>Set boundary to 1 if <picture><source srcset="form_600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=1$" src="form_600.png"/></picture>, or if <picture><source srcset="form_6271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x&gt;0.5$" src="form_6271.png"/></picture> and <picture><source srcset="form_6272_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=-1$" src="form_6272.png"/></picture>.</p>
+</div><!-- fragment --><p>Set boundary to 1 if <picture><source srcset="form_600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x=1$" src="form_600.png"/></picture>, or if <picture><source srcset="form_6264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x&gt;0.5$" src="form_6264.png"/></picture> and <picture><source srcset="form_6265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y=-1$" src="form_6265.png"/></picture>.</p>
 <div class="fragment"><div class="line">      <span class="keywordflow">if</span> (std::fabs(p[0] - 1) &lt; 1e-8 ||</div>
 <div class="line">          (std::fabs(p[1] + 1) &lt; 1e-8 &amp;&amp; p[0] &gt;= 0.5))</div>
 <div class="line">        {</div>
@@ -945,7 +945,7 @@
 <div class="line">      right_hand_side.value_list(scratch_data.fe_values.get_quadrature_points(),</div>
 <div class="line">                                 rhs_values);</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>If we are using streamline diffusion we must add its contribution to both the cell matrix and the cell right-hand side. If we are not using streamline diffusion, setting <picture><source srcset="form_6273_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta=0$" src="form_6273.png"/></picture> negates this contribution below and we are left with the standard, Galerkin finite element assembly.</p>
+</div><!-- fragment --><p>If we are using streamline diffusion we must add its contribution to both the cell matrix and the cell right-hand side. If we are not using streamline diffusion, setting <picture><source srcset="form_6266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta=0$" src="form_6266.png"/></picture> negates this contribution below and we are left with the standard, Galerkin finite element assembly.</p>
 <div class="fragment"><div class="line">      <span class="keyword">const</span> <span class="keywordtype">double</span> delta = (<a class="code hl_variable" href="tria__description_8cc.html#href_anchor">settings</a>.with_streamline_diffusion ?</div>
 <div class="line">                              compute_stabilization_delta(cell-&gt;diameter(),</div>
 <div class="line">                                                          <a class="code hl_variable" href="tria__description_8cc.html#href_anchor">settings</a>.epsilon,</div>
@@ -1062,7 +1062,7 @@
 <div class="ttc" id="aclassDoFHandler_html_a52af463de3283318bd4c651df7d35d24"><div class="ttname"><a href="classDoFHandler.html#href_anchor">DoFHandler::begin_mg</a></div><div class="ttdeci">level_cell_iterator begin_mg(const unsigned int level=0) const</div></div>
 <div class="ttc" id="aclassIndexSet_html"><div class="ttname"><a href="classIndexSet.html">IndexSet</a></div><div class="ttdef"><b>Definition</b> <a href="index__set_8h_source.html#href_anchor">index_set.h:67</a></div></div>
 <div class="ttc" id="anamespaceDoFTools_html_a5127bf00b985041912850ba63493770f"><div class="ttname"><a href="namespaceDoFTools.html#href_anchor">DoFTools::extract_locally_relevant_level_dofs</a></div><div class="ttdeci">IndexSet extract_locally_relevant_level_dofs(const DoFHandler&lt; dim, spacedim &gt; &amp;dof_handler, const unsigned int level)</div><div class="ttdef"><b>Definition</b> <a href="dof__tools_8cc_source.html#href_anchor">dof_tools.cc:1186</a></div></div>
-</div><!-- fragment --><p>If <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_858.png"/></picture> is an <code>interface_out</code> dof pair, then <picture><source srcset="form_6274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(j,i)$" src="form_6274.png"/></picture> is an <code>interface_in</code> dof pair. Note: For <code>interface_in</code>, we load the transpose of the interface entries, i.e., the entry for dof pair <picture><source srcset="form_6274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(j,i)$" src="form_6274.png"/></picture> is stored in <code>interface_in(i,j)</code>. This is an optimization for the symmetric case which allows only one matrix to be used when setting the edge_matrices in solve(). Here, however, since our problem is non-symmetric, we must store both <code>interface_in</code> and <code>interface_out</code> matrices.</p>
+</div><!-- fragment --><p>If <picture><source srcset="form_855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(i,j)$" src="form_855.png"/></picture> is an <code>interface_out</code> dof pair, then <picture><source srcset="form_6267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(j,i)$" src="form_6267.png"/></picture> is an <code>interface_in</code> dof pair. Note: For <code>interface_in</code>, we load the transpose of the interface entries, i.e., the entry for dof pair <picture><source srcset="form_6267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(j,i)$" src="form_6267.png"/></picture> is stored in <code>interface_in(i,j)</code>. This is an optimization for the symmetric case which allows only one matrix to be used when setting the edge_matrices in solve(). Here, however, since our problem is non-symmetric, we must store both <code>interface_in</code> and <code>interface_out</code> matrices.</p>
 <div class="fragment"><div class="line">        <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; copy_data.dofs_per_cell; ++i)</div>
 <div class="line">          <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; copy_data.dofs_per_cell; ++j)</div>
 <div class="line">            <span class="keywordflow">if</span> (mg_constrained_dofs.is_interface_matrix_entry(</div>
@@ -1424,8 +1424,8 @@
 <div class="line">  }</div>
 </div><!-- fragment --><p> <a class="anchor" id="Results"></a></p><h1>Results</h1>
 <p><a class="anchor" id="GMRESIterationNumbers"></a></p><h3>GMRES Iteration Numbers </h3>
-<p>The major advantage for GMG is that it is an <picture><source srcset="form_6275_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{O}(n)$" src="form_6275.png"/></picture> method, that is, the complexity of the problem increases linearly with the problem size. To show then that the linear solver presented in this tutorial is in fact <picture><source srcset="form_6275_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{O}(n)$" src="form_6275.png"/></picture>, all one needs to do is show that the iteration counts for the GMRES solve stay roughly constant as we refine the mesh.</p>
-<p>Each of the following tables gives the GMRES iteration counts to reduce the initial residual by a factor of <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^8$" src="form_200.png"/></picture>. We selected a sufficient number of smoothing steps (based on the method) to get iteration numbers independent of mesh size. As can be seen from the tables below, the method is indeed <picture><source srcset="form_6275_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{O}(n)$" src="form_6275.png"/></picture>.</p>
+<p>The major advantage for GMG is that it is an <picture><source srcset="form_6268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{O}(n)$" src="form_6268.png"/></picture> method, that is, the complexity of the problem increases linearly with the problem size. To show then that the linear solver presented in this tutorial is in fact <picture><source srcset="form_6268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{O}(n)$" src="form_6268.png"/></picture>, all one needs to do is show that the iteration counts for the GMRES solve stay roughly constant as we refine the mesh.</p>
+<p>Each of the following tables gives the GMRES iteration counts to reduce the initial residual by a factor of <picture><source srcset="form_174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^8$" src="form_174.png"/></picture>. We selected a sufficient number of smoothing steps (based on the method) to get iteration numbers independent of mesh size. As can be seen from the tables below, the method is indeed <picture><source srcset="form_6268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{O}(n)$" src="form_6268.png"/></picture>.</p>
 <p><a class="anchor" id="DoFCellRenumbering"></a></p><h4>DoF/Cell Renumbering </h4>
 <p>The point-wise smoothers ("Jacobi" and "SOR") get applied in the order the DoFs are numbered on each level. We can influence this using the <a class="el" href="namespaceDoFRenumbering.html">DoFRenumbering</a> namespace. The block smoothers are applied based on the ordering we set in <code>setup_smoother()</code>. We can visualize this numbering. The following pictures show the cell numbering of the active cells in downstream, random, and upstream numbering (left to right):</p>
 <p><img src="https://www.dealii.org/images/steps/developer/step-63-cell-order.png" alt="" class="inline"/></p>
@@ -1481,7 +1481,7 @@
 <th>131072 </th><th></th><th>132096 </th><td>12 </td><td>16 </td><td>19 </td><th></th><td>11 </td><td>12 </td><td>21  </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_64.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_64.html	2024-03-17 21:57:48.355264636 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_64.html	2024-03-17 21:57:48.359264661 +0000
@@ -127,12 +127,12 @@
 <p>While we have tried for the interface of the matrix-free classes for the CPU and the GPU to be as close as possible, there are a few differences. When using the matrix-free framework on a GPU, one must write some CUDA code. However, the amount is fairly small and the use of CUDA is limited to a few keywords.</p>
 <p><a class="anchor" id="Thetestcase"></a></p><h3>The test case</h3>
 <p>In this example, we consider the Helmholtz problem </p><p class="formulaDsp">
-<picture><source srcset="form_6226_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*} - \nabla \cdot
-\nabla u + a(\mathbf x) u &amp;=&amp;1,\\ u &amp;=&amp; 0 \quad \text{on } \partial \Omega \end{eqnarray*}" src="form_6226.png"/></picture>
+<picture><source srcset="form_6270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*} - \nabla \cdot
+\nabla u + a(\mathbf x) u &amp;=&amp;1,\\ u &amp;=&amp; 0 \quad \text{on } \partial \Omega \end{eqnarray*}" src="form_6270.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_2178_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)$" src="form_2178.png"/></picture> is a variable coefficient.</p>
-<p>We choose as domain <picture><source srcset="form_4653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega=[0,1]^3$" src="form_4653.png"/></picture> and <picture><source srcset="form_6227_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)=\frac{10}{0.05 +
-2\|\mathbf x\|^2}$" src="form_6227.png"/></picture>. Since the coefficient is symmetric around the origin but the domain is not, we will end up with a non-symmetric solution.</p>
+<p> where <picture><source srcset="form_2158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)$" src="form_2158.png"/></picture> is a variable coefficient.</p>
+<p>We choose as domain <picture><source srcset="form_4593_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega=[0,1]^3$" src="form_4593.png"/></picture> and <picture><source srcset="form_6271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf x)=\frac{10}{0.05 +
+2\|\mathbf x\|^2}$" src="form_6271.png"/></picture>. Since the coefficient is symmetric around the origin but the domain is not, we will end up with a non-symmetric solution.</p>
 <p>If you've made it this far into the tutorial, you will know how the weak formulation of this problem looks like and how, in principle, one assembles linear systems for it. Of course, in this program we will in fact not actually form the matrix, but rather only represent its action when one multiplies with it.</p>
 <p><a class="anchor" id="Movingdatatoandfromthedevice"></a></p><h3>Moving data to and from the device</h3>
 <p>GPUs (we will use the term "device" from now on to refer to the GPU) have their own memory that is separate from the memory accessible to the CPU (we will use the term "host" from now on). A normal calculation on the device can be divided in three separate steps:</p><ol type="1">
@@ -256,8 +256,8 @@
 <div class="line">  </div>
 <div class="line">  </div>
 <div class="ttc" id="anamespaceUtilities_html_a0900f35b37ee122e73fb2c80bba9beb9"><div class="ttname"><a href="namespaceUtilities.html#href_anchor">Utilities::pow</a></div><div class="ttdeci">constexpr T pow(const T base, const int iexp)</div><div class="ttdef"><b>Definition</b> <a href="include_2deal_8II_2base_2utilities_8h_source.html#href_anchor">utilities.h:447</a></div></div>
-</div><!-- fragment --><p>The following function implements this coefficient. Recall from the introduction that we have defined it as <picture><source srcset="form_6228_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf
-   x)=\frac{10}{0.05 + 2\|\mathbf x\|^2}$" src="form_6228.png"/></picture></p>
+</div><!-- fragment --><p>The following function implements this coefficient. Recall from the introduction that we have defined it as <picture><source srcset="form_6272_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a(\mathbf
+   x)=\frac{10}{0.05 + 2\|\mathbf x\|^2}$" src="form_6272.png"/></picture></p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim, <span class="keywordtype">int</span> fe_degree&gt;</div>
 <div class="line">    <a class="code hl_define" href="numbers_8h.html#href_anchor">DEAL_II_HOST_DEVICE</a> <span class="keywordtype">void</span></div>
 <div class="line">    VaryingCoefficientFunctor&lt;dim, fe_degree&gt;::operator()(</div>
@@ -312,9 +312,9 @@
 <div class="line">  </div>
 <div class="ttc" id="aclassFEEvaluation_html"><div class="ttname"><a href="classFEEvaluation.html">FEEvaluation</a></div><div class="ttdef"><b>Definition</b> <a href="fe__evaluation_8h_source.html#href_anchor">fe_evaluation.h:1916</a></div></div>
 </div><!-- fragment --><p>The Helmholtz problem we want to solve here reads in weak form as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_6229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_6273_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
    (\nabla v, \nabla u)+ (v, a(\mathbf x) u) &amp;=&amp;(v,1) \quad \forall v.
-   \end{eqnarray*}" src="form_6229.png"/></picture>
+   \end{eqnarray*}" src="form_6273.png"/></picture>
 </p>
 <p> If you have seen <a class="el" href="step_37.html">step-37</a>, then it will be obvious that the two terms on the left-hand side correspond to the two function calls here:</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim, <span class="keywordtype">int</span> fe_degree&gt;</div>
@@ -656,7 +656,7 @@
 <div class="ttc" id="aclassSolverCG_html"><div class="ttname"><a href="classSolverCG.html">SolverCG</a></div><div class="ttdef"><b>Definition</b> <a href="solver__cg_8h_source.html#href_anchor">solver_cg.h:178</a></div></div>
 <div class="ttc" id="aclassSolverControl_html"><div class="ttname"><a href="classSolverControl.html">SolverControl</a></div><div class="ttdef"><b>Definition</b> <a href="solver__control_8h_source.html#href_anchor">solver_control.h:68</a></div></div>
 </div><!-- fragment --><p>The output results function is as usual since we have already copied the values back from the GPU to the CPU.</p>
-<p>While we're already doing something with the function, we might as well compute the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of the solution. We do this by calling <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::integrate_difference()</a>. That function is meant to compute the error by evaluating the difference between the numerical solution (given by a vector of values for the degrees of freedom) and an object representing the exact solution. But we can easily compute the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of the solution by passing in a zero function instead. That is, instead of evaluating the error <picture><source srcset="form_6236_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u_h-u\|_{L_2(\Omega)}$" src="form_6236.png"/></picture>, we are just evaluating <picture><source srcset="form_6237_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u_h-0\|_{L_2(\Omega)}=\|u_h\|_{L_2(\Omega)}$" src="form_6237.png"/></picture> instead.</p>
+<p>While we're already doing something with the function, we might as well compute the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of the solution. We do this by calling <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::integrate_difference()</a>. That function is meant to compute the error by evaluating the difference between the numerical solution (given by a vector of values for the degrees of freedom) and an object representing the exact solution. But we can easily compute the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm of the solution by passing in a zero function instead. That is, instead of evaluating the error <picture><source srcset="form_6274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u_h-u\|_{L_2(\Omega)}$" src="form_6274.png"/></picture>, we are just evaluating <picture><source srcset="form_6275_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u_h-0\|_{L_2(\Omega)}=\|u_h\|_{L_2(\Omega)}$" src="form_6275.png"/></picture> instead.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim, <span class="keywordtype">int</span> fe_degree&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> HelmholtzProblem&lt;dim, fe_degree&gt;::output_results(</div>
 <div class="line">      <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cycle) <span class="keyword">const</span></div>
@@ -791,7 +791,7 @@
 <div class="line">   Number of degrees of freedom: 117649</div>
 <div class="line">  Solved in 227 iterations.</div>
 <div class="line">  solution norm: 0.0205261</div>
-</div><!-- fragment --><p>One can make two observations here: First, the norm of the numerical solution converges, presumably to the norm of the exact (but unknown) solution. And second, the number of iterations roughly doubles with each refinement of the mesh. (This is in keeping with the expectation that the number of CG iterations grows with the square root of the condition number of the matrix; and that we know that the condition number of the matrix of a second-order differential operation grows like <picture><source srcset="form_6238_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(h^{-2})$" src="form_6238.png"/></picture>.) This is of course rather inefficient, as an optimal solver would have a number of iterations that is independent of the size of the problem. But having such a solver would require using a better preconditioner than the identity matrix we have used here.</p>
+</div><!-- fragment --><p>One can make two observations here: First, the norm of the numerical solution converges, presumably to the norm of the exact (but unknown) solution. And second, the number of iterations roughly doubles with each refinement of the mesh. (This is in keeping with the expectation that the number of CG iterations grows with the square root of the condition number of the matrix; and that we know that the condition number of the matrix of a second-order differential operation grows like <picture><source srcset="form_6276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(h^{-2})$" src="form_6276.png"/></picture>.) This is of course rather inefficient, as an optimal solver would have a number of iterations that is independent of the size of the problem. But having such a solver would require using a better preconditioner than the identity matrix we have used here.</p>
 <p><a class="anchor" id="extensions"></a> <a class="anchor" id="Possibilitiesforextensions"></a></p><h3>Possibilities for extensions </h3>
 <p>Currently, this program uses no preconditioner at all. This is mainly since constructing an efficient matrix-free preconditioner is non-trivial. However, simple choices just requiring the diagonal of the corresponding matrix are good candidates and these can be computed in a matrix-free way as well. Alternatively, and maybe even better, one could extend the tutorial to use multigrid with Chebyshev smoothers similar to <a class="el" href="step_37.html">step-37</a>.</p>
 <p><a class="anchor" id="PlainProg"></a> </p><h1>The plain program</h1>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_65.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_65.html	2024-03-17 21:57:48.419265031 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_65.html	2024-03-17 21:57:48.419265031 +0000
@@ -192,14 +192,14 @@
        (1-\xi)\eta  (x_2,y_2) + \xi\eta  (x_3,y_3).
 \end{align*}" src="form_6280.png"/></picture>
 </p>
-<p>For the case of the curved surface, we want to modify this formula. For the top cell of the coarse mesh of the disk, we can assume that the points <picture><source srcset="form_1420_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_0,y_0)$" src="form_1420.png"/></picture> and <picture><source srcset="form_6281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_1,y_1)$" src="form_6281.png"/></picture> sit along the straight line at the lower end and the points <picture><source srcset="form_6282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_2,y_2)$" src="form_6282.png"/></picture> and <picture><source srcset="form_6283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_3,y_3)$" src="form_6283.png"/></picture> are connected by a quarter circle along the top. We would then map a point <picture><source srcset="form_6284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\xi, \eta)$" src="form_6284.png"/></picture> as  </p><p class="formulaDsp">
+<p>For the case of the curved surface, we want to modify this formula. For the top cell of the coarse mesh of the disk, we can assume that the points <picture><source srcset="form_1455_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_0,y_0)$" src="form_1455.png"/></picture> and <picture><source srcset="form_6281_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_1,y_1)$" src="form_6281.png"/></picture> sit along the straight line at the lower end and the points <picture><source srcset="form_6282_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_2,y_2)$" src="form_6282.png"/></picture> and <picture><source srcset="form_6283_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x_3,y_3)$" src="form_6283.png"/></picture> are connected by a quarter circle along the top. We would then map a point <picture><source srcset="form_6284_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\xi, \eta)$" src="form_6284.png"/></picture> as  </p><p class="formulaDsp">
 <picture><source srcset="form_6285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 (x,y) = (1-\eta) \big[(1-\xi) (x_0,y_0) + \xi (x_1,y_1)\big] +
       \eta \mathbf{c}_3(\xi),
 \end{align*}" src="form_6285.png"/></picture>
 </p>
 <p> where <picture><source srcset="form_6286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{c}_3(\xi)$" src="form_6286.png"/></picture> is a curve that describes the <picture><source srcset="form_6212_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(x,y)$" src="form_6212.png"/></picture> coordinates of the quarter circle in terms of an arclength parameter <picture><source srcset="form_6287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi\in (0,1)$" src="form_6287.png"/></picture>. This represents a linear interpolation between the straight lower edge and the curved upper edge of the cell, and is the basis for the picture shown above.</p>
-<p>This formula is easily generalized to the case where all four edges are described by a curve rather than a straight line. We call the four functions, parameterized by a single coordinate <picture><source srcset="form_551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi$" src="form_551.png"/></picture> or <picture><source srcset="form_2182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2182.png"/></picture> in the horizontal and vertical directions, <picture><source srcset="form_6288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{c}_0, \mathbf{c}_1, \mathbf{c}_2,
+<p>This formula is easily generalized to the case where all four edges are described by a curve rather than a straight line. We call the four functions, parameterized by a single coordinate <picture><source srcset="form_551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi$" src="form_551.png"/></picture> or <picture><source srcset="form_2162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2162.png"/></picture> in the horizontal and vertical directions, <picture><source srcset="form_6288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{c}_0, \mathbf{c}_1, \mathbf{c}_2,
 \mathbf{c}_3$" src="form_6288.png"/></picture> for the left, right, lower, and upper edge of a quadrilateral, respectively. The interpolation then reads  </p><p class="formulaDsp">
 <picture><source srcset="form_6289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 (x,y) =&amp; (1-\xi)\mathbf{c}_0(\eta) + \xi \mathbf{c}_1(\eta)
@@ -216,7 +216,7 @@
 <p>As a final remark on transfinite interpolation, we mention that the mesh refinement strategies in deal.II in absence of a volume manifold description are also based on the weights of the transfinite interpolation and optimal in that sense. The difference is that the default algorithm sees only one cell at a time, and so will apply the optimal algorithm only on those cells touching the curved manifolds. In contrast, using the transfinite mapping on entire <em>patches</em> of cells (originating from one coarser cell) allows to use the transfinite interpolation method in a way that propagates information from the boundary to cells far away.</p>
 <p><a class="anchor" id="Transfiniteinterpolationisexpensiveandhowtodealwithit"></a></p><h3>Transfinite interpolation is expensive and how to deal with it</h3>
 <p>A mesh with a transfinite manifold description is typically set up in two steps. The first step is to create a coarse mesh (or read it in from a file) and to attach a curved manifold to some of the mesh entities. For the above example of the disk, we attach a polar manifold to the faces along the outer circle (this is done automatically by <a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_ball()</a>). Before we start refining the mesh, we then assign a <a class="el" href="classTransfiniteInterpolationManifold.html">TransfiniteInterpolationManifold</a> to all interior cells and edges of the mesh, which of course needs to be based on some manifold id that we have assigned to those entities (everything except the circle on the boundary). It does not matter whether we also assign a <a class="el" href="classTransfiniteInterpolationManifold.html">TransfiniteInterpolationManifold</a> to the inner square of the disk or not because the transfinite interpolation on a coarse cell with straight edges (or flat faces in 3d) simply yields subdivided children with straight edges (flat faces).</p>
-<p>Later, when the mesh is refined or when a higher-order mapping is set up based on this mesh, the cells will query the underlying manifold object for new points. This process takes a set of surrounding points, for example the four vertices of a two-dimensional cell, and a set of weights to each of these points, for definition a new point. For the mid point of a cell, each of the four vertices would get weight 0.25. For the transfinite interpolation manifold, the process of building weighted sums requires some serious work. By construction, we want to combine the points in terms of the reference coordinates <picture><source srcset="form_551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi$" src="form_551.png"/></picture> and <picture><source srcset="form_2182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2182.png"/></picture> (or <picture><source srcset="form_6294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi, \eta, \zeta$" src="form_6294.png"/></picture> in 3D) of the surrounding points. However, the interface of the manifold classes in deal.II does not get the reference coordinates of the surrounding points (as they are not stored globally) but rather the physical coordinates only. Thus, the first step the transfinite interpolation manifold has to do is to invert the mapping and find the reference coordinates within one of the coarse cells of the transfinite interpolation (e.g. one of the four shaded coarse-grid cells of the disk mesh above). This inversion is done by a Newton iteration (or rather, finite-difference based Newton scheme combined with Broyden's method) and queries the transfinite interpolation according to the formula above several times. Each of these queries in turn might call an expensive manifold, e.g. a spherical description of a ball, and be expensive on its own. Since the <a class="el" href="classManifold.html">Manifold</a> interface class of deal.II only provides a set of points, the transfinite interpolation initially does not even know to which coarse grid cell the set of surrounding points belong to and needs to search among several cells based on some heuristics. In terms of <a href="https://en.wikipedia.org/wiki/Atlas_(topology)#href_anchor">charts</a>, one could describe the implementation of the transfinite interpolation as an <a href="https://en.wikipedia.org/wiki/Atlas_(topology)">atlas</a>-based implementation: Each cell of the initial coarse grid of the triangulation represents a chart with its own reference space, and the surrounding manifolds provide a way to transform from the chart space (i.e., the reference cell) to the physical space. The collection of the charts of the coarse grid cells is an atlas, and as usual, the first thing one does when looking up something in an atlas is to find the right chart.</p>
+<p>Later, when the mesh is refined or when a higher-order mapping is set up based on this mesh, the cells will query the underlying manifold object for new points. This process takes a set of surrounding points, for example the four vertices of a two-dimensional cell, and a set of weights to each of these points, for definition a new point. For the mid point of a cell, each of the four vertices would get weight 0.25. For the transfinite interpolation manifold, the process of building weighted sums requires some serious work. By construction, we want to combine the points in terms of the reference coordinates <picture><source srcset="form_551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi$" src="form_551.png"/></picture> and <picture><source srcset="form_2162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2162.png"/></picture> (or <picture><source srcset="form_6294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi, \eta, \zeta$" src="form_6294.png"/></picture> in 3D) of the surrounding points. However, the interface of the manifold classes in deal.II does not get the reference coordinates of the surrounding points (as they are not stored globally) but rather the physical coordinates only. Thus, the first step the transfinite interpolation manifold has to do is to invert the mapping and find the reference coordinates within one of the coarse cells of the transfinite interpolation (e.g. one of the four shaded coarse-grid cells of the disk mesh above). This inversion is done by a Newton iteration (or rather, finite-difference based Newton scheme combined with Broyden's method) and queries the transfinite interpolation according to the formula above several times. Each of these queries in turn might call an expensive manifold, e.g. a spherical description of a ball, and be expensive on its own. Since the <a class="el" href="classManifold.html">Manifold</a> interface class of deal.II only provides a set of points, the transfinite interpolation initially does not even know to which coarse grid cell the set of surrounding points belong to and needs to search among several cells based on some heuristics. In terms of <a href="https://en.wikipedia.org/wiki/Atlas_(topology)#href_anchor">charts</a>, one could describe the implementation of the transfinite interpolation as an <a href="https://en.wikipedia.org/wiki/Atlas_(topology)">atlas</a>-based implementation: Each cell of the initial coarse grid of the triangulation represents a chart with its own reference space, and the surrounding manifolds provide a way to transform from the chart space (i.e., the reference cell) to the physical space. The collection of the charts of the coarse grid cells is an atlas, and as usual, the first thing one does when looking up something in an atlas is to find the right chart.</p>
 <p>Once the reference coordinates of the surrounding points have been found, a new point in the reference coordinate system is computed by a simple weighted sum. Finally, the reference point is inserted into the formula for the transfinite interpolation, which gives the desired new point.</p>
 <p>In a number of cases, the curved manifold is not only used during mesh refinement, but also to ensure a curved representation of boundaries within the cells of the computational domain. This is a necessity to guarantee high-order convergence for high-order polynomials on complex geometries anyway, but sometimes an accurate geometry is also desired with linear shape functions. This is often done by polynomial descriptions of the cells and called the isoparametric concept if the polynomial degree to represent the curved mesh elements is the same as the degree of the polynomials for the numerical solution. If the degree of the geometry is higher or lower than the solution, one calls that a super- or sub-parametric geometry representation, respectively. In deal.II, the standard class for polynomial representation is <a class="el" href="classMappingQ.html">MappingQ</a>. If, for example, this class is used with polynomial degree <picture><source srcset="form_6295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$4$" src="form_6295.png"/></picture> in 3D, a total of 125 (i.e., <picture><source srcset="form_6296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(4+1)^3$" src="form_6296.png"/></picture>) points are needed for the interpolation. Among these points, 8 are the cell's vertices and already available from the mesh, but the other 117 need to be provided by the manifold. In case the transfinite interpolation manifold is used, we can imagine that going through the pull-back into reference coordinates of some yet to be determined coarse cell, followed by subsequent push-forward on each of the 117 points, is a lot of work and can be very time consuming.</p>
 <p>What makes things worse is that the structure of many programs is such that the mapping is queried several times independently for the same cell. Its primary use is in the assembly of the linear system, i.e., the computation of the system matrix and the right hand side, via the <code>mapping</code> argument of the <a class="el" href="classFEValues.html">FEValues</a> object. However, also the interpolation of boundary values, the computation of numerical errors, writing the output, and evaluation of error estimators must involve the same mapping to ensure a consistent interpretation of the solution vectors. Thus, even a linear stationary problem that is solved once will evaluate the points of the mapping several times. For the cubic case in 3D mentioned above, this means computing 117 points per cell by an expensive algorithm many times. The situation is more pressing for nonlinear or time-dependent problems where those operations are done over and over again.</p>
@@ -468,7 +468,7 @@
    \sum_{k=1}^d\text{det}(J) w_q a(x)\frac{\partial \varphi_i(\boldsymbol
    \xi_q)}{\partial x_k} \frac{\partial \varphi_j(\boldsymbol
    \xi_q)}{\partial x_k}$" src="form_6307.png"/></picture>, which is exactly the terms needed for the bilinear form of the Laplace equation.</p>
-<p>The reason for choosing this somewhat unusual scheme is due to the heavy work involved in computing the cell matrix for a relatively high polynomial degree in 3d. As we want to highlight the cost of the mapping in this tutorial program, we better do the assembly in an optimized way in order to not chase bottlenecks that have been solved by the community already. Matrix-matrix multiplication is one of the best optimized kernels in the HPC context, and the <a class="el" href="classFullMatrix.html#href_anchor">FullMatrix::mTmult()</a> function will call into those optimized BLAS functions. If the user has provided a good BLAS library when configuring deal.II (like OpenBLAS or Intel's MKL), the computation of the cell matrix will execute close to the processor's peak arithmetic performance. As a side note, we mention that despite an optimized matrix-matrix multiplication, the current strategy is sub-optimal in terms of complexity as the work to be done is proportional to <picture><source srcset="form_6308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(p+1)^9$" src="form_6308.png"/></picture> operations for degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> (this also applies to the usual evaluation with <a class="el" href="classFEValues.html">FEValues</a>). One could compute the cell matrix with <picture><source srcset="form_6309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O((p+1)^7)$" src="form_6309.png"/></picture> operations by utilizing the tensor product structure of the shape functions, as is done by the matrix-free framework in deal.II. We refer to <a class="el" href="step_37.html">step-37</a> and the documentation of the tensor-product-aware evaluators <a class="el" href="classFEEvaluation.html">FEEvaluation</a> for details on how an even more efficient cell matrix computation could be realized.</p>
+<p>The reason for choosing this somewhat unusual scheme is due to the heavy work involved in computing the cell matrix for a relatively high polynomial degree in 3d. As we want to highlight the cost of the mapping in this tutorial program, we better do the assembly in an optimized way in order to not chase bottlenecks that have been solved by the community already. Matrix-matrix multiplication is one of the best optimized kernels in the HPC context, and the <a class="el" href="classFullMatrix.html#href_anchor">FullMatrix::mTmult()</a> function will call into those optimized BLAS functions. If the user has provided a good BLAS library when configuring deal.II (like OpenBLAS or Intel's MKL), the computation of the cell matrix will execute close to the processor's peak arithmetic performance. As a side note, we mention that despite an optimized matrix-matrix multiplication, the current strategy is sub-optimal in terms of complexity as the work to be done is proportional to <picture><source srcset="form_6308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(p+1)^9$" src="form_6308.png"/></picture> operations for degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> (this also applies to the usual evaluation with <a class="el" href="classFEValues.html">FEValues</a>). One could compute the cell matrix with <picture><source srcset="form_6309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O((p+1)^7)$" src="form_6309.png"/></picture> operations by utilizing the tensor product structure of the shape functions, as is done by the matrix-free framework in deal.II. We refer to <a class="el" href="step_37.html">step-37</a> and the documentation of the tensor-product-aware evaluators <a class="el" href="classFEEvaluation.html">FEEvaluation</a> for details on how an even more efficient cell matrix computation could be realized.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> PoissonProblem&lt;dim&gt;::assemble_system(<span class="keyword">const</span> <a class="code hl_class" href="classMapping.html">Mapping&lt;dim&gt;</a> &amp;mapping)</div>
 <div class="line">    {</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_66.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_66.html	2024-03-17 21:57:48.503265550 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_66.html	2024-03-17 21:57:48.511265600 +0000
@@ -159,7 +159,7 @@
 </p>
 <p> This problem is also called the <em>Gelfand problem</em> and is a typical example for problems from combustion theory, see for example <b>[bebernes1989mathematical]</b>.</p>
 <p><a class="anchor" id="Discretizationwithfiniteelements"></a></p><h3>Discretization with finite elements</h3>
-<p>As usual, we first derive the weak formulation for this problem by multiplying with a smooth test function <picture><source srcset="form_6314_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v\colon\Omega\to\mathbb{R}$" src="form_6314.png"/></picture> respecting the boundary condition and integrating over the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>. Integration by parts and putting the term from the right hand side to the left yields the weak formulation: Find a function <picture><source srcset="form_6312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\colon\Omega\to\mathbb{R}$" src="form_6312.png"/></picture> such that for all test functions <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> it holds:  </p><p class="formulaDsp">
+<p>As usual, we first derive the weak formulation for this problem by multiplying with a smooth test function <picture><source srcset="form_6314_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v\colon\Omega\to\mathbb{R}$" src="form_6314.png"/></picture> respecting the boundary condition and integrating over the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>. Integration by parts and putting the term from the right hand side to the left yields the weak formulation: Find a function <picture><source srcset="form_6312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\colon\Omega\to\mathbb{R}$" src="form_6312.png"/></picture> such that for all test functions <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> it holds:  </p><p class="formulaDsp">
 <picture><source srcset="form_6315_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
  \int_\Omega \nabla v \cdot \nabla u \,\mathrm{d}x
  -
@@ -186,8 +186,8 @@
  &amp;\text{Update: }                       &amp; u_h^{n+1} &amp;= u_h^n + s_h^n.
 \end{align*}" src="form_6325.png"/></picture>
 </p>
-<p> So in each Newton step we have to solve a linear problem <picture><source srcset="form_6326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A\,x = b$" src="form_6326.png"/></picture>, where the system matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is represented by the Jacobian <picture><source srcset="form_6327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(u_h^n)[\,\cdot\,]\colon\mathbb{R}^N\to\mathbb{R}^N$" src="form_6327.png"/></picture> and the right hand side <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> by the negative residual <picture><source srcset="form_6328_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-F(u_h^n)$" src="form_6328.png"/></picture>. The solution vector <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> is in that case the Newton update of the <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>-th Newton step. Note, that we assume an initial guess <picture><source srcset="form_6329_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h^0$" src="form_6329.png"/></picture>, which already fulfills the Dirichlet boundary conditions of the problem formulation (in fact this could also be an inhomogeneous Dirichlet boundary condition) and thus the Newton updates <picture><source srcset="form_6330_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s_h$" src="form_6330.png"/></picture> satisfy a homogeneous Dirichlet condition.</p>
-<p>Until now we only tested with the basis functions, however, we can also represent any function of <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture> as linear combination of basis functions. More mathematically this means, that every element of <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_97.png"/></picture> can be identified with a vector <picture><source srcset="form_6331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U\in\mathbb{R}^N$" src="form_6331.png"/></picture> via the representation formula: <picture><source srcset="form_6332_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h = \sum_{i=1}^N U_i \varphi_i$" src="form_6332.png"/></picture>. So using this we can give an expression for the discrete Jacobian and the residual:  </p><p class="formulaDsp">
+<p> So in each Newton step we have to solve a linear problem <picture><source srcset="form_6326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A\,x = b$" src="form_6326.png"/></picture>, where the system matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> is represented by the Jacobian <picture><source srcset="form_6327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(u_h^n)[\,\cdot\,]\colon\mathbb{R}^N\to\mathbb{R}^N$" src="form_6327.png"/></picture> and the right hand side <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> by the negative residual <picture><source srcset="form_6328_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-F(u_h^n)$" src="form_6328.png"/></picture>. The solution vector <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> is in that case the Newton update of the <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>-th Newton step. Note, that we assume an initial guess <picture><source srcset="form_6329_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h^0$" src="form_6329.png"/></picture>, which already fulfills the Dirichlet boundary conditions of the problem formulation (in fact this could also be an inhomogeneous Dirichlet boundary condition) and thus the Newton updates <picture><source srcset="form_6330_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s_h$" src="form_6330.png"/></picture> satisfy a homogeneous Dirichlet condition.</p>
+<p>Until now we only tested with the basis functions, however, we can also represent any function of <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture> as linear combination of basis functions. More mathematically this means, that every element of <picture><source srcset="form_109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h$" src="form_109.png"/></picture> can be identified with a vector <picture><source srcset="form_6331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U\in\mathbb{R}^N$" src="form_6331.png"/></picture> via the representation formula: <picture><source srcset="form_6332_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h = \sum_{i=1}^N U_i \varphi_i$" src="form_6332.png"/></picture>. So using this we can give an expression for the discrete Jacobian and the residual:  </p><p class="formulaDsp">
 <picture><source srcset="form_6333_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
  A_{ij} = \bigl( F'(u_h^n) \bigr)_{ij}
  &amp;=
@@ -837,7 +837,7 @@
 <div class="ttc" id="astructMatrixFree_1_1AdditionalData_html"><div class="ttname"><a href="structMatrixFree_1_1AdditionalData.html">MatrixFree::AdditionalData</a></div><div class="ttdef"><b>Definition</b> <a href="matrix__free_8h_source.html#href_anchor">matrix_free.h:184</a></div></div>
 <div class="ttc" id="astructMatrixFree_1_1AdditionalData_html_a0bcce2facca91b925d3e1a5a00c7704b"><div class="ttname"><a href="structMatrixFree_1_1AdditionalData.html#href_anchor">MatrixFree::AdditionalData::tasks_parallel_scheme</a></div><div class="ttdeci">TasksParallelScheme tasks_parallel_scheme</div><div class="ttdef"><b>Definition</b> <a href="matrix__free_8h_source.html#href_anchor">matrix_free.h:347</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="GelfandProblemevaluate_residual"></a> </p><h4>GelfandProblem::evaluate_residual</h4>
-<p>Next we implement a function which evaluates the nonlinear discrete residual for a given input vector ( <picture><source srcset="form_6344_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\texttt{dst} = F(\texttt{src})$" src="form_6344.png"/></picture>). This function is then used for the assembly of the right hand side of the linearized system and later for the computation of the residual of the next Newton step to check if we already reached the error tolerance. As this function should not affect any class variable we define it as a constant function. Internally we exploit the fast finite element evaluation through the <a class="el" href="classFEEvaluation.html">FEEvaluation</a> class and the <a class="el" href="classMatrixFree.html#href_anchor">MatrixFree::cell_loop()</a>, similar to <code>apply_add()</code> function of the <code>JacobianOperator</code>.</p>
+<p>Next we implement a function which evaluates the nonlinear discrete residual for a given input vector ( <picture><source srcset="form_6337_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\texttt{dst} = F(\texttt{src})$" src="form_6337.png"/></picture>). This function is then used for the assembly of the right hand side of the linearized system and later for the computation of the residual of the next Newton step to check if we already reached the error tolerance. As this function should not affect any class variable we define it as a constant function. Internally we exploit the fast finite element evaluation through the <a class="el" href="classFEEvaluation.html">FEEvaluation</a> class and the <a class="el" href="classMatrixFree.html#href_anchor">MatrixFree::cell_loop()</a>, similar to <code>apply_add()</code> function of the <code>JacobianOperator</code>.</p>
 <p>First we create a pointer to the <a class="el" href="classMatrixFree.html">MatrixFree</a> object, which is stored in the <code>system_matrix</code>. Then we pass the worker function <code>local_evaluate_residual()</code> for the cell wise evaluation of the residual together with the input and output vector to the <a class="el" href="classMatrixFree.html#href_anchor">MatrixFree::cell_loop()</a>. In addition, we enable the zero out of the output vector in the loop, which is more efficient than calling <code>dst = 0.0</code> separately before.</p>
 <p>Note that with this approach we do not have to take care about the MPI related data exchange, since all the bookkeeping is done by the <a class="el" href="classMatrixFree.html#href_anchor">MatrixFree::cell_loop()</a>.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim, <span class="keywordtype">int</span> fe_degree&gt;</div>
@@ -901,7 +901,7 @@
 <div class="line">  </div>
 <div class="line">  </div>
 </div><!-- fragment --><p><a class="anchor" id="GelfandProblemcompute_residual"></a> </p><h4>GelfandProblem::compute_residual</h4>
-<p>According to <a class="el" href="step_15.html">step-15</a> the following function computes the norm of the nonlinear residual for the solution <picture><source srcset="form_6345_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h^n + \alpha s_h^n$" src="form_6345.png"/></picture> with the help of the <code>evaluate_residual()</code> function. The Newton step length <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> becomes important if we would use an adaptive version of the Newton method. Then for example we would compute the residual for different step lengths and compare the residuals. However, for our problem the full Newton step with <picture><source srcset="form_2862_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha=1$" src="form_2862.png"/></picture> is the best we can do. An adaptive version of Newton's method becomes interesting if we have no good initial value. Note that in theory Newton's method converges with quadratic order, but only if we have an appropriate initial value. For unsuitable initial values the Newton method diverges even with quadratic order. A common way is then to use a damped version <picture><source srcset="form_197_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha&lt;1$" src="form_197.png"/></picture> until the Newton step is good enough and the full Newton step can be performed. This was also discussed in <a class="el" href="step_15.html">step-15</a>.</p>
+<p>According to <a class="el" href="step_15.html">step-15</a> the following function computes the norm of the nonlinear residual for the solution <picture><source srcset="form_6338_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h^n + \alpha s_h^n$" src="form_6338.png"/></picture> with the help of the <code>evaluate_residual()</code> function. The Newton step length <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> becomes important if we would use an adaptive version of the Newton method. Then for example we would compute the residual for different step lengths and compare the residuals. However, for our problem the full Newton step with <picture><source srcset="form_2903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha=1$" src="form_2903.png"/></picture> is the best we can do. An adaptive version of Newton's method becomes interesting if we have no good initial value. Note that in theory Newton's method converges with quadratic order, but only if we have an appropriate initial value. For unsuitable initial values the Newton method diverges even with quadratic order. A common way is then to use a damped version <picture><source srcset="form_171_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha&lt;1$" src="form_171.png"/></picture> until the Newton step is good enough and the full Newton step can be performed. This was also discussed in <a class="el" href="step_15.html">step-15</a>.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim, <span class="keywordtype">int</span> fe_degree&gt;</div>
 <div class="line">    <span class="keywordtype">double</span> GelfandProblem&lt;dim, fe_degree&gt;::compute_residual(<span class="keyword">const</span> <span class="keywordtype">double</span> alpha)</div>
 <div class="line">    {</div>
@@ -1044,9 +1044,9 @@
 <div class="line">      <a class="code hl_class" href="classTimerOutput_1_1Scope.html">TimerOutput::Scope</a> t(computing_timer, <span class="stringliteral">&quot;solve&quot;</span>);</div>
 <div class="line">  </div>
 <div class="line">  </div>
-</div><!-- fragment --><p>We define a maximal number of Newton steps and tolerances for the convergence criterion. Usually, with good starting values, the Newton method converges in three to six steps, so maximal ten steps should be totally sufficient. As tolerances we use <picture><source srcset="form_6351_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|F(u^n_h)\|&lt;\text{TOL}_f =
-   10^{-12}$" src="form_6351.png"/></picture> for the norm of the residual and <picture><source srcset="form_6352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|s_h^n\| &lt; \text{TOL}_x =
-   10^{-10}$" src="form_6352.png"/></picture> for the norm of the Newton update. This seems a bit over the top, but we will see that, for our example, we will achieve these tolerances after a few steps.</p>
+</div><!-- fragment --><p>We define a maximal number of Newton steps and tolerances for the convergence criterion. Usually, with good starting values, the Newton method converges in three to six steps, so maximal ten steps should be totally sufficient. As tolerances we use <picture><source srcset="form_6339_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|F(u^n_h)\|&lt;\text{TOL}_f =
+   10^{-12}$" src="form_6339.png"/></picture> for the norm of the residual and <picture><source srcset="form_6340_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|s_h^n\| &lt; \text{TOL}_x =
+   10^{-10}$" src="form_6340.png"/></picture> for the norm of the Newton update. This seems a bit over the top, but we will see that, for our example, we will achieve these tolerances after a few steps.</p>
 <div class="fragment"><div class="line">      <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> itmax = 10;</div>
 <div class="line">      <span class="keyword">const</span> <span class="keywordtype">double</span>       TOLf  = 1e-12;</div>
 <div class="line">      <span class="keyword">const</span> <span class="keywordtype">double</span>       TOLx  = 1e-10;</div>
@@ -1066,7 +1066,7 @@
 <div class="line">          compute_update();</div>
 <div class="line">  </div>
 <div class="line">  </div>
-</div><!-- fragment --><p>Then we compute the errors, namely the norm of the Newton update and the residual. Note that at this point one could incorporate a step size control for the Newton method by varying the input parameter <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> for the compute_residual function. However, here we just use <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> equal to one for a plain Newton iteration.</p>
+</div><!-- fragment --><p>Then we compute the errors, namely the norm of the Newton update and the residual. Note that at this point one could incorporate a step size control for the Newton method by varying the input parameter <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> for the compute_residual function. However, here we just use <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> equal to one for a plain Newton iteration.</p>
 <div class="fragment"><div class="line">          <span class="keyword">const</span> <span class="keywordtype">double</span> ERRx = newton_update.l2_norm();</div>
 <div class="line">          <span class="keyword">const</span> <span class="keywordtype">double</span> ERRf = compute_residual(1.0);</div>
 <div class="line">  </div>
@@ -1451,17 +1451,17 @@
 <div class="line"><span class="stringliteral">+---------------------------------+-----------+------------+------------+</span></div>
 </div><!-- fragment --><p>We show the solution for the two- and three-dimensional problem in the following figure.</p>
 <div class="twocolumn" style="width: 80%; text-align: center;"> <div> <img src="https://www.dealii.org/images/steps/developer/step-66.solution-2d.png" alt="Solution of the two-dimensional Gelfand problem." width="100%" class="inline"/> </div> <div> <img src="https://www.dealii.org/images/steps/developer/step-66.solution-3d.png" alt="Solution of the three-dimensional Gelfand problem." width="100%" class="inline"/> </div> </div><p><a class="anchor" id="Newtonsolver"></a></p><h3>Newton solver</h3>
-<p>In the program output above we find some interesting information about the Newton iterations. The terminal output in each refinement cycle presents detailed diagnostics of the Newton method, which show first of all the number of Newton steps and for each step the norm of the residual <picture><source srcset="form_6353_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|F(u_h^{n+1})\|$" src="form_6353.png"/></picture>, the norm of the Newton update <picture><source srcset="form_6354_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|s_h^n\|$" src="form_6354.png"/></picture>, and the number of CG iterations <code>it</code>.</p>
-<p>We observe that for all cases the Newton method converges in approximately three to four steps, which shows the quadratic convergence of the Newton method with a full step length <picture><source srcset="form_4497_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha = 1$" src="form_4497.png"/></picture>. However, be aware that for a badly chosen initial guess <picture><source srcset="form_6329_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h^0$" src="form_6329.png"/></picture>, the Newton method will also diverge quadratically. Usually if you do not have an appropriate initial guess, you try a few damped Newton steps with a reduced step length <picture><source srcset="form_6355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha &lt; 1$" src="form_6355.png"/></picture> until the Newton step is again in the quadratic convergence domain. This damping and relaxation of the Newton step length truly requires a more sophisticated implementation of the Newton method, which we designate to you as a possible extension of the tutorial.</p>
+<p>In the program output above we find some interesting information about the Newton iterations. The terminal output in each refinement cycle presents detailed diagnostics of the Newton method, which show first of all the number of Newton steps and for each step the norm of the residual <picture><source srcset="form_6341_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|F(u_h^{n+1})\|$" src="form_6341.png"/></picture>, the norm of the Newton update <picture><source srcset="form_6342_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|s_h^n\|$" src="form_6342.png"/></picture>, and the number of CG iterations <code>it</code>.</p>
+<p>We observe that for all cases the Newton method converges in approximately three to four steps, which shows the quadratic convergence of the Newton method with a full step length <picture><source srcset="form_4170_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha = 1$" src="form_4170.png"/></picture>. However, be aware that for a badly chosen initial guess <picture><source srcset="form_6329_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h^0$" src="form_6329.png"/></picture>, the Newton method will also diverge quadratically. Usually if you do not have an appropriate initial guess, you try a few damped Newton steps with a reduced step length <picture><source srcset="form_6343_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha &lt; 1$" src="form_6343.png"/></picture> until the Newton step is again in the quadratic convergence domain. This damping and relaxation of the Newton step length truly requires a more sophisticated implementation of the Newton method, which we designate to you as a possible extension of the tutorial.</p>
 <p>Furthermore, we see that the number of CG iterations is approximately constant with successive mesh refinements and an increasing number of DoFs. This is of course due to the geometric multigrid preconditioner and similar to the observations made in other tutorials that use this method, e.g., <a class="el" href="step_16.html">step-16</a> and <a class="el" href="step_37.html">step-37</a>. Just to give an example, in the three-dimensional case after five refinements, we have approximately 14.7 million distributed DoFs with fourth-order Lagrangian finite elements, but the number of CG iterations is still less than ten.</p>
 <p>In addition, there is one more very useful optimization that we applied and that should be mentioned here. In the <code>compute_update()</code> function we explicitly reset the vector holding the Newton update before passing it as the output vector to the solver. In that case we use a starting value of zero for the CG method, which is more suitable than the previous Newton update, the actual content of the <code>newton_update</code> before resetting, and thus reduces the number of CG iterations by a few steps.</p>
 <p><a class="anchor" id="Possibilitiesforextensions"></a></p><h3>Possibilities for extensions</h3>
 <p>A couple of possible extensions are available concerning minor updates to the present code as well as a deeper numerical investigation of the Gelfand problem.</p>
 <p><a class="anchor" id="MoresophisticatedNewtoniteration"></a></p><h4>More sophisticated Newton iteration</h4>
 <p>Beside a step size controlled version of the Newton iteration as mentioned already in <a class="el" href="step_15.html">step-15</a> (and actually implemented, with many more bells and whistles, in <a class="el" href="step_77.html">step-77</a>), one could also implement a more flexible stopping criterion for the Newton iteration. For example one could replace the fixed tolerances for the residual <code>TOLf</code> and for the Newton updated <code>TOLx</code> and implement a mixed error control with a given absolute and relative tolerance, such that the Newton iteration exits with success as, e.g.,  </p><p class="formulaDsp">
-<picture><source srcset="form_6356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_6344_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \|F(u_h^{n+1})\| \leq \texttt{RelTol} \|u_h^{n+1}\| + \texttt{AbsTol}.
-\end{align*}" src="form_6356.png"/></picture>
+\end{align*}" src="form_6344.png"/></picture>
 </p>
 <p> For more advanced applications with many nonlinear systems to solve, for example at each time step for a time-dependent problem, it turns out that it is not necessary to set up and assemble the Jacobian anew at every single Newton step or even for each time step. Instead, the existing Jacobian from a previous step can be used for the Newton iteration. The Jacobian is then only rebuilt if, for example, the Newton iteration converges too slowly. Such an idea yields a <a href="https://en.wikipedia.org/wiki/Quasi-Newton_method">quasi-Newton method</a>. Admittedly, when using the matrix-free framework, the assembly of the Jacobian is omitted anyway, but with in this way one can try to optimize the reassembly of the geometric multigrid preconditioner. Remember that each time the solution from the old Newton step must be distributed to all levels and the mutligrid preconditioner must be reinitialized.</p>
 <p><a class="anchor" id="Parallelscalabilityandthreadparallelism"></a></p><h4>Parallel scalability and thread parallelism</h4>
@@ -1469,9 +1469,9 @@
 <p><a class="anchor" id="Comparisontomatrixbasedmethods"></a></p><h4>Comparison to matrix-based methods</h4>
 <p>Analogously to <a class="el" href="step_50.html">step-50</a> and the mentioned possible extension of <a class="el" href="step_75.html">step-75</a>, you can convince yourself which method is faster.</p>
 <p><a class="anchor" id="Eigenvalueproblem"></a></p><h4>Eigenvalue problem</h4>
-<p>One can consider the corresponding eigenvalue problem, which is called <a href="https://en.wikipedia.org/wiki/Liouville%E2%80%93Bratu%E2%80%93Gelfand_equation">Bratu problem</a>. For example, if we define a fixed eigenvalue <picture><source srcset="form_6357_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda\in[0,6]$" src="form_6357.png"/></picture>, we can compute the corresponding discrete eigenfunction. You will notice that the number of Newton steps will increase with increasing <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture>. To reduce the number of Newton steps you can use the following trick: start from a certain <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture>, compute the eigenfunction, increase <picture><source srcset="form_6358_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda=\lambda +
-\delta_\lambda$" src="form_6358.png"/></picture>, and then use the previous solution as an initial guess for the Newton iteration &ndash; this approach is called a "continuation
-method". In the end you can plot the <picture><source srcset="form_3502_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Omega)$" src="form_3502.png"/></picture>-norm over the eigenvalue <picture><source srcset="form_6359_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda \mapsto \|u_h\|_{H^1(\Omega)}$" src="form_6359.png"/></picture>. What do you observe for further increasing <picture><source srcset="form_6360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda&gt;7$" src="form_6360.png"/></picture>?</p>
+<p>One can consider the corresponding eigenvalue problem, which is called <a href="https://en.wikipedia.org/wiki/Liouville%E2%80%93Bratu%E2%80%93Gelfand_equation">Bratu problem</a>. For example, if we define a fixed eigenvalue <picture><source srcset="form_6345_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda\in[0,6]$" src="form_6345.png"/></picture>, we can compute the corresponding discrete eigenfunction. You will notice that the number of Newton steps will increase with increasing <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture>. To reduce the number of Newton steps you can use the following trick: start from a certain <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture>, compute the eigenfunction, increase <picture><source srcset="form_6346_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda=\lambda +
+\delta_\lambda$" src="form_6346.png"/></picture>, and then use the previous solution as an initial guess for the Newton iteration &ndash; this approach is called a "continuation
+method". In the end you can plot the <picture><source srcset="form_3510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1(\Omega)$" src="form_3510.png"/></picture>-norm over the eigenvalue <picture><source srcset="form_6347_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda \mapsto \|u_h\|_{H^1(\Omega)}$" src="form_6347.png"/></picture>. What do you observe for further increasing <picture><source srcset="form_6348_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda&gt;7$" src="form_6348.png"/></picture>?</p>
 <p><a class="anchor" id="PlainProg"></a> </p><h1>The plain program</h1>
 <div class="fragment"><div class="line"><span class="comment">/* ---------------------------------------------------------------------</span></div>
 <div class="line"><span class="comment"> *</span></div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_67.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_67.html	2024-03-17 21:57:48.643266414 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_67.html	2024-03-17 21:57:48.643266414 +0000
@@ -144,15 +144,15 @@
 <p>This tutorial program solves the Euler equations of fluid dynamics using an explicit time integrator with the matrix-free framework applied to a high-order discontinuous Galerkin discretization in space. For details about the Euler system and an alternative implicit approach, we also refer to the <a class="el" href="step_33.html">step-33</a> tutorial program. You might also want to look at <a class="el" href="step_69.html">step-69</a> for an alternative approach to solving these equations.</p>
 <p><a class="anchor" id="TheEulerequations"></a></p><h3>The Euler equations</h3>
 <p>The Euler equations are a conservation law, describing the motion of a compressible inviscid gas,  </p><p class="formulaDsp">
-<picture><source srcset="form_6397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6349_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{\partial \mathbf{w}}{\partial t} + \nabla \cdot \mathbf{F}(\mathbf{w}) =
 \mathbf{G}(\mathbf w),
-\]" src="form_6397.png"/></picture>
+\]" src="form_6349.png"/></picture>
 </p>
-<p> where the <picture><source srcset="form_6398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d+2$" src="form_6398.png"/></picture> components of the solution vector are <picture><source srcset="form_6399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}=(\rho, \rho
-u_1,\ldots,\rho u_d,E)^{\mathrm T}$" src="form_6399.png"/></picture>. Here, <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture> denotes the fluid density, <picture><source srcset="form_6400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u}=(u_1,\ldots, u_d)^\mathrm T$" src="form_6400.png"/></picture> the fluid velocity, and <picture><source srcset="form_1117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E$" src="form_1117.png"/></picture> the energy density of the gas. The velocity is not directly solved for, but rather the variable <picture><source srcset="form_6401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho \mathbf{u}$" src="form_6401.png"/></picture>, the linear momentum (since this is the conserved quantity).</p>
-<p>The Euler flux function, a <picture><source srcset="form_6402_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(d+2)\times d$" src="form_6402.png"/></picture> matrix, is defined as  </p><p class="formulaDsp">
-<picture><source srcset="form_6403_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where the <picture><source srcset="form_6350_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d+2$" src="form_6350.png"/></picture> components of the solution vector are <picture><source srcset="form_6351_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}=(\rho, \rho
+u_1,\ldots,\rho u_d,E)^{\mathrm T}$" src="form_6351.png"/></picture>. Here, <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture> denotes the fluid density, <picture><source srcset="form_6352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u}=(u_1,\ldots, u_d)^\mathrm T$" src="form_6352.png"/></picture> the fluid velocity, and <picture><source srcset="form_1123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E$" src="form_1123.png"/></picture> the energy density of the gas. The velocity is not directly solved for, but rather the variable <picture><source srcset="form_6353_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho \mathbf{u}$" src="form_6353.png"/></picture>, the linear momentum (since this is the conserved quantity).</p>
+<p>The Euler flux function, a <picture><source srcset="form_6354_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(d+2)\times d$" src="form_6354.png"/></picture> matrix, is defined as  </p><p class="formulaDsp">
+<picture><source srcset="form_6355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf F(\mathbf w)
   =
   \begin{pmatrix}
@@ -160,10 +160,10 @@
   \rho \mathbf{u} \otimes \mathbf{u} + \mathbb{I}p\\
   (E+p)\mathbf{u}
   \end{pmatrix}
-\]" src="form_6403.png"/></picture>
+\]" src="form_6355.png"/></picture>
 </p>
-<p> with <picture><source srcset="form_4886_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{I}$" src="form_4886.png"/></picture> the <picture><source srcset="form_6404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\times d$" src="form_6404.png"/></picture> identity matrix and <picture><source srcset="form_2166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\otimes$" src="form_2166.png"/></picture> the outer product; its components denote the mass, momentum, and energy fluxes, respectively. The right hand side forcing is given by  </p><p class="formulaDsp">
-<picture><source srcset="form_6405_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> with <picture><source srcset="form_4870_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{I}$" src="form_4870.png"/></picture> the <picture><source srcset="form_6356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d\times d$" src="form_6356.png"/></picture> identity matrix and <picture><source srcset="form_2174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\otimes$" src="form_2174.png"/></picture> the outer product; its components denote the mass, momentum, and energy fluxes, respectively. The right hand side forcing is given by  </p><p class="formulaDsp">
+<picture><source srcset="form_6357_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf G(\mathbf w)
   =
   \begin{pmatrix}
@@ -171,53 +171,53 @@
   \rho\mathbf{g}\\
   \rho \mathbf{u} \cdot \mathbf{g}
   \end{pmatrix},
-\]" src="form_6405.png"/></picture>
+\]" src="form_6357.png"/></picture>
 </p>
-<p> where the vector <picture><source srcset="form_6406_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf g$" src="form_6406.png"/></picture> denotes the direction and magnitude of gravity. It could, however, also denote any other external force per unit mass that is acting on the fluid. (Think, for example, of the electrostatic forces exerted by an external electric field on charged particles.)</p>
-<p>The three blocks of equations, the second involving <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> components, describe the conservation of mass, momentum, and energy. The pressure is not a solution variable but needs to be expressed through a "closure relationship" by the other variables; we here choose the relationship appropriate for a gas with molecules composed of two atoms, which at moderate temperatures is given by <picture><source srcset="form_6407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p=(\gamma - 1) \left(E-\frac 12 \rho
-\mathbf{u}\cdot \mathbf{u}\right)$" src="form_6407.png"/></picture> with the constant <picture><source srcset="form_6408_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma = 1.4$" src="form_6408.png"/></picture>.</p>
+<p> where the vector <picture><source srcset="form_6358_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf g$" src="form_6358.png"/></picture> denotes the direction and magnitude of gravity. It could, however, also denote any other external force per unit mass that is acting on the fluid. (Think, for example, of the electrostatic forces exerted by an external electric field on charged particles.)</p>
+<p>The three blocks of equations, the second involving <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture> components, describe the conservation of mass, momentum, and energy. The pressure is not a solution variable but needs to be expressed through a "closure relationship" by the other variables; we here choose the relationship appropriate for a gas with molecules composed of two atoms, which at moderate temperatures is given by <picture><source srcset="form_6359_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p=(\gamma - 1) \left(E-\frac 12 \rho
+\mathbf{u}\cdot \mathbf{u}\right)$" src="form_6359.png"/></picture> with the constant <picture><source srcset="form_6360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma = 1.4$" src="form_6360.png"/></picture>.</p>
 <p><a class="anchor" id="HighorderdiscontinuousGalerkindiscretization"></a></p><h3>High-order discontinuous Galerkin discretization</h3>
 <p>For spatial discretization, we use a high-order discontinuous Galerkin (DG) discretization, using a solution expansion of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_6410_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6361_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf{w}_h(\mathbf{x}, t) =
 \sum_{j=1}^{n_\mathbf{dofs}} \boldsymbol{\varphi}_j(\mathbf{x}) {w}_j(t).
-\]" src="form_6410.png"/></picture>
+\]" src="form_6361.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_6411_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\varphi}_j$" src="form_6411.png"/></picture> denotes the <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>th basis function, written in vector form with separate shape functions for the different components and letting <picture><source srcset="form_6413_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_j(t)$" src="form_6413.png"/></picture> go through the density, momentum, and energy variables, respectively. In this form, the space dependence is contained in the shape functions and the time dependence in the unknown coefficients <picture><source srcset="form_6414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_j$" src="form_6414.png"/></picture>. As opposed to the continuous finite element method where some shape functions span across element boundaries, the shape functions are local to a single element in DG methods, with a discontinuity from one element to the next. The connection of the solution from one cell to its neighbors is instead imposed by the numerical fluxes specified below. This allows for some additional flexibility, for example to introduce directionality in the numerical method by, e.g., upwinding.</p>
+<p> Here, <picture><source srcset="form_6362_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\varphi}_j$" src="form_6362.png"/></picture> denotes the <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture>th basis function, written in vector form with separate shape functions for the different components and letting <picture><source srcset="form_6363_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_j(t)$" src="form_6363.png"/></picture> go through the density, momentum, and energy variables, respectively. In this form, the space dependence is contained in the shape functions and the time dependence in the unknown coefficients <picture><source srcset="form_6364_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_j$" src="form_6364.png"/></picture>. As opposed to the continuous finite element method where some shape functions span across element boundaries, the shape functions are local to a single element in DG methods, with a discontinuity from one element to the next. The connection of the solution from one cell to its neighbors is instead imposed by the numerical fluxes specified below. This allows for some additional flexibility, for example to introduce directionality in the numerical method by, e.g., upwinding.</p>
 <p>DG methods are popular methods for solving problems of transport character because they combine low dispersion errors with controllable dissipation on barely resolved scales. This makes them particularly attractive for simulation in the field of fluid dynamics where a wide range of active scales needs to be represented and inadequately resolved features are prone to disturb the important well-resolved features. Furthermore, high-order DG methods are well-suited for modern hardware with the right implementation. At the same time, DG methods are no silver bullet. In particular when the solution develops discontinuities (shocks), as is typical for the Euler equations in some flow regimes, high-order DG methods tend to oscillatory solutions, like all high-order methods when not using flux- or slope-limiters. This is a consequence of <a href="https://en.wikipedia.org/wiki/Godunov%27s_theorem">Godunov's theorem</a> that states that any total variation limited (TVD) scheme that is linear (like a basic DG discretization) can at most be first-order accurate. Put differently, since DG methods aim for higher order accuracy, they cannot be TVD on solutions that develop shocks. Even though some communities claim that the numerical flux in DG methods can control dissipation, this is of limited value unless <b>all</b> shocks in a problem align with cell boundaries. Any shock that passes through the interior of cells will again produce oscillatory components due to the high-order polynomials. In the finite element and DG communities, there exist a number of different approaches to deal with shocks, for example the introduction of artificial diffusion on troubled cells (using a troubled-cell indicator based e.g. on a modal decomposition of the solution), a switch to dissipative low-order finite volume methods on a subgrid, or the addition of some limiting procedures. Given the ample possibilities in this context, combined with the considerable implementation effort, we here refrain from the regime of the Euler equations with pronounced shocks, and rather concentrate on the regime of subsonic flows with wave-like phenomena. For a method that works well with shocks (but is more expensive per unknown), we refer to the <a class="el" href="step_69.html">step-69</a> tutorial program.</p>
-<p>For the derivation of the DG formulation, we multiply the Euler equations with test functions <picture><source srcset="form_2461_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}$" src="form_2461.png"/></picture> and integrate over an individual cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, which gives  </p><p class="formulaDsp">
-<picture><source srcset="form_6415_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>For the derivation of the DG formulation, we multiply the Euler equations with test functions <picture><source srcset="form_2468_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}$" src="form_2468.png"/></picture> and integrate over an individual cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, which gives  </p><p class="formulaDsp">
+<picture><source srcset="form_6365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \left(\mathbf{v}, \frac{\partial \mathbf{w}}{\partial t}\right)_{K}
 + \left(\mathbf{v}, \nabla \cdot \mathbf{F}(\mathbf{w})\right)_{K} =
 \left(\mathbf{v},\mathbf{G}(\mathbf w)\right)_{K}.
-\]" src="form_6415.png"/></picture>
+\]" src="form_6365.png"/></picture>
 </p>
 <p>We then integrate the second term by parts, moving the divergence from the solution slot to the test function slot, and producing an integral over the element boundary:  </p><p class="formulaDsp">
-<picture><source srcset="form_6416_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6366_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \left(\mathbf{v}, \frac{\partial \mathbf{w}}{\partial t}\right)_{K}
 - \left(\nabla \mathbf{v}, \mathbf{F}(\mathbf{w})\right)_{K}
 + \left&lt;\mathbf{v}, \mathbf{n} \cdot \widehat{\mathbf{F}}(\mathbf{w})
 \right&gt;_{\partial K} =
 \left(\mathbf{v},\mathbf{G}(\mathbf w)\right)_{K}.
-\]" src="form_6416.png"/></picture>
+\]" src="form_6366.png"/></picture>
 </p>
-<p> In the surface integral, we have replaced the term <picture><source srcset="form_6417_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{F}(\mathbf w)$" src="form_6417.png"/></picture> by the term <picture><source srcset="form_6418_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widehat{\mathbf{F}}(\mathbf w)$" src="form_6418.png"/></picture>, the numerical flux. The role of the numerical flux is to connect the solution on neighboring elements and weakly impose continuity of the solution. This ensures that the global coupling of the PDE is reflected in the discretization, despite independent basis functions on the cells. The connectivity to the neighbor is included by defining the numerical flux as a function <picture><source srcset="form_6419_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widehat{\mathbf{F}}(\mathbf w^-,
-\mathbf w^+)$" src="form_6419.png"/></picture> of the solution from both sides of an interior face, <picture><source srcset="form_6420_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf
-w^-$" src="form_6420.png"/></picture> and <picture><source srcset="form_4242_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf w^+$" src="form_4242.png"/></picture>. A basic property we require is that the numerical flux needs to be <b>conservative</b>. That is, we want all information (i.e., mass, momentum, and energy) that leaves a cell over a face to enter the neighboring cell in its entirety and vice versa. This can be expressed as <picture><source srcset="form_6421_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widehat{\mathbf{F}}(\mathbf w^-, \mathbf w^+) =
-\widehat{\mathbf{F}}(\mathbf w^+, \mathbf w^-)$" src="form_6421.png"/></picture>, meaning that the numerical flux evaluates to the same result from either side. Combined with the fact that the numerical flux is multiplied by the unit outer normal vector on the face under consideration, which points in opposite direction from the two sides, we see that the conservation is fulfilled. An alternative point of view of the numerical flux is as a single-valued intermediate state that links the solution weakly from both sides.</p>
-<p>There is a large number of numerical flux functions available, also called Riemann solvers. For the Euler equations, there exist so-called exact Riemann solvers &ndash; meaning that the states from both sides are combined in a way that is consistent with the Euler equations along a discontinuity &ndash; and approximate Riemann solvers, which violate some physical properties and rely on other mechanisms to render the scheme accurate overall. Approximate Riemann solvers have the advantage of being cheaper to compute. Most flux functions have their origin in the finite volume community, which are similar to DG methods with polynomial degree 0 within the cells (called volumes). As the volume integral of the Euler operator <picture><source srcset="form_240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{F}$" src="form_240.png"/></picture> would disappear for constant solution and test functions, the numerical flux must fully represent the physical operator, explaining why there has been a large body of research in that community. For DG methods, consistency is guaranteed by higher order polynomials within the cells, making the numerical flux less of an issue and usually affecting only the convergence rate, e.g., whether the solution converges as <picture><source srcset="form_6422_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O(h^p)$" src="form_6422.png"/></picture>, <picture><source srcset="form_6423_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O(h^{p+1/2})$" src="form_6423.png"/></picture> or <picture><source srcset="form_6424_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal
-O(h^{p+1})$" src="form_6424.png"/></picture> in the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm for polynomials of degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>. The numerical flux can thus be seen as a mechanism to select more advantageous dissipation/dispersion properties or regarding the extremal eigenvalue of the discretized and linearized operator, which affect the maximal admissible time step size in explicit time integrators.</p>
+<p> In the surface integral, we have replaced the term <picture><source srcset="form_6367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{F}(\mathbf w)$" src="form_6367.png"/></picture> by the term <picture><source srcset="form_6368_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widehat{\mathbf{F}}(\mathbf w)$" src="form_6368.png"/></picture>, the numerical flux. The role of the numerical flux is to connect the solution on neighboring elements and weakly impose continuity of the solution. This ensures that the global coupling of the PDE is reflected in the discretization, despite independent basis functions on the cells. The connectivity to the neighbor is included by defining the numerical flux as a function <picture><source srcset="form_6369_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widehat{\mathbf{F}}(\mathbf w^-,
+\mathbf w^+)$" src="form_6369.png"/></picture> of the solution from both sides of an interior face, <picture><source srcset="form_6370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf
+w^-$" src="form_6370.png"/></picture> and <picture><source srcset="form_4328_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf w^+$" src="form_4328.png"/></picture>. A basic property we require is that the numerical flux needs to be <b>conservative</b>. That is, we want all information (i.e., mass, momentum, and energy) that leaves a cell over a face to enter the neighboring cell in its entirety and vice versa. This can be expressed as <picture><source srcset="form_6371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widehat{\mathbf{F}}(\mathbf w^-, \mathbf w^+) =
+\widehat{\mathbf{F}}(\mathbf w^+, \mathbf w^-)$" src="form_6371.png"/></picture>, meaning that the numerical flux evaluates to the same result from either side. Combined with the fact that the numerical flux is multiplied by the unit outer normal vector on the face under consideration, which points in opposite direction from the two sides, we see that the conservation is fulfilled. An alternative point of view of the numerical flux is as a single-valued intermediate state that links the solution weakly from both sides.</p>
+<p>There is a large number of numerical flux functions available, also called Riemann solvers. For the Euler equations, there exist so-called exact Riemann solvers &ndash; meaning that the states from both sides are combined in a way that is consistent with the Euler equations along a discontinuity &ndash; and approximate Riemann solvers, which violate some physical properties and rely on other mechanisms to render the scheme accurate overall. Approximate Riemann solvers have the advantage of being cheaper to compute. Most flux functions have their origin in the finite volume community, which are similar to DG methods with polynomial degree 0 within the cells (called volumes). As the volume integral of the Euler operator <picture><source srcset="form_240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{F}$" src="form_240.png"/></picture> would disappear for constant solution and test functions, the numerical flux must fully represent the physical operator, explaining why there has been a large body of research in that community. For DG methods, consistency is guaranteed by higher order polynomials within the cells, making the numerical flux less of an issue and usually affecting only the convergence rate, e.g., whether the solution converges as <picture><source srcset="form_6372_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O(h^p)$" src="form_6372.png"/></picture>, <picture><source srcset="form_6373_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal O(h^{p+1/2})$" src="form_6373.png"/></picture> or <picture><source srcset="form_6374_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal
+O(h^{p+1})$" src="form_6374.png"/></picture> in the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm for polynomials of degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>. The numerical flux can thus be seen as a mechanism to select more advantageous dissipation/dispersion properties or regarding the extremal eigenvalue of the discretized and linearized operator, which affect the maximal admissible time step size in explicit time integrators.</p>
 <p>In this tutorial program, we implement two variants of fluxes that can be controlled via a switch in the program (of course, it would be easy to make them a run time parameter controlled via an input file). The first flux is the local Lax&ndash;Friedrichs flux  </p><p class="formulaDsp">
-<picture><source srcset="form_6425_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6375_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \hat{\mathbf{F}}(\mathbf{w}^-,\mathbf{w}^+) =
 \frac{\mathbf{F}(\mathbf{w}^-)+\mathbf{F}(\mathbf{w}^+)}{2} +
    \frac{\lambda}{2}\left[\mathbf{w}^--\mathbf{w}^+\right]\otimes
    \mathbf{n^-}.
-\]" src="form_6425.png"/></picture>
+\]" src="form_6375.png"/></picture>
 </p>
-<p>In the original definition of the Lax&ndash;Friedrichs flux, a factor <picture><source srcset="form_6426_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda =
-\max\left(\|\mathbf{u}^-\|+c^-, \|\mathbf{u}^+\|+c^+\right)$" src="form_6426.png"/></picture> is used (corresponding to the maximal speed at which information is moving on the two sides of the interface), stating that the difference between the two states, <picture><source srcset="form_6427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\![\mathbf{w}]\!]$" src="form_6427.png"/></picture> is penalized by the largest eigenvalue in the Euler flux, which is <picture><source srcset="form_6428_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf{u}\|+c$" src="form_6428.png"/></picture>, where <picture><source srcset="form_6429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c=\sqrt{\gamma p / \rho}$" src="form_6429.png"/></picture> is the speed of sound. In the implementation below, we modify the penalty term somewhat, given that the penalty is of approximate nature anyway. We use  </p><p class="formulaDsp">
-<picture><source srcset="form_6430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>In the original definition of the Lax&ndash;Friedrichs flux, a factor <picture><source srcset="form_6376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda =
+\max\left(\|\mathbf{u}^-\|+c^-, \|\mathbf{u}^+\|+c^+\right)$" src="form_6376.png"/></picture> is used (corresponding to the maximal speed at which information is moving on the two sides of the interface), stating that the difference between the two states, <picture><source srcset="form_6377_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\![\mathbf{w}]\!]$" src="form_6377.png"/></picture> is penalized by the largest eigenvalue in the Euler flux, which is <picture><source srcset="form_6378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf{u}\|+c$" src="form_6378.png"/></picture>, where <picture><source srcset="form_6379_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c=\sqrt{\gamma p / \rho}$" src="form_6379.png"/></picture> is the speed of sound. In the implementation below, we modify the penalty term somewhat, given that the penalty is of approximate nature anyway. We use  </p><p class="formulaDsp">
+<picture><source srcset="form_6380_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 \lambda
 &amp;=
 \frac{1}{2}\max\left(\sqrt{\|\mathbf{u^-}\|^2+(c^-)^2},
@@ -226,52 +226,52 @@
 &amp;=
 \frac{1}{2}\sqrt{\max\left(\|\mathbf{u^-}\|^2+(c^-)^2,
                            \|\mathbf{u}^+\|^2+(c^+)^2\right)}.
-\end{align*}" src="form_6430.png"/></picture>
+\end{align*}" src="form_6380.png"/></picture>
 </p>
-<p> The additional factor <picture><source srcset="form_3079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 12$" src="form_3079.png"/></picture> reduces the penalty strength (which results in a reduced negative real part of the eigenvalues, and thus increases the admissible time step size). Using the squares within the sums allows us to reduce the number of expensive square root operations, which is 4 for the original Lax&ndash;Friedrichs definition, to a single one. This simplification leads to at most a factor of 2 in the reduction of the parameter <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture>, since <picture><source srcset="form_6431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf{u}\|^2+c^2 \leq
+<p> The additional factor <picture><source srcset="form_3007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 12$" src="form_3007.png"/></picture> reduces the penalty strength (which results in a reduced negative real part of the eigenvalues, and thus increases the admissible time step size). Using the squares within the sums allows us to reduce the number of expensive square root operations, which is 4 for the original Lax&ndash;Friedrichs definition, to a single one. This simplification leads to at most a factor of 2 in the reduction of the parameter <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture>, since <picture><source srcset="form_6381_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf{u}\|^2+c^2 \leq
 \|\mathbf{u}\|^2+2 c |\mathbf{u}\| + c^2 = \left(\|\mathbf{u}\|+c\right)^2
-\leq 2 \left(\|\mathbf{u}\|^2+c^2\right)$" src="form_6431.png"/></picture>, with the last inequality following from Young's inequality.</p>
-<p>The second numerical flux is one proposed by Harten, Lax and van Leer, called the HLL flux. It takes the different directions of propagation of the Euler equations into account, depending on the speed of sound. It utilizes some intermediate states <picture><source srcset="form_6432_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{\mathbf{u}}$" src="form_6432.png"/></picture> and <picture><source srcset="form_6433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{c}$" src="form_6433.png"/></picture> to define the two branches <picture><source srcset="form_6434_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s^\mathrm{p} = \max\left(0, \bar{\mathbf{u}}\cdot \mathbf{n} +
-\bar{c}\right)$" src="form_6434.png"/></picture> and <picture><source srcset="form_6435_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s^\mathrm{n} = \min\left(0, \bar{\mathbf{u}}\cdot
-\mathbf{n} - \bar{c}\right)$" src="form_6435.png"/></picture>. From these branches, one then defines the flux  </p><p class="formulaDsp">
-<picture><source srcset="form_6436_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+\leq 2 \left(\|\mathbf{u}\|^2+c^2\right)$" src="form_6381.png"/></picture>, with the last inequality following from Young's inequality.</p>
+<p>The second numerical flux is one proposed by Harten, Lax and van Leer, called the HLL flux. It takes the different directions of propagation of the Euler equations into account, depending on the speed of sound. It utilizes some intermediate states <picture><source srcset="form_6382_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{\mathbf{u}}$" src="form_6382.png"/></picture> and <picture><source srcset="form_6383_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{c}$" src="form_6383.png"/></picture> to define the two branches <picture><source srcset="form_6384_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s^\mathrm{p} = \max\left(0, \bar{\mathbf{u}}\cdot \mathbf{n} +
+\bar{c}\right)$" src="form_6384.png"/></picture> and <picture><source srcset="form_6385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s^\mathrm{n} = \min\left(0, \bar{\mathbf{u}}\cdot
+\mathbf{n} - \bar{c}\right)$" src="form_6385.png"/></picture>. From these branches, one then defines the flux  </p><p class="formulaDsp">
+<picture><source srcset="form_6386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \hat{\mathbf{F}}(\mathbf{w}^-,\mathbf{w}^+) =
 \frac{s^\mathrm{p} \mathbf{F}(\mathbf{w}^-)-s^\mathrm{n} \mathbf{F}(\mathbf{w}^+)}
                    {s^\mathrm p - s^\mathrm{n} } +
 \frac{s^\mathrm{p} s^\mathrm{n}}{s^\mathrm{p}-s^\mathrm{n}}
 \left[\mathbf{w}^--\mathbf{w}^+\right]\otimes \mathbf{n^-}.
-\]" src="form_6436.png"/></picture>
+\]" src="form_6386.png"/></picture>
 </p>
-<p> Regarding the definition of the intermediate state <picture><source srcset="form_6432_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{\mathbf{u}}$" src="form_6432.png"/></picture> and <picture><source srcset="form_6433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{c}$" src="form_6433.png"/></picture>, several variants have been proposed. The variant originally proposed uses a density-averaged definition of the velocity, <picture><source srcset="form_6437_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{\mathbf{u}}
+<p> Regarding the definition of the intermediate state <picture><source srcset="form_6382_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{\mathbf{u}}$" src="form_6382.png"/></picture> and <picture><source srcset="form_6383_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{c}$" src="form_6383.png"/></picture>, several variants have been proposed. The variant originally proposed uses a density-averaged definition of the velocity, <picture><source srcset="form_6387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{\mathbf{u}}
 = \frac{\sqrt{\rho^-} \mathbf{u}^- + \sqrt{\rho^+}\mathbf{u}^+}{\sqrt{\rho^-}
-+ \sqrt{\rho^+}}$" src="form_6437.png"/></picture>. Since we consider the Euler equations without shocks, we simply use arithmetic means, <picture><source srcset="form_6438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{\mathbf{u}} = \frac{\mathbf{u}^- +
-\mathbf{u}^+}{2}$" src="form_6438.png"/></picture> and <picture><source srcset="form_6439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{c} = \frac{c^- + c^+}{2}$" src="form_6439.png"/></picture>, with <picture><source srcset="form_6440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c^{\pm} =
-\sqrt{\gamma p^{\pm} / \rho^{\pm}}$" src="form_6440.png"/></picture>, in this tutorial program, and leave other variants to a possible extension. We also note that the HLL flux has been extended in the literature to the so-called HLLC flux, where C stands for the ability to represent contact discontinuities.</p>
-<p>At the boundaries with no neighboring state <picture><source srcset="form_6441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}^+$" src="form_6441.png"/></picture> available, it is common practice to deduce suitable exterior values from the boundary conditions (see the general literature on DG methods for details). In this tutorial program, we consider three types of boundary conditions, namely <b>inflow boundary conditions</b> where all components are prescribed,  </p><p class="formulaDsp">
-<picture><source srcset="form_6442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
++ \sqrt{\rho^+}}$" src="form_6387.png"/></picture>. Since we consider the Euler equations without shocks, we simply use arithmetic means, <picture><source srcset="form_6388_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{\mathbf{u}} = \frac{\mathbf{u}^- +
+\mathbf{u}^+}{2}$" src="form_6388.png"/></picture> and <picture><source srcset="form_6389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{c} = \frac{c^- + c^+}{2}$" src="form_6389.png"/></picture>, with <picture><source srcset="form_6390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c^{\pm} =
+\sqrt{\gamma p^{\pm} / \rho^{\pm}}$" src="form_6390.png"/></picture>, in this tutorial program, and leave other variants to a possible extension. We also note that the HLL flux has been extended in the literature to the so-called HLLC flux, where C stands for the ability to represent contact discontinuities.</p>
+<p>At the boundaries with no neighboring state <picture><source srcset="form_6391_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{w}^+$" src="form_6391.png"/></picture> available, it is common practice to deduce suitable exterior values from the boundary conditions (see the general literature on DG methods for details). In this tutorial program, we consider three types of boundary conditions, namely <b>inflow boundary conditions</b> where all components are prescribed,  </p><p class="formulaDsp">
+<picture><source srcset="form_6392_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf{w}^+ = \begin{pmatrix} \rho_\mathrm{D}(t)\\
 (\rho \mathbf u)_{\mathrm D}(t) \\ E_\mathrm{D}(t)\end{pmatrix} \quad
  \text{(Dirichlet)},
-\]" src="form_6442.png"/></picture>
+\]" src="form_6392.png"/></picture>
 </p>
 <p> <b>subsonic outflow boundaries</b>, where we do not prescribe exterior solutions as the flow field is leaving the domain and use the interior values instead; we still need to prescribe the energy as there is one incoming characteristic left in the Euler flux,  </p><p class="formulaDsp">
-<picture><source srcset="form_6443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf{w}^+ = \begin{pmatrix} \rho^-\\
 (\rho \mathbf u)^- \\ E_\mathrm{D}(t)\end{pmatrix} \quad
  \text{(mixed Neumann/Dirichlet)},
-\]" src="form_6443.png"/></picture>
+\]" src="form_6393.png"/></picture>
 </p>
 <p> and <b>wall boundary condition</b> which describe a no-penetration configuration:  </p><p class="formulaDsp">
-<picture><source srcset="form_6444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf{w}^+ = \begin{pmatrix} \rho^-\\
 (\rho \mathbf u)^- - 2 [(\rho \mathbf u)^-\cdot \mathbf n] \mathbf{n}
  \\ E^-\end{pmatrix}.
-\]" src="form_6444.png"/></picture>
+\]" src="form_6394.png"/></picture>
 </p>
-<p>The polynomial expansion of the solution is finally inserted to the weak form and test functions are replaced by the basis functions. This gives a discrete in space, continuous in time nonlinear system with a finite number of unknown coefficient values <picture><source srcset="form_6414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_j$" src="form_6414.png"/></picture>, <picture><source srcset="form_6445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=1,\ldots,n_\text{dofs}$" src="form_6445.png"/></picture>. Regarding the choice of the polynomial degree in the DG method, there is no consensus in literature as of 2019 as to what polynomial degrees are most efficient and the decision is problem-dependent. Higher order polynomials ensure better convergence rates and are thus superior for moderate to high accuracy requirements for <b>smooth</b> solutions. At the same time, the volume-to-surface ratio of where degrees of freedom are located, increases with higher degrees, and this makes the effect of the numerical flux weaker, typically reducing dissipation. However, in most of the cases the solution is not smooth, at least not compared to the resolution that can be afforded. This is true for example in incompressible fluid dynamics, compressible fluid dynamics, and the related topic of wave propagation. In this pre-asymptotic regime, the error is approximately proportional to the numerical resolution, and other factors such as dispersion errors or the dissipative behavior become more important. Very high order methods are often ruled out because they come with more restrictive CFL conditions measured against the number of unknowns, and they are also not as flexible when it comes to representing complex geometries. Therefore, polynomial degrees between two and six are most popular in practice, see e.g. the efficiency evaluation in <b>[FehnWallKronbichler2019]</b> and references cited therein.</p>
+<p>The polynomial expansion of the solution is finally inserted to the weak form and test functions are replaced by the basis functions. This gives a discrete in space, continuous in time nonlinear system with a finite number of unknown coefficient values <picture><source srcset="form_6364_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_j$" src="form_6364.png"/></picture>, <picture><source srcset="form_6395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j=1,\ldots,n_\text{dofs}$" src="form_6395.png"/></picture>. Regarding the choice of the polynomial degree in the DG method, there is no consensus in literature as of 2019 as to what polynomial degrees are most efficient and the decision is problem-dependent. Higher order polynomials ensure better convergence rates and are thus superior for moderate to high accuracy requirements for <b>smooth</b> solutions. At the same time, the volume-to-surface ratio of where degrees of freedom are located, increases with higher degrees, and this makes the effect of the numerical flux weaker, typically reducing dissipation. However, in most of the cases the solution is not smooth, at least not compared to the resolution that can be afforded. This is true for example in incompressible fluid dynamics, compressible fluid dynamics, and the related topic of wave propagation. In this pre-asymptotic regime, the error is approximately proportional to the numerical resolution, and other factors such as dispersion errors or the dissipative behavior become more important. Very high order methods are often ruled out because they come with more restrictive CFL conditions measured against the number of unknowns, and they are also not as flexible when it comes to representing complex geometries. Therefore, polynomial degrees between two and six are most popular in practice, see e.g. the efficiency evaluation in <b>[FehnWallKronbichler2019]</b> and references cited therein.</p>
 <p><a class="anchor" id="Explicittimeintegration"></a></p><h3>Explicit time integration</h3>
 <p>To discretize in time, we slightly rearrange the weak form and sum over all cells:  </p><p class="formulaDsp">
-<picture><source srcset="form_6446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6396_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \sum_{K \in \mathcal T_h} \left(\boldsymbol{\varphi}_i,
 \frac{\partial \mathbf{w}}{\partial t}\right)_{K}
 =
@@ -282,13 +282,13 @@
 \mathbf{n} \cdot \widehat{\mathbf{F}}(\mathbf{w})\right&gt;_{\partial K} +
 \left(\boldsymbol{\varphi}_i,\mathbf{G}(\mathbf w)\right)_{K}
 \right],
-\]" src="form_6446.png"/></picture>
+\]" src="form_6396.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_6447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\varphi}_i$" src="form_6447.png"/></picture> runs through all basis functions with from 1 to <picture><source srcset="form_6448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n_\text{dofs}$" src="form_6448.png"/></picture>.</p>
-<p>We now denote by <picture><source srcset="form_6449_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal M$" src="form_6449.png"/></picture> the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> with entries <picture><source srcset="form_6450_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal M_{ij} =
+<p> where <picture><source srcset="form_6397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\varphi}_i$" src="form_6397.png"/></picture> runs through all basis functions with from 1 to <picture><source srcset="form_6398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n_\text{dofs}$" src="form_6398.png"/></picture>.</p>
+<p>We now denote by <picture><source srcset="form_6399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal M$" src="form_6399.png"/></picture> the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> with entries <picture><source srcset="form_6400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal M_{ij} =
/usr/share/doc/packages/dealii/doxygen/deal.II/step_68.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_68.html	2024-03-17 21:57:48.707266810 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_68.html	2024-03-17 21:57:48.711266835 +0000
@@ -141,17 +141,17 @@
 <p><a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p><a class="anchor" id="Simulationofthemotionofmasslesstracerparticlesinavorticalflow"></a></p><h3>Simulation of the motion of massless tracer particles in a vortical flow</h3>
 <p><a class="el" href="namespaceParticles.html">Particles</a> play an important part in numerical models for a large number of applications. <a class="el" href="namespaceParticles.html">Particles</a> are routinely used as massless tracers to visualize the dynamic of a transient flow. They can also play an intrinsic role as part of a more complex finite element model, as is the case for the Particle-In-Cell (PIC) method <b>[GLHPW2018]</b> or they can even be used to simulate the motion of granular matter, as in the Discrete Element Method (DEM) <b>[Blais2019]</b>. In the case of DEM, the resulting model is not related to the finite element method anymore, but just leads to a system of ordinary differential equation which describes the motion of the particles and the dynamic of their collisions. All of these models can be built using deal.II's particle handling capabilities.</p>
-<p>In the present step, we use particles as massless tracers to illustrate the dynamic of a vortical flow. Since the particles are massless tracers, the position of each particle <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> is described by the following ordinary differential equation (ODE):  </p><p class="formulaDsp">
-<picture><source srcset="form_6337_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>In the present step, we use particles as massless tracers to illustrate the dynamic of a vortical flow. Since the particles are massless tracers, the position of each particle <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> is described by the following ordinary differential equation (ODE):  </p><p class="formulaDsp">
+<picture><source srcset="form_6512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{d \textbf{x}_i}{dt} =\textbf{u}(\textbf{x}_i)
-\]" src="form_6337.png"/></picture>
+\]" src="form_6512.png"/></picture>
 </p>
-<p>where <picture><source srcset="form_6338_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{x}_i$" src="form_6338.png"/></picture> is the position of particle <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> and <picture><source srcset="form_6339_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}(\textbf{x}_i)$" src="form_6339.png"/></picture> the flow velocity at its position. In the present step, this ODE is solved using the explicit Euler method. The resulting scheme is:  </p><p class="formulaDsp">
-<picture><source srcset="form_6340_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>where <picture><source srcset="form_6513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{x}_i$" src="form_6513.png"/></picture> is the position of particle <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> and <picture><source srcset="form_6514_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}(\textbf{x}_i)$" src="form_6514.png"/></picture> the flow velocity at its position. In the present step, this ODE is solved using the explicit Euler method. The resulting scheme is:  </p><p class="formulaDsp">
+<picture><source srcset="form_6515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \textbf{x}_{i}^{n+1} = \textbf{x}_{i}^{n} + \Delta t \; \textbf{u}(\textbf{x}_{i}^{n})
-\]" src="form_6340.png"/></picture>
+\]" src="form_6515.png"/></picture>
 </p>
-<p>where <picture><source srcset="form_6341_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{x}_{i}^{n+1}$" src="form_6341.png"/></picture> and <picture><source srcset="form_6342_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{x}_{i}^{n}$" src="form_6342.png"/></picture> are the position of particle <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> at time <picture><source srcset="form_6343_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t+\Delta t$" src="form_6343.png"/></picture> and <picture><source srcset="form_215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t$" src="form_215.png"/></picture>, respectively and where <picture><source srcset="form_1891_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t$" src="form_1891.png"/></picture> is the time step. In the present step, the velocity at the location of particles is obtained in two different fashions:</p><ul>
+<p>where <picture><source srcset="form_6516_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{x}_{i}^{n+1}$" src="form_6516.png"/></picture> and <picture><source srcset="form_6517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{x}_{i}^{n}$" src="form_6517.png"/></picture> are the position of particle <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> at time <picture><source srcset="form_6518_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t+\Delta t$" src="form_6518.png"/></picture> and <picture><source srcset="form_189_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t$" src="form_189.png"/></picture>, respectively and where <picture><source srcset="form_1897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Delta t$" src="form_1897.png"/></picture> is the time step. In the present step, the velocity at the location of particles is obtained in two different fashions:</p><ul>
 <li>By evaluating the velocity function at the location of the particles;</li>
 <li>By evaluating the velocity function on a background triangulation and, using a finite element support, interpolating at the position of the particle.</li>
 </ul>
@@ -177,17 +177,17 @@
 <p>In this section we only discussed the particle-specific challenges in distributed computation. Parallel challenges that particles share with finite-element solutions (parallel output, data transfer during mesh refinement) can be addressed with the solutions found for finite-element problems already discussed in other examples.</p>
 <p><a class="anchor" id="Thetestcase"></a></p><h3>The testcase</h3>
 <p>In the present step, we use particles as massless tracers to illustrate the dynamics of a particular vortical flow: the Rayleigh&ndash;Kothe vortex. This flow pattern is generally used as a complex test case for interface tracking methods (e.g., volume-of-fluid and level set approaches) since it leads to strong rotation and elongation of the fluid <b>[Blais2013]</b>.</p>
-<p>The stream function <picture><source srcset="form_176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi$" src="form_176.png"/></picture> of this Rayleigh-Kothe vortex is defined as:</p>
+<p>The stream function <picture><source srcset="form_150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi$" src="form_150.png"/></picture> of this Rayleigh-Kothe vortex is defined as:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_6346_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \Psi = \frac{1}{\pi} \sin^2 (\pi x) \sin^2 (\pi y) \cos \left( \pi \frac{t}{T} \right)
-\]" src="form_6346.png"/></picture>
+\]" src="form_6519.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture> is half the period of the flow. The velocity profile in 2D ( <picture><source srcset="form_6347_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}=[u,v]^T$" src="form_6347.png"/></picture>) is :  </p><p class="formulaDsp">
-<picture><source srcset="form_6348_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> where <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture> is half the period of the flow. The velocity profile in 2D ( <picture><source srcset="form_6520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}=[u,v]^T$" src="form_6520.png"/></picture>) is :  </p><p class="formulaDsp">
+<picture><source srcset="form_6521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
    u &amp;=&amp;  - \frac{\partial\Psi}{\partial y} = -2 \sin^2 (\pi x) \sin (\pi y) \cos (\pi y)  \cos \left( \pi \frac{t}{T} \right)\\
    v &amp;=&amp;  \frac{\partial\Psi}{\partial x} = 2 \cos(\pi x) \sin(\pi x) \sin^2 (\pi y) \cos \left( \pi \frac{t}{T} \right)
-\end{eqnarray*}" src="form_6348.png"/></picture>
+\end{eqnarray*}" src="form_6521.png"/></picture>
 </p>
 <p>The velocity profile is illustrated in the following animation:</p>
 <p> 
@@ -198,7 +198,7 @@
    allowfullscreen></iframe>
  </p>
 </p>
-<p>It can be seen that this velocity reverses periodically due to the term <picture><source srcset="form_6349_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cos \left( \pi \frac{t}{T} \right)$" src="form_6349.png"/></picture> and that material will end up at its starting position after every period of length <picture><source srcset="form_6350_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=2T$" src="form_6350.png"/></picture>. We will run this tutorial program for exactly one period and compare the final particle location to the initial location to illustrate this flow property. This example uses the testcase to produce two models that handle the particles slightly differently. The first model prescribes the exact analytical velocity solution as the velocity for each particle. Therefore in this model there is no error in the assigned velocity to the particles, and any deviation of particle positions from the analytical position at a given time results from the error in solving the equation of motion for the particle inexactly, using a time stepping method. In the second model the analytical velocity field is first interpolated to a finite-element vector space (to simulate the case that the velocity was obtained from solving a finite-element problem, in the same way as the ODE for each particle in <a class="el" href="step_19.html">step-19</a> depends on a finite element solution). This finite-element "solution" is then evaluated at the locations of the particles to solve their equation of motion. The difference between the two cases allows to assess whether the chosen finite-element space is sufficiently accurate to advect the particles with the optimal convergence rate of the chosen particle advection scheme, a question that is important in practice to determine the accuracy of the combined algorithm (see e.g. <b>[Gassmoller2019]</b>).</p>
+<p>It can be seen that this velocity reverses periodically due to the term <picture><source srcset="form_6522_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\cos \left( \pi \frac{t}{T} \right)$" src="form_6522.png"/></picture> and that material will end up at its starting position after every period of length <picture><source srcset="form_6523_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=2T$" src="form_6523.png"/></picture>. We will run this tutorial program for exactly one period and compare the final particle location to the initial location to illustrate this flow property. This example uses the testcase to produce two models that handle the particles slightly differently. The first model prescribes the exact analytical velocity solution as the velocity for each particle. Therefore in this model there is no error in the assigned velocity to the particles, and any deviation of particle positions from the analytical position at a given time results from the error in solving the equation of motion for the particle inexactly, using a time stepping method. In the second model the analytical velocity field is first interpolated to a finite-element vector space (to simulate the case that the velocity was obtained from solving a finite-element problem, in the same way as the ODE for each particle in <a class="el" href="step_19.html">step-19</a> depends on a finite element solution). This finite-element "solution" is then evaluated at the locations of the particles to solve their equation of motion. The difference between the two cases allows to assess whether the chosen finite-element space is sufficiently accurate to advect the particles with the optimal convergence rate of the chosen particle advection scheme, a question that is important in practice to determine the accuracy of the combined algorithm (see e.g. <b>[Gassmoller2019]</b>).</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
 <p><a class="anchor" id="Includefiles"></a> </p><h3>Include files</h3>
 <div class="fragment"><div class="line">  #href_anchor"line">  #include &lt;deal.II/base/conditional_ostream.h&gt;</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_69.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_69.html	2024-03-17 21:57:48.835267601 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_69.html	2024-03-17 21:57:48.839267626 +0000
@@ -142,8 +142,8 @@
     </ul>
   <li> <a href="#href_anchor" class=bold>The plain program</a>
 </ol> </td> </tr> </table>
- <em> This program was contributed by Matthias Maier (Texas A&amp;M University), and Ignacio Tomas (Sandia National Laboratories <picture><source srcset="form_6560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$^{\!\dagger}$" src="form_6560.png"/></picture>). </em></p>
-<p><picture><source srcset="form_6561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$^\dagger$" src="form_6561.png"/></picture><em>Sandia National Laboratories is a multimission laboratory managed and operated by National Technology &amp; Engineering Solutions of Sandia, LLC, a wholly owned subsidiary of Honeywell International Inc., for the U.S. Department of Energy's National Nuclear Security Administration under contract DE-NA0003525. This document describes objective technical results and analysis. Any subjective views or opinions that might be expressed in the paper do not necessarily represent the views of the U.S. Department of Energy or the United States Government.</em></p>
+ <em> This program was contributed by Matthias Maier (Texas A&amp;M University), and Ignacio Tomas (Sandia National Laboratories <picture><source srcset="form_6524_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$^{\!\dagger}$" src="form_6524.png"/></picture>). </em></p>
+<p><picture><source srcset="form_6525_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$^\dagger$" src="form_6525.png"/></picture><em>Sandia National Laboratories is a multimission laboratory managed and operated by National Technology &amp; Engineering Solutions of Sandia, LLC, a wholly owned subsidiary of Honeywell International Inc., for the U.S. Department of Energy's National Nuclear Security Administration under contract DE-NA0003525. This document describes objective technical results and analysis. Any subjective views or opinions that might be expressed in the paper do not necessarily represent the views of the U.S. Department of Energy or the United States Government.</em></p>
 <dl class="section note"><dt>Note</dt><dd>This tutorial step implements a first-order accurate <em>guaranteed maximum wavespeed method</em> based on a first-order <em>graph viscosity</em> for solving Euler's equations of gas dynamics <b>[GuermondPopov2016]</b>. As such it is presented primarily for educational purposes. For actual research computations you might want to consider exploring a corresponding <a href="https://github.com/conservation-laws/ryujin">high-performance implementation of a second-order accurate scheme</a> that uses <em>convex limiting</em> techniques, and strong stability-preserving (SSP) time integration, see <b>[GuermondEtAl2018]</b> (<a href="https://conservation-laws.org/">website</a>).</dd>
 <dd>
 If you use this program as a basis for your own work, please consider citing it in your list of references. The initial version of this work was contributed to the deal.II project by the authors listed in the following citation:  <a href="https://doi.org/10.5281/zenodo.3698223"><img src="https://zenodo.org/badge/DOI/10.5281/zenodo.3698223.svg" alt="10.5281/zenodo.3698223"/></a> </dd></dl>
@@ -152,15 +152,15 @@
 <p>It should be noted that first-order schemes in the context of hyperbolic conservation laws require prohibitively many degrees of freedom to resolve certain key features of the simulated fluid, and thus, typically only serve as elementary building blocks in higher-order schemes <b>[GuermondEtAl2018]</b>. However, we hope that the reader still finds the tutorial step to be a good starting point (in particular with respect to the programming techniques) before jumping into full research codes such as the second-order scheme discussed in <b>[GuermondEtAl2018]</b>.</p>
 <p><a class="anchor" id="eulerequations"></a> <a class="anchor" id="Eulersequationsofgasdynamics"></a></p><h3>Euler's equations of gas dynamics</h3>
 <p>The compressible Euler's equations of gas dynamics are written in conservative form as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_6562_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align}
+<picture><source srcset="form_6526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align}
 \mathbf{u}_t + \text{div} \, \mathbb{f}(\mathbf{u}) = \boldsymbol{0} ,
-\end{align}" src="form_6562.png"/></picture>
+\end{align}" src="form_6526.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_6563_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}(\textbf{x},t):\mathbb{R}^{d} \times \mathbb{R}
-\rightarrow \mathbb{R}^{d+2}$" src="form_6563.png"/></picture>, and <picture><source srcset="form_6564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{f}(\mathbf{u}):\mathbb{R}^{d+2}
-\rightarrow \mathbb{R}^{(d+2) \times d}$" src="form_6564.png"/></picture>, and <picture><source srcset="form_6565_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d \geq 1$" src="form_6565.png"/></picture> is the space dimension. We say that <picture><source srcset="form_6566_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} \in \mathbb{R}^{d+2}$" src="form_6566.png"/></picture> is the state and <picture><source srcset="form_6567_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{f}(\mathbf{u}) \in  \mathbb{R}^{(d+2) \times d}$" src="form_6567.png"/></picture> is the flux of the system. In the case of Euler's equations the state is given by <picture><source srcset="form_6568_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u} = [\rho, \textbf{m}^\top,E]^{\top}$" src="form_6568.png"/></picture>: where <picture><source srcset="form_6569_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho \in \mathbb{R}^+$" src="form_6569.png"/></picture> denotes the density, <picture><source srcset="form_6570_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{m} \in \mathbb{R}^d$" src="form_6570.png"/></picture> is the momentum, and <picture><source srcset="form_6571_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E
-\in \mathbb{R}^+$" src="form_6571.png"/></picture> is the total energy of the system. The flux of the system <picture><source srcset="form_6572_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{f}(\mathbf{u})$" src="form_6572.png"/></picture> is defined as  </p><p class="formulaDsp">
-<picture><source srcset="form_6573_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> where <picture><source srcset="form_6527_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}(\textbf{x},t):\mathbb{R}^{d} \times \mathbb{R}
+\rightarrow \mathbb{R}^{d+2}$" src="form_6527.png"/></picture>, and <picture><source srcset="form_6528_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{f}(\mathbf{u}):\mathbb{R}^{d+2}
+\rightarrow \mathbb{R}^{(d+2) \times d}$" src="form_6528.png"/></picture>, and <picture><source srcset="form_6529_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d \geq 1$" src="form_6529.png"/></picture> is the space dimension. We say that <picture><source srcset="form_6530_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} \in \mathbb{R}^{d+2}$" src="form_6530.png"/></picture> is the state and <picture><source srcset="form_6531_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{f}(\mathbf{u}) \in  \mathbb{R}^{(d+2) \times d}$" src="form_6531.png"/></picture> is the flux of the system. In the case of Euler's equations the state is given by <picture><source srcset="form_6532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u} = [\rho, \textbf{m}^\top,E]^{\top}$" src="form_6532.png"/></picture>: where <picture><source srcset="form_6533_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho \in \mathbb{R}^+$" src="form_6533.png"/></picture> denotes the density, <picture><source srcset="form_6534_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{m} \in \mathbb{R}^d$" src="form_6534.png"/></picture> is the momentum, and <picture><source srcset="form_6535_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E
+\in \mathbb{R}^+$" src="form_6535.png"/></picture> is the total energy of the system. The flux of the system <picture><source srcset="form_6536_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{f}(\mathbf{u})$" src="form_6536.png"/></picture> is defined as  </p><p class="formulaDsp">
+<picture><source srcset="form_6537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 \mathbb{f}(\textbf{u})
 =
 \begin{bmatrix}
@@ -168,32 +168,32 @@
   \rho^{-1} \textbf{m} \otimes \textbf{m} + \mathbb{I} p\\
   \tfrac{\textbf{m}^\top}{\rho} (E + p)
 \end{bmatrix},
-\end{align*}" src="form_6573.png"/></picture>
+\end{align*}" src="form_6537.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_6574_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{I} \in \mathbb{R}^{d \times d}$" src="form_6574.png"/></picture> is the identity matrix and <picture><source srcset="form_2166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\otimes$" src="form_2166.png"/></picture> denotes the tensor product. Here, we have introduced the pressure <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> that, in general, is defined by a closed-form equation of state. In this tutorial we limit the discussion to the class of polytropic ideal gases for which the pressure is given by  </p><p class="formulaDsp">
-<picture><source srcset="form_6576_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> where <picture><source srcset="form_6538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{I} \in \mathbb{R}^{d \times d}$" src="form_6538.png"/></picture> is the identity matrix and <picture><source srcset="form_2174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\otimes$" src="form_2174.png"/></picture> denotes the tensor product. Here, we have introduced the pressure <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> that, in general, is defined by a closed-form equation of state. In this tutorial we limit the discussion to the class of polytropic ideal gases for which the pressure is given by  </p><p class="formulaDsp">
+<picture><source srcset="form_6539_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 p = p(\textbf{u}) := (\gamma -1) \Big(E -
 \tfrac{|\textbf{m}|^2}{2\,\rho}
 \Big),
-\end{align*}" src="form_6576.png"/></picture>
+\end{align*}" src="form_6539.png"/></picture>
 </p>
-<p> where the factor <picture><source srcset="form_6577_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma \in (1,5/3]$" src="form_6577.png"/></picture> denotes the <a href="https://en.wikipedia.org/wiki/Heat_capacity_ratio">ratio of specific heats</a>.</p>
+<p> where the factor <picture><source srcset="form_6540_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma \in (1,5/3]$" src="form_6540.png"/></picture> denotes the <a href="https://en.wikipedia.org/wiki/Heat_capacity_ratio">ratio of specific heats</a>.</p>
 <p><a class="anchor" id="Solutiontheory"></a></p><h4>Solution theory</h4>
 <p>Hyperbolic conservation laws, such as  </p><p class="formulaDsp">
-<picture><source srcset="form_6580_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_6541_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 \mathbf{u}_t + \text{div} \, \mathbb{f}(\mathbf{u}) = \boldsymbol{0},
-\end{align*}" src="form_6580.png"/></picture>
+\end{align*}" src="form_6541.png"/></picture>
 </p>
-<p> pose a significant challenge with respect to solution theory. An evident observation is that rewriting the equation in variational form and testing with the solution itself does not lead to an energy estimate because the pairing <picture><source srcset="form_6581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\langle \text{div} \, \mathbb{f}(\mathbf{u}), \mathbf{u}\rangle$" src="form_6581.png"/></picture> (understood as the <picture><source srcset="form_6582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2(\Omega)$" src="form_6582.png"/></picture> inner product or duality pairing) is not guaranteed to be non-negative. Notions such as energy-stability or <picture><source srcset="form_6582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2(\Omega)$" src="form_6582.png"/></picture>-stability are (in general) meaningless in this context.</p>
-<p>Historically, the most fruitful step taken in order to deepen the understanding of hyperbolic conservation laws was to assume that the solution is formally defined as <picture><source srcset="form_6583_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} := \lim_{\epsilon \rightarrow
-0^+} \mathbf{u}^{\epsilon}$" src="form_6583.png"/></picture> where <picture><source srcset="form_6584_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}^{\epsilon}$" src="form_6584.png"/></picture> is the solution of the parabolic regularization  </p><p class="formulaDsp">
-<picture><source srcset="form_6585_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align}
+<p> pose a significant challenge with respect to solution theory. An evident observation is that rewriting the equation in variational form and testing with the solution itself does not lead to an energy estimate because the pairing <picture><source srcset="form_6542_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\langle \text{div} \, \mathbb{f}(\mathbf{u}), \mathbf{u}\rangle$" src="form_6542.png"/></picture> (understood as the <picture><source srcset="form_6543_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2(\Omega)$" src="form_6543.png"/></picture> inner product or duality pairing) is not guaranteed to be non-negative. Notions such as energy-stability or <picture><source srcset="form_6543_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2(\Omega)$" src="form_6543.png"/></picture>-stability are (in general) meaningless in this context.</p>
+<p>Historically, the most fruitful step taken in order to deepen the understanding of hyperbolic conservation laws was to assume that the solution is formally defined as <picture><source srcset="form_6544_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} := \lim_{\epsilon \rightarrow
+0^+} \mathbf{u}^{\epsilon}$" src="form_6544.png"/></picture> where <picture><source srcset="form_6545_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}^{\epsilon}$" src="form_6545.png"/></picture> is the solution of the parabolic regularization  </p><p class="formulaDsp">
+<picture><source srcset="form_6546_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align}
 \mathbf{u}_t^{\epsilon} + \text{div} \, \mathbb{f}(\mathbf{u}^{\epsilon})
 - {\epsilon} \Delta \mathbf{u}^{\epsilon} = 0.
-\end{align}" src="form_6585.png"/></picture>
+\end{align}" src="form_6546.png"/></picture>
 </p>
-<p> Such solutions, which are understood as the solution recovered in the zero-viscosity limit, are often referred to as <em>viscosity solutions</em>. (This is, because physically <picture><source srcset="form_1433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1433.png"/></picture> can be understood as related to the viscosity of the fluid, i.e., a quantity that indicates the amount of friction neighboring gas particles moving at different speeds exert on each other. The Euler equations themselves are derived under the assumption of no friction, but can physically be expected to describe the limiting case of vanishing friction or viscosity.) Global existence and uniqueness of such solutions is an open issue. However, we know at least that if such viscosity solutions exists they have to satisfy the constraint <picture><source srcset="form_6586_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}(\mathbf{x},t) \in \mathcal{B}$" src="form_6586.png"/></picture> for all <picture><source srcset="form_6587_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x} \in \Omega$" src="form_6587.png"/></picture> and <picture><source srcset="form_6588_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t \geq 0$" src="form_6588.png"/></picture> where  </p><p class="formulaDsp">
-<picture><source srcset="form_6589_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align}
+<p> Such solutions, which are understood as the solution recovered in the zero-viscosity limit, are often referred to as <em>viscosity solutions</em>. (This is, because physically <picture><source srcset="form_1435_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon$" src="form_1435.png"/></picture> can be understood as related to the viscosity of the fluid, i.e., a quantity that indicates the amount of friction neighboring gas particles moving at different speeds exert on each other. The Euler equations themselves are derived under the assumption of no friction, but can physically be expected to describe the limiting case of vanishing friction or viscosity.) Global existence and uniqueness of such solutions is an open issue. However, we know at least that if such viscosity solutions exists they have to satisfy the constraint <picture><source srcset="form_6547_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}(\mathbf{x},t) \in \mathcal{B}$" src="form_6547.png"/></picture> for all <picture><source srcset="form_6548_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x} \in \Omega$" src="form_6548.png"/></picture> and <picture><source srcset="form_6549_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t \geq 0$" src="form_6549.png"/></picture> where  </p><p class="formulaDsp">
+<picture><source srcset="form_6550_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align}
   \mathcal{B} = \big\{ \textbf{u} =
   [\rho, \textbf{m}^\top,E]^{\top} \in \mathbb{R}^{d+2} \, \big |
   \
@@ -203,81 +203,81 @@
   \
   s(\mathbf{u}) \geq \min_{x \in \Omega} s(\mathbf{u}_0(\mathbf{x}))
   \big\}.
-\end{align}" src="form_6589.png"/></picture>
+\end{align}" src="form_6550.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_6590_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s(\mathbf{u})$" src="form_6590.png"/></picture> denotes the specific entropy  </p><p class="formulaDsp">
-<picture><source srcset="form_6591_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align}
+<p> Here, <picture><source srcset="form_6551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s(\mathbf{u})$" src="form_6551.png"/></picture> denotes the specific entropy  </p><p class="formulaDsp">
+<picture><source srcset="form_6552_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align}
   s(\mathbf{u}) = \ln \Big(\frac{p(\mathbf{u})}{\rho^{\gamma}}\Big).
-\end{align}" src="form_6591.png"/></picture>
+\end{align}" src="form_6552.png"/></picture>
 </p>
-<p> We will refer to <picture><source srcset="form_6592_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{B}$" src="form_6592.png"/></picture> as the invariant set of Euler's equations. In other words, a state <picture><source srcset="form_6593_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}(\mathbf{x},t)\in\mathcal{B}$" src="form_6593.png"/></picture> obeys positivity of the density, positivity of the internal energy, and a local minimum principle on the specific entropy. This condition is a simplified version of a class of pointwise stability constraints satisfied by the exact (viscosity) solution. By pointwise we mean that the constraint has to be satisfied at every point of the domain, not just in an averaged (integral, or high order moments) sense.</p>
-<p>In context of a numerical approximation, a violation of such a constraint has dire consequences: it almost surely leads to catastrophic failure of the numerical scheme, loss of hyperbolicity, and overall, loss of well-posedness of the (discrete) problem. It would also mean that we have computed something that can not be interpreted physically. (For example, what are we to make of a computed solution with a negative density?) In the following we will formulate a scheme that ensures that the discrete approximation of <picture><source srcset="form_3025_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}(\mathbf{x},t)$" src="form_3025.png"/></picture> remains in <picture><source srcset="form_6592_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{B}$" src="form_6592.png"/></picture>.</p>
+<p> We will refer to <picture><source srcset="form_6553_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{B}$" src="form_6553.png"/></picture> as the invariant set of Euler's equations. In other words, a state <picture><source srcset="form_6554_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}(\mathbf{x},t)\in\mathcal{B}$" src="form_6554.png"/></picture> obeys positivity of the density, positivity of the internal energy, and a local minimum principle on the specific entropy. This condition is a simplified version of a class of pointwise stability constraints satisfied by the exact (viscosity) solution. By pointwise we mean that the constraint has to be satisfied at every point of the domain, not just in an averaged (integral, or high order moments) sense.</p>
+<p>In context of a numerical approximation, a violation of such a constraint has dire consequences: it almost surely leads to catastrophic failure of the numerical scheme, loss of hyperbolicity, and overall, loss of well-posedness of the (discrete) problem. It would also mean that we have computed something that can not be interpreted physically. (For example, what are we to make of a computed solution with a negative density?) In the following we will formulate a scheme that ensures that the discrete approximation of <picture><source srcset="form_2953_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}(\mathbf{x},t)$" src="form_2953.png"/></picture> remains in <picture><source srcset="form_6553_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{B}$" src="form_6553.png"/></picture>.</p>
 <p><a class="anchor" id="Variationalversuscollocationtypediscretizations"></a></p><h4>Variational versus collocation-type discretizations</h4>
 <p>Following <a class="el" href="step_9.html">step-9</a>, <a class="el" href="step_12.html">step-12</a>, <a class="el" href="step_33.html">step-33</a>, and <a class="el" href="step_67.html">step-67</a>, at this point it might look tempting to base a discretization of Euler's equations on a (semi-discrete) variational formulation:  </p><p class="formulaDsp">
-<picture><source srcset="form_6594_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_6555_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   (\partial_t\mathbf{u}_{h},\textbf{v}_h)_{L^2(\Omega)}
   - ( \mathbb{f}(\mathbf{u}_{h}) ,\text{grad} \, \textbf{v}_{h})_{L^2(\Omega)}
   + s_h(\mathbf{u}_{h},\textbf{v}_h)_{L^2(\Omega)} = \boldsymbol{0}
   \quad\forall \textbf{v}_h \in \mathbb{V}_h.
-\end{align*}" src="form_6594.png"/></picture>
+\end{align*}" src="form_6555.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_6595_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{V}_h$" src="form_6595.png"/></picture> is an appropriate finite element space, and <picture><source srcset="form_6596_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s_h(\cdot,\cdot)_{L^2(\Omega)}$" src="form_6596.png"/></picture> is some linear stabilization method (possibly complemented with some ad-hoc shock-capturing technique, see for instance Chapter 5 of <b>[GuermondErn2004]</b> and references therein). Most time-dependent discretization approaches described in the deal.II tutorials are based on such a (semi-discrete) variational approach. Fundamentally, from an analysis perspective, variational discretizations are conceived to provide some notion of global (integral) stability, meaning an estimate of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_6597_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> Here, <picture><source srcset="form_6556_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{V}_h$" src="form_6556.png"/></picture> is an appropriate finite element space, and <picture><source srcset="form_6557_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s_h(\cdot,\cdot)_{L^2(\Omega)}$" src="form_6557.png"/></picture> is some linear stabilization method (possibly complemented with some ad-hoc shock-capturing technique, see for instance Chapter 5 of <b>[GuermondErn2004]</b> and references therein). Most time-dependent discretization approaches described in the deal.II tutorials are based on such a (semi-discrete) variational approach. Fundamentally, from an analysis perspective, variational discretizations are conceived to provide some notion of global (integral) stability, meaning an estimate of the form  </p><p class="formulaDsp">
+<picture><source srcset="form_6558_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   |\!|\!| \mathbf{u}_{h}(t) |\!|\!| \leq |\!|\!| \mathbf{u}_{h}(0) |\!|\!|
-\end{align*}" src="form_6597.png"/></picture>
+\end{align*}" src="form_6558.png"/></picture>
 </p>
-<p> holds true, where <picture><source srcset="form_6598_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\!|\!| \cdot |\!|\!| $" src="form_6598.png"/></picture> could represent the <picture><source srcset="form_6582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2(\Omega)$" src="form_6582.png"/></picture>-norm or, more generally, some discrete (possibly mesh dependent) energy-norm. Variational discretizations of hyperbolic conservation laws have been very popular since the mid eighties, in particular combined with SUPG-type stabilization and/or upwinding techniques (see the early work of <b>[Brooks1982]</b> and <b>[Johnson1986]</b>). They have proven to be some of the best approaches for simulations in the subsonic shockless regime and similarly benign situations.</p>
+<p> holds true, where <picture><source srcset="form_6559_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\!|\!| \cdot |\!|\!| $" src="form_6559.png"/></picture> could represent the <picture><source srcset="form_6543_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2(\Omega)$" src="form_6543.png"/></picture>-norm or, more generally, some discrete (possibly mesh dependent) energy-norm. Variational discretizations of hyperbolic conservation laws have been very popular since the mid eighties, in particular combined with SUPG-type stabilization and/or upwinding techniques (see the early work of <b>[Brooks1982]</b> and <b>[Johnson1986]</b>). They have proven to be some of the best approaches for simulations in the subsonic shockless regime and similarly benign situations.</p>
 <p>However, in the transonic and supersonic regimes, and shock-hydrodynamics applications the use of variational schemes might be questionable. In fact, at the time of this writing, most shock-hydrodynamics codes are still firmly grounded on finite volume methods. The main reason for failure of variational schemes in such extreme regimes is the lack of pointwise stability. This stems from the fact that <em>a priori</em> bounds on integrated quantities (e.g. integrals of moments) have in general no implications on pointwise properties of the solution. While some of these problems might be alleviated by the (perpetual) chase of the right shock capturing scheme, finite difference-like and finite volume schemes still have an edge in many regards.</p>
 <p>In this tutorial step we therefore depart from variational schemes. We will present a completely algebraic formulation (with the flavor of a collocation-type scheme) that preserves constraints pointwise, i.e.,  </p><p class="formulaDsp">
-<picture><source srcset="form_6599_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_6560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \textbf{u}_h(\mathbf{x}_i,t) \in \mathcal{B}
   \;\text{at every node}\;\mathbf{x}_i\;\text{of the mesh}.
-\end{align*}" src="form_6599.png"/></picture>
+\end{align*}" src="form_6560.png"/></picture>
 </p>
 <p> Contrary to finite difference/volume schemes, the scheme implemented in this step maximizes the use of finite element software infrastructure, works on any mesh, in any space dimension, and is theoretically guaranteed to always work, all the time, no exception. This illustrates that deal.II can be used far beyond the context of variational schemes in Hilbert spaces and that a large number of classes, modules and namespaces from deal.II can be adapted for such a purpose.</p>
 <p><a class="anchor" id="Descriptionofthescheme"></a></p><h3>Description of the scheme </h3>
-<p>Let <picture><source srcset="form_6595_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{V}_h$" src="form_6595.png"/></picture> be scalar-valued finite dimensional space spanned by a basis <picture><source srcset="form_6600_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\phi_i\}_{i \in \mathcal{V}}$" src="form_6600.png"/></picture> where: <picture><source srcset="form_6601_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i:\Omega \rightarrow
-\mathbb{R}$" src="form_6601.png"/></picture> and <picture><source srcset="form_6602_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{V}$" src="form_6602.png"/></picture> is the set of all indices (nonnegative integers) identifying each scalar Degree of Freedom (DOF) in the mesh. Therefore a scalar finite element functional <picture><source srcset="form_6603_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h \in \mathbb{V}_h$" src="form_6603.png"/></picture> can be written as <picture><source srcset="form_6604_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h = \sum_{i \in \mathcal{V}} U_i \phi_i$" src="form_6604.png"/></picture> with <picture><source srcset="form_6606_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i \in
-\mathbb{R}$" src="form_6606.png"/></picture>. We introduce the notation for vector-valued approximation spaces <picture><source srcset="form_6607_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pmb{\mathbb{V}}_h := \{\mathbb{V}_h\}^{d+2}$" src="form_6607.png"/></picture>. Let <picture><source srcset="form_6608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}_h
-\in \pmb{\mathbb{V}}_h$" src="form_6608.png"/></picture>, then it can be written as <picture><source srcset="form_6609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}_h = \sum_{i
-\in \mathcal{V}} \mathbf{U}_i \phi_i$" src="form_6609.png"/></picture> where <picture><source srcset="form_6610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{U}_i \in
-\mathbb{R}^{d+2}$" src="form_6610.png"/></picture> and <picture><source srcset="form_1012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i$" src="form_1012.png"/></picture> is a scalar-valued shape function.</p>
+<p>Let <picture><source srcset="form_6556_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{V}_h$" src="form_6556.png"/></picture> be scalar-valued finite dimensional space spanned by a basis <picture><source srcset="form_6561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\phi_i\}_{i \in \mathcal{V}}$" src="form_6561.png"/></picture> where: <picture><source srcset="form_6562_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i:\Omega \rightarrow
+\mathbb{R}$" src="form_6562.png"/></picture> and <picture><source srcset="form_6563_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{V}$" src="form_6563.png"/></picture> is the set of all indices (nonnegative integers) identifying each scalar Degree of Freedom (DOF) in the mesh. Therefore a scalar finite element functional <picture><source srcset="form_6564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h \in \mathbb{V}_h$" src="form_6564.png"/></picture> can be written as <picture><source srcset="form_6565_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h = \sum_{i \in \mathcal{V}} U_i \phi_i$" src="form_6565.png"/></picture> with <picture><source srcset="form_6566_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i \in
+\mathbb{R}$" src="form_6566.png"/></picture>. We introduce the notation for vector-valued approximation spaces <picture><source srcset="form_6567_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\pmb{\mathbb{V}}_h := \{\mathbb{V}_h\}^{d+2}$" src="form_6567.png"/></picture>. Let <picture><source srcset="form_6568_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}_h
+\in \pmb{\mathbb{V}}_h$" src="form_6568.png"/></picture>, then it can be written as <picture><source srcset="form_6569_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}_h = \sum_{i
+\in \mathcal{V}} \mathbf{U}_i \phi_i$" src="form_6569.png"/></picture> where <picture><source srcset="form_6570_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{U}_i \in
+\mathbb{R}^{d+2}$" src="form_6570.png"/></picture> and <picture><source srcset="form_966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i$" src="form_966.png"/></picture> is a scalar-valued shape function.</p>
 <dl class="section note"><dt>Note</dt><dd>We purposely refrain from using vector-valued finite element spaces in our notation. Vector-valued finite element spaces are natural for variational formulations of PDE systems (e.g. Navier-Stokes). In such context, the interactions that have to be computed describe <em>interactions between DOFs</em>: with proper renumbering of the vector-valued <a class="el" href="classDoFHandler.html">DoFHandler</a> (i.e. initialized with an <a class="el" href="classFESystem.html">FESystem</a>) it is possible to compute the block-matrices (required in order to advance the solution) with relative ease. However, the interactions that have to be computed in the context of time-explicit collocation-type schemes (such as finite differences and/or the scheme presented in this tutorial) can be better described as <em>interactions between nodes</em> (not between DOFs). In addition, in our case we do not solve a linear equation in order to advance the solution. This leaves very little reason to use vector-valued finite element spaces both in theory and/or practice.</dd></dl>
-<p>We will use the usual Lagrange finite elements: let <picture><source srcset="form_6611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\mathbf{x}_i\}_{i \in
-\mathcal{V}}$" src="form_6611.png"/></picture> denote the set of all support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), where <picture><source srcset="form_6612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}_i \in \mathbb{R}^d$" src="form_6612.png"/></picture>. Then each index <picture><source srcset="form_6613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i \in
-\mathcal{V}$" src="form_6613.png"/></picture> uniquely identifies a support point <picture><source srcset="form_3156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}_i$" src="form_3156.png"/></picture>, as well as a scalar-valued shape function <picture><source srcset="form_1012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i$" src="form_1012.png"/></picture>. With this notation at hand we can define the (explicit time stepping) scheme as:  </p><p class="formulaDsp">
-<picture><source srcset="form_6614_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>We will use the usual Lagrange finite elements: let <picture><source srcset="form_6571_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\mathbf{x}_i\}_{i \in
+\mathcal{V}}$" src="form_6571.png"/></picture> denote the set of all support points (see <a class="el" href="DEALGlossary.html#href_anchor">this glossary entry</a>), where <picture><source srcset="form_6572_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}_i \in \mathbb{R}^d$" src="form_6572.png"/></picture>. Then each index <picture><source srcset="form_6573_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i \in
+\mathcal{V}$" src="form_6573.png"/></picture> uniquely identifies a support point <picture><source srcset="form_3232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}_i$" src="form_3232.png"/></picture>, as well as a scalar-valued shape function <picture><source srcset="form_966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi_i$" src="form_966.png"/></picture>. With this notation at hand we can define the (explicit time stepping) scheme as:  </p><p class="formulaDsp">
+<picture><source srcset="form_6574_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   m_i \frac{\mathbf{U}_i^{n+1} - \mathbf{U}_i^{n}}{\tau}
   + \sum_{j \in \mathcal{I}(i)} \mathbb{f}(\mathbf{U}_j^{n})\cdot
   \mathbf{c}_{ij} - \sum_{j \in \mathcal{I}(i)}
   d_{ij} \mathbf{U}_j^{n} = \boldsymbol{0} \, ,
-\end{align*}" src="form_6614.png"/></picture>
+\end{align*}" src="form_6574.png"/></picture>
 </p>
 <p> where</p><ul>
-<li><picture><source srcset="form_6615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_i \dealcoloneq \int_{\Omega} \phi_i \, \mathrm{d}\mathbf{x}$" src="form_6615.png"/></picture> is the <a class="el" href="DEALGlossary.html#href_anchor">lumped</a> <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a></li>
-<li><picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture> is the time step size</li>
-<li><picture><source srcset="form_6616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{c}_{ij} \dealcoloneq \int_{\Omega} \nabla\phi_j\phi_i \,
-    \mathrm{d}\mathbf{x}$" src="form_6616.png"/></picture> (note that <picture><source srcset="form_6617_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{c}_{ij}\in \mathbb{R}^d$" src="form_6617.png"/></picture>) is a vector-valued matrix that was used to approximate the divergence of the flux in a weak sense.</li>
-<li><picture><source srcset="form_6618_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{I}(i) \dealcoloneq \{j \in \mathcal{V} \ | \ \mathbf{c}_{ij}
-    \not \equiv \boldsymbol{0}\} \cup \{i\}$" src="form_6618.png"/></picture> is the adjacency list containing all degrees of freedom coupling to the index <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>. In other words <picture><source srcset="form_6619_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{I}(i)$" src="form_6619.png"/></picture> contains all nonzero column indices for row index i. <picture><source srcset="form_6619_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{I}(i)$" src="form_6619.png"/></picture> will also be called a "stencil".</li>
-<li><picture><source srcset="form_6620_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{f}(\mathbf{U}_j^{n})$" src="form_6620.png"/></picture> is the flux <picture><source srcset="form_6621_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{f}$" src="form_6621.png"/></picture> of the hyperbolic system evaluated for the state <picture><source srcset="form_6622_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{U}_j^{n}$" src="form_6622.png"/></picture> associated with support point <picture><source srcset="form_6623_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}_j$" src="form_6623.png"/></picture>.</li>
-<li><picture><source srcset="form_6624_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_{ij} \dealcoloneq \max \{ \lambda_{\text{max}}
+<li><picture><source srcset="form_6575_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_i \dealcoloneq \int_{\Omega} \phi_i \, \mathrm{d}\mathbf{x}$" src="form_6575.png"/></picture> is the <a class="el" href="DEALGlossary.html#href_anchor">lumped</a> <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a></li>
+<li><picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture> is the time step size</li>
+<li><picture><source srcset="form_6576_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{c}_{ij} \dealcoloneq \int_{\Omega} \nabla\phi_j\phi_i \,
+    \mathrm{d}\mathbf{x}$" src="form_6576.png"/></picture> (note that <picture><source srcset="form_6577_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{c}_{ij}\in \mathbb{R}^d$" src="form_6577.png"/></picture>) is a vector-valued matrix that was used to approximate the divergence of the flux in a weak sense.</li>
+<li><picture><source srcset="form_6578_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{I}(i) \dealcoloneq \{j \in \mathcal{V} \ | \ \mathbf{c}_{ij}
+    \not \equiv \boldsymbol{0}\} \cup \{i\}$" src="form_6578.png"/></picture> is the adjacency list containing all degrees of freedom coupling to the index <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>. In other words <picture><source srcset="form_6579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{I}(i)$" src="form_6579.png"/></picture> contains all nonzero column indices for row index i. <picture><source srcset="form_6579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{I}(i)$" src="form_6579.png"/></picture> will also be called a "stencil".</li>
+<li><picture><source srcset="form_6580_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{f}(\mathbf{U}_j^{n})$" src="form_6580.png"/></picture> is the flux <picture><source srcset="form_6581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{f}$" src="form_6581.png"/></picture> of the hyperbolic system evaluated for the state <picture><source srcset="form_6582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{U}_j^{n}$" src="form_6582.png"/></picture> associated with support point <picture><source srcset="form_6583_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}_j$" src="form_6583.png"/></picture>.</li>
+<li><picture><source srcset="form_6584_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_{ij} \dealcoloneq \max \{ \lambda_{\text{max}}
     (\mathbf{U}_i^{n},\mathbf{U}_j^{n}, \textbf{n}_{ij}),
     \lambda_{\text{max}} (\mathbf{U}_j^{n}, \mathbf{U}_i^{n},
-    \textbf{n}_{ji}) \} \|\mathbf{c}_{ij}\|$" src="form_6624.png"/></picture> if <picture><source srcset="form_6625_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i \not = j$" src="form_6625.png"/></picture> is the so called <em>graph viscosity</em>. The graph viscosity serves as a stabilization term, it is somewhat the discrete counterpart of <picture><source srcset="form_6626_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon \Delta \mathbf{u}$" src="form_6626.png"/></picture> that appears in the notion of viscosity solution described above. We will base our construction of <picture><source srcset="form_6627_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_{ij}$" src="form_6627.png"/></picture> on an estimate of the maximal local wavespeed <picture><source srcset="form_6628_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{\text{max}}$" src="form_6628.png"/></picture> that will be explained in detail in a moment.</li>
-<li>the diagonal entries of the viscosity matrix are defined as <picture><source srcset="form_6629_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_{ii} = - \sum_{j \in \mathcal{I}(i)\backslash \{i\}} d_{ij}$" src="form_6629.png"/></picture>.</li>
-<li><picture><source srcset="form_6630_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{n}_{ij} = \frac{\mathbf{c}_{ij}}{ \|\mathbf{c}_{ij}\| }$" src="form_6630.png"/></picture> is a normalization of the <picture><source srcset="form_6631_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{c}_{ij}$" src="form_6631.png"/></picture> matrix that enters the approximate Riemann solver with which we compute an the approximations <picture><source srcset="form_6628_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{\text{max}}$" src="form_6628.png"/></picture> on the local wavespeed. (This will be explained further down below).</li>
+    \textbf{n}_{ji}) \} \|\mathbf{c}_{ij}\|$" src="form_6584.png"/></picture> if <picture><source srcset="form_6585_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i \not = j$" src="form_6585.png"/></picture> is the so called <em>graph viscosity</em>. The graph viscosity serves as a stabilization term, it is somewhat the discrete counterpart of <picture><source srcset="form_6586_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\epsilon \Delta \mathbf{u}$" src="form_6586.png"/></picture> that appears in the notion of viscosity solution described above. We will base our construction of <picture><source srcset="form_6587_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_{ij}$" src="form_6587.png"/></picture> on an estimate of the maximal local wavespeed <picture><source srcset="form_6588_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{\text{max}}$" src="form_6588.png"/></picture> that will be explained in detail in a moment.</li>
+<li>the diagonal entries of the viscosity matrix are defined as <picture><source srcset="form_6589_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_{ii} = - \sum_{j \in \mathcal{I}(i)\backslash \{i\}} d_{ij}$" src="form_6589.png"/></picture>.</li>
+<li><picture><source srcset="form_6590_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{n}_{ij} = \frac{\mathbf{c}_{ij}}{ \|\mathbf{c}_{ij}\| }$" src="form_6590.png"/></picture> is a normalization of the <picture><source srcset="form_6591_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{c}_{ij}$" src="form_6591.png"/></picture> matrix that enters the approximate Riemann solver with which we compute an the approximations <picture><source srcset="form_6588_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{\text{max}}$" src="form_6588.png"/></picture> on the local wavespeed. (This will be explained further down below).</li>
 </ul>
-<p>The definition of <picture><source srcset="form_6632_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{\text{max}} (\mathbf{U},\mathbf{V},
-\textbf{n})$" src="form_6632.png"/></picture> is far from trivial and we will postpone the precise definition in order to focus first on some algorithmic and implementation questions. We note that</p><ul>
-<li><picture><source srcset="form_6633_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_i$" src="form_6633.png"/></picture> and <picture><source srcset="form_6634_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{c}_{ij}$" src="form_6634.png"/></picture> do not evolve in time (provided we keep the discretization fixed). It thus makes sense to assemble these matrices/vectors once in a so called <em>offline computation</em> and reuse them in every time step. They are part of what we are going to call off-line data.</li>
-<li>At every time step we have to evaluate <picture><source srcset="form_6620_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{f}(\mathbf{U}_j^{n})$" src="form_6620.png"/></picture> and  <picture><source srcset="form_6638_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_{ij} \dealcoloneq \max \{ \lambda_{\text{max}}
+<p>The definition of <picture><source srcset="form_6592_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_{\text{max}} (\mathbf{U},\mathbf{V},
+\textbf{n})$" src="form_6592.png"/></picture> is far from trivial and we will postpone the precise definition in order to focus first on some algorithmic and implementation questions. We note that</p><ul>
+<li><picture><source srcset="form_6593_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$m_i$" src="form_6593.png"/></picture> and <picture><source srcset="form_6594_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{c}_{ij}$" src="form_6594.png"/></picture> do not evolve in time (provided we keep the discretization fixed). It thus makes sense to assemble these matrices/vectors once in a so called <em>offline computation</em> and reuse them in every time step. They are part of what we are going to call off-line data.</li>
+<li>At every time step we have to evaluate <picture><source srcset="form_6580_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{f}(\mathbf{U}_j^{n})$" src="form_6580.png"/></picture> and  <picture><source srcset="form_6595_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d_{ij} \dealcoloneq \max \{ \lambda_{\text{max}}
     (\mathbf{U}_i^{n},\mathbf{U}_j^{n}, \textbf{n}_{ij}),
     \lambda_{\text{max}} (\mathbf{U}_j^{n}, \mathbf{U}_i^{n},
-    \textbf{n}_{ji}) \} \|\mathbf{c}_{ij}\| $" src="form_6638.png"/></picture>, which will constitute the bulk of the computational cost.</li>
+    \textbf{n}_{ji}) \} \|\mathbf{c}_{ij}\| $" src="form_6595.png"/></picture>, which will constitute the bulk of the computational cost.</li>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_7.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_7.html	2024-03-17 21:57:48.919268119 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_7.html	2024-03-17 21:57:48.923268144 +0000
@@ -147,68 +147,68 @@
 <p>Besides these topics, again a variety of improvements and tricks will be shown.</p>
 <p><a class="anchor" id="Verificationofcorrectness"></a></p><h3>Verification of correctness</h3>
 <p>There has probably never been a non-trivial finite element program that worked right from the start. It is therefore necessary to find ways to verify whether a computed solution is correct or not. Usually, this is done by choosing the set-up of a simulation in such a way that <em>we know the exact continuous solution</em> and <em>evaluate the difference between continuous and computed discrete solution</em>. If this difference converges to zero with the right order of convergence, this is already a good indication of correctness, although there may be other sources of error persisting which have only a small contribution to the total error or are of higher order. In the context of finite element simulations, this technique of picking the solution by choosing appropriate right hand sides and boundary conditions is often called the <em>Method of Manufactured Solution</em>. (We will come back to how exactly we construct the solution in this method below, after discussing the equation we want to solve.)</p>
-<p>In this example, we will not go into the theories of systematic software verification which is a complicated problem in general. Rather we will demonstrate the tools which deal.II can offer in this respect. This is basically centered around the functionality of a single function, <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::integrate_difference()</a>. This function computes the difference between a given continuous function and a finite element field in various norms on each cell. Of course, like with any other integral, we can only evaluate these norms using quadrature formulas; the choice of the right quadrature formula is therefore crucial to the accurate evaluation of the error. This holds in particular for the <picture><source srcset="form_1691_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_\infty$" src="form_1691.png"/></picture> norm, where we evaluate the maximal deviation of numerical and exact solution only at the quadrature points; one should then not try to use a quadrature rule whose evaluation occurs only at points where <a href="https://en.wikipedia.org/wiki/Superconvergence">super-convergence</a> might occur, such as the Gauss points of the lowest-order Gauss quadrature formula for which the integrals in the assembly of the matrix is correct (e.g., for linear elements, do not use the <a class="el" href="classQGauss.html">QGauss(2)</a> quadrature formula). In fact, this is generally good advice also for the other norms: if your quadrature points are fortuitously chosen at locations where the error happens to be particularly small due to superconvergence, the computed error will look like it is much smaller than it really is and may even suggest a higher convergence order. Consequently, we will choose a different quadrature formula for the integration of these error norms than for the assembly of the linear system.</p>
-<p>The function <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::integrate_difference()</a> evaluates the desired norm on each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> of the triangulation and returns a vector which holds these values for each cell. From the local values, we can then obtain the global error. For example, if the vector <picture><source srcset="form_6361_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf e$" src="form_6361.png"/></picture> with element <picture><source srcset="form_6362_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_K$" src="form_6362.png"/></picture> for all cells <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> contains the local <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norms <picture><source srcset="form_6363_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|_K$" src="form_6363.png"/></picture>, then  </p><p class="formulaDsp">
-<picture><source srcset="form_6364_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>In this example, we will not go into the theories of systematic software verification which is a complicated problem in general. Rather we will demonstrate the tools which deal.II can offer in this respect. This is basically centered around the functionality of a single function, <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::integrate_difference()</a>. This function computes the difference between a given continuous function and a finite element field in various norms on each cell. Of course, like with any other integral, we can only evaluate these norms using quadrature formulas; the choice of the right quadrature formula is therefore crucial to the accurate evaluation of the error. This holds in particular for the <picture><source srcset="form_1694_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_\infty$" src="form_1694.png"/></picture> norm, where we evaluate the maximal deviation of numerical and exact solution only at the quadrature points; one should then not try to use a quadrature rule whose evaluation occurs only at points where <a href="https://en.wikipedia.org/wiki/Superconvergence">super-convergence</a> might occur, such as the Gauss points of the lowest-order Gauss quadrature formula for which the integrals in the assembly of the matrix is correct (e.g., for linear elements, do not use the <a class="el" href="classQGauss.html">QGauss(2)</a> quadrature formula). In fact, this is generally good advice also for the other norms: if your quadrature points are fortuitously chosen at locations where the error happens to be particularly small due to superconvergence, the computed error will look like it is much smaller than it really is and may even suggest a higher convergence order. Consequently, we will choose a different quadrature formula for the integration of these error norms than for the assembly of the linear system.</p>
+<p>The function <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::integrate_difference()</a> evaluates the desired norm on each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> of the triangulation and returns a vector which holds these values for each cell. From the local values, we can then obtain the global error. For example, if the vector <picture><source srcset="form_6690_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf e$" src="form_6690.png"/></picture> with element <picture><source srcset="form_6691_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_K$" src="form_6691.png"/></picture> for all cells <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> contains the local <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norms <picture><source srcset="form_6692_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|_K$" src="form_6692.png"/></picture>, then  </p><p class="formulaDsp">
+<picture><source srcset="form_6693_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E = \| {\mathbf e} \| = \left( \sum_K e_K^2 \right)^{1/2}
-\]" src="form_6364.png"/></picture>
+\]" src="form_6693.png"/></picture>
 </p>
-<p> is the global <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> error <picture><source srcset="form_6365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E=\|u-u_h\|_\Omega$" src="form_6365.png"/></picture>.</p>
+<p> is the global <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> error <picture><source srcset="form_6694_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E=\|u-u_h\|_\Omega$" src="form_6694.png"/></picture>.</p>
 <p>In the program, we will show how to evaluate and use these quantities, and we will monitor their values under mesh refinement. Of course, we have to choose the problem at hand such that we can explicitly state the solution and its derivatives, but since we want to evaluate the correctness of the program, this is only reasonable. If we know that the program produces the correct solution for one (or, if one wants to be really sure: many) specifically chosen right hand sides, we can be rather confident that it will also compute the correct solution for problems where we don't know the exact values.</p>
 <p>In addition to simply computing these quantities, we will show how to generate nicely formatted tables from the data generated by this program that automatically computes convergence rates etc. In addition, we will compare different strategies for mesh refinement.</p>
 <p><a class="anchor" id="NonhomogeneousNeumannboundaryconditions"></a></p><h3>Non-homogeneous Neumann boundary conditions</h3>
 <p>The second, totally unrelated, subject of this example program is the use of non-homogeneous boundary conditions. These are included into the variational form using boundary integrals which we have to evaluate numerically when assembling the right hand side vector.</p>
 <p>Before we go into programming, let's have a brief look at the mathematical formulation. The equation that we want to solve here is the Helmholtz equation "with the nice sign":  </p><p class="formulaDsp">
-<picture><source srcset="form_6366_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6695_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   -\Delta u + \alpha u = f,
-\]" src="form_6366.png"/></picture>
+\]" src="form_6695.png"/></picture>
 </p>
-<p> on the square <picture><source srcset="form_3258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^2$" src="form_3258.png"/></picture> with <picture><source srcset="form_2862_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha=1$" src="form_2862.png"/></picture>, augmented by Dirichlet boundary conditions  </p><p class="formulaDsp">
-<picture><source srcset="form_6367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> on the square <picture><source srcset="form_3400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^2$" src="form_3400.png"/></picture> with <picture><source srcset="form_2903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha=1$" src="form_2903.png"/></picture>, augmented by Dirichlet boundary conditions  </p><p class="formulaDsp">
+<picture><source srcset="form_6696_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   u = g_1
-\]" src="form_6367.png"/></picture>
+\]" src="form_6696.png"/></picture>
 </p>
-<p> on some part <picture><source srcset="form_3730_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1$" src="form_3730.png"/></picture> of the boundary <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, and Neumann conditions  </p><p class="formulaDsp">
-<picture><source srcset="form_6368_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> on some part <picture><source srcset="form_3834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1$" src="form_3834.png"/></picture> of the boundary <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, and Neumann conditions  </p><p class="formulaDsp">
+<picture><source srcset="form_6697_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   {\mathbf n}\cdot \nabla u = g_2
-\]" src="form_6368.png"/></picture>
+\]" src="form_6697.png"/></picture>
 </p>
-<p> on the rest <picture><source srcset="form_6369_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2 = \Gamma \backslash \Gamma_1$" src="form_6369.png"/></picture>. In our particular testcase, we will use <picture><source srcset="form_6370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1=\Gamma \cap\{\{x=1\}
-\cup \{y=1\}\}$" src="form_6370.png"/></picture>. (We say that this equation has the "nice sign" because the operator <picture><source srcset="form_6371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta + \alpha I$" src="form_6371.png"/></picture> with the identity <picture><source srcset="form_2098_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I$" src="form_2098.png"/></picture> and <picture><source srcset="form_3175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha&gt;0$" src="form_3175.png"/></picture> is a positive definite operator; the <a href="https://en.wikipedia.org/wiki/Helmholtz_equation">equation with the "bad sign"</a> is <picture><source srcset="form_6372_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u - \alpha u$" src="form_6372.png"/></picture> and results from modeling time-harmonic processes. For the equation with the "bad sign", the operator <picture><source srcset="form_6373_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta-\alpha I$" src="form_6373.png"/></picture> is not positive definite if <picture><source srcset="form_3175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha&gt;0$" src="form_3175.png"/></picture> is large, and this leads to all sorts of issues we need not discuss here. The operator may also not be invertible &ndash; i.e., the equation does not have a unique solution &ndash; if <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture> happens to be one of the eigenvalues of <picture><source srcset="form_6374_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta$" src="form_6374.png"/></picture>.)</p>
-<p>Using the above definitions, we can state the weak formulation of the equation, which reads: find <picture><source srcset="form_6375_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in H^1_g=\{v\in H^1: v|_{\Gamma_1}=g_1\}$" src="form_6375.png"/></picture> such that  </p><p class="formulaDsp">
-<picture><source srcset="form_6376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> on the rest <picture><source srcset="form_6698_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2 = \Gamma \backslash \Gamma_1$" src="form_6698.png"/></picture>. In our particular testcase, we will use <picture><source srcset="form_6699_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1=\Gamma \cap\{\{x=1\}
+\cup \{y=1\}\}$" src="form_6699.png"/></picture>. (We say that this equation has the "nice sign" because the operator <picture><source srcset="form_6700_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta + \alpha I$" src="form_6700.png"/></picture> with the identity <picture><source srcset="form_2089_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I$" src="form_2089.png"/></picture> and <picture><source srcset="form_3082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha&gt;0$" src="form_3082.png"/></picture> is a positive definite operator; the <a href="https://en.wikipedia.org/wiki/Helmholtz_equation">equation with the "bad sign"</a> is <picture><source srcset="form_6701_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta u - \alpha u$" src="form_6701.png"/></picture> and results from modeling time-harmonic processes. For the equation with the "bad sign", the operator <picture><source srcset="form_6702_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta-\alpha I$" src="form_6702.png"/></picture> is not positive definite if <picture><source srcset="form_3082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha&gt;0$" src="form_3082.png"/></picture> is large, and this leads to all sorts of issues we need not discuss here. The operator may also not be invertible &ndash; i.e., the equation does not have a unique solution &ndash; if <picture><source srcset="form_165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_165.png"/></picture> happens to be one of the eigenvalues of <picture><source srcset="form_6703_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\Delta$" src="form_6703.png"/></picture>.)</p>
+<p>Using the above definitions, we can state the weak formulation of the equation, which reads: find <picture><source srcset="form_6704_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in H^1_g=\{v\in H^1: v|_{\Gamma_1}=g_1\}$" src="form_6704.png"/></picture> such that  </p><p class="formulaDsp">
+<picture><source srcset="form_6705_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   {(\nabla v, \nabla u)}_\Omega + {(v,u)}_\Omega
   =
   {(v,f)}_\Omega + {(v,g_2)}_{\Gamma_2}
-\]" src="form_6376.png"/></picture>
+\]" src="form_6705.png"/></picture>
 </p>
-<p> for all test functions <picture><source srcset="form_6377_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v\in H^1_0=\{v\in H^1: v|_{\Gamma_1}=0\}$" src="form_6377.png"/></picture>. The boundary term <picture><source srcset="form_6378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${(v,g_2)}_{\Gamma_2}$" src="form_6378.png"/></picture> has appeared by integration by parts and using <picture><source srcset="form_6379_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_n u=g_2$" src="form_6379.png"/></picture> on <picture><source srcset="form_3732_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3732.png"/></picture> and <picture><source srcset="form_6380_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v=0$" src="form_6380.png"/></picture> on <picture><source srcset="form_3730_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1$" src="form_3730.png"/></picture>. The cell matrices and vectors which we use to build the global matrices and right hand side vectors in the discrete formulation therefore look like this:  </p><p class="formulaDsp">
-<picture><source srcset="form_6381_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p> for all test functions <picture><source srcset="form_6706_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v\in H^1_0=\{v\in H^1: v|_{\Gamma_1}=0\}$" src="form_6706.png"/></picture>. The boundary term <picture><source srcset="form_6707_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${(v,g_2)}_{\Gamma_2}$" src="form_6707.png"/></picture> has appeared by integration by parts and using <picture><source srcset="form_6708_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_n u=g_2$" src="form_6708.png"/></picture> on <picture><source srcset="form_3836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_2$" src="form_3836.png"/></picture> and <picture><source srcset="form_6709_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v=0$" src="form_6709.png"/></picture> on <picture><source srcset="form_3834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma_1$" src="form_3834.png"/></picture>. The cell matrices and vectors which we use to build the global matrices and right hand side vectors in the discrete formulation therefore look like this:  </p><p class="formulaDsp">
+<picture><source srcset="form_6710_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   A_{ij}^K &amp;=&amp; \left(\nabla \varphi_i, \nabla \varphi_j\right)_K
               +\left(\varphi_i, \varphi_j\right)_K,
   \\
   F_i^K &amp;=&amp; \left(\varphi_i, f\right)_K
            +\left(\varphi_i, g_2\right)_{\partial K\cap \Gamma_2}.
-\end{eqnarray*}" src="form_6381.png"/></picture>
+\end{eqnarray*}" src="form_6710.png"/></picture>
 </p>
 <p> Since the generation of the domain integrals has been shown in previous examples several times, only the generation of the contour integral is of interest here. It basically works along the following lines: for domain integrals we have the <code><a class="el" href="classFEValues.html">FEValues</a></code> class that provides values and gradients of the shape values, as well as Jacobian determinants and other information and specified quadrature points in the cell; likewise, there is a class <code><a class="el" href="classFEFaceValues.html">FEFaceValues</a></code> that performs these tasks for integrations on faces of cells. One provides it with a quadrature formula for a manifold with dimension one less than the dimension of the domain is, and the cell and the number of its face on which we want to perform the integration. The class will then compute the values, gradients, normal vectors, weights, etc. at the quadrature points on this face, which we can then use in the same way as for the domain integrals. The details of how this is done are shown in the following program.</p>
 <p><a class="anchor" id="Themethodofmanufacturedsolutions"></a></p><h3>The method of manufactured solutions</h3>
-<p>Because we want to verify the convergence of our numerical solution <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture>, we want a setup so that we know the exact solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture>. This is where the Method of Manufactured Solutions comes in: Let us choose a function  </p><p class="formulaDsp">
-<picture><source srcset="form_6382_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Because we want to verify the convergence of our numerical solution <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture>, we want a setup so that we know the exact solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture>. This is where the Method of Manufactured Solutions comes in: Let us choose a function  </p><p class="formulaDsp">
+<picture><source srcset="form_6711_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \bar u(\mathbf x) =
   \sum_{i=1}^3 \exp\left(-\frac{|\mathbf x-\mathbf x_i|^2}{\sigma^2}\right)
-\]" src="form_6382.png"/></picture>
+\]" src="form_6711.png"/></picture>
 </p>
-<p> where the centers <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture> of the exponentials are <picture><source srcset="form_6383_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1=(-\frac 12,\frac 12)$" src="form_6383.png"/></picture>, <picture><source srcset="form_6384_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2=(-\frac 12,-\frac 12)$" src="form_6384.png"/></picture>, and <picture><source srcset="form_6385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_3=(\frac 12,-\frac 12)$" src="form_6385.png"/></picture>, and the half width is set to <picture><source srcset="form_6386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma=\frac {1}{8}$" src="form_6386.png"/></picture>. The method of manufactured solution then says: choose  </p><p class="formulaDsp">
-<picture><source srcset="form_6387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> where the centers <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture> of the exponentials are <picture><source srcset="form_6712_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_1=(-\frac 12,\frac 12)$" src="form_6712.png"/></picture>, <picture><source srcset="form_6713_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_2=(-\frac 12,-\frac 12)$" src="form_6713.png"/></picture>, and <picture><source srcset="form_6714_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x_3=(\frac 12,-\frac 12)$" src="form_6714.png"/></picture>, and the half width is set to <picture><source srcset="form_6715_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma=\frac {1}{8}$" src="form_6715.png"/></picture>. The method of manufactured solution then says: choose  </p><p class="formulaDsp">
+<picture><source srcset="form_6716_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   f &amp;= -\Delta \bar u + \bar u, \\
   g_1 &amp;= \bar u|_{\Gamma_1}, \\
   g_2 &amp;= {\mathbf n}\cdot \nabla\bar u|_{\Gamma_2}.
-\end{align*}" src="form_6387.png"/></picture>
+\end{align*}" src="form_6716.png"/></picture>
 </p>
-<p> With this particular choice for <picture><source srcset="form_6388_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f,g_1,g_2$" src="form_6388.png"/></picture>, the solution of the original problem must necessarily be <picture><source srcset="form_6389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=\bar u$" src="form_6389.png"/></picture>. In other words, by choosing the right hand sides of the equation and the boundary conditions in a particular way, we have manufactured ourselves a problem to which we know the solution &ndash; a very useful case given that in all but the very simplest cases, PDEs do not have solutions we can just write down. This then allows us to compute the error of our numerical solution. In the code below, we represent <picture><source srcset="form_6390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u$" src="form_6390.png"/></picture> by the <code>Solution</code> class, and other classes will be used to denote <picture><source srcset="form_6391_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u|_{\Gamma_1}=g_1$" src="form_6391.png"/></picture> and <picture><source srcset="form_6392_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf n}\cdot \nabla\bar u|_{\Gamma_2}=g_2$" src="form_6392.png"/></picture>.</p>
-<dl class="section note"><dt>Note</dt><dd>In principle, you can choose whatever you want for the function <picture><source srcset="form_6390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u$" src="form_6390.png"/></picture> above &ndash; here we have simply chosen a sum of three exponentials. In practice, there are two considerations you want to take into account: (i) The function must be simple enough so that you can compute derivatives of the function with not too much effort, for example in order to determine what <picture><source srcset="form_6393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f = -\Delta \bar u + \bar u$" src="form_6393.png"/></picture> is. Since the derivative of an exponential is relatively straightforward to compute, the choice above satisfies this requirement, whereas a function of the kind <picture><source srcset="form_6394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u(\mathbf x) = \text{atan}\left(\|\mathbf x\|^{\|\mathbf x\|}\right)$" src="form_6394.png"/></picture> would have presented greater difficulties. (ii) You <em>don't</em> want <picture><source srcset="form_6390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u$" src="form_6390.png"/></picture> be a polynomial of low degree. That is because if you choose the polynomial degree of your finite element sufficiently high, you can <em>exactly</em> represent this <picture><source srcset="form_6390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u$" src="form_6390.png"/></picture> with the numerical solution <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture>, making the error zero regardless of how coarse or fine the mesh is. Verifying that this is so is a useful step, but it will not allow you to verify the correct order of convergence of <picture><source srcset="form_6395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|$" src="form_6395.png"/></picture> as a function of the mesh size <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> in the general case of arbitrary <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture>. (iii) The typical finite element error estimates assume sufficiently smooth solutions, i.e., sufficiently smooth domains, right-hand sides <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> and boundary conditions. As a consequence, you should choose a smooth solution <picture><source srcset="form_6390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u$" src="form_6390.png"/></picture> &ndash; for example, it shouldn't have kinks. (iv) You want a solution whose variations can be resolved on the meshes you consider to test convergence. For example, if you were to choose <picture><source srcset="form_6396_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u(\mathbf x)=\sin(1000 x_1)\sin(1000 x_2)$" src="form_6396.png"/></picture>, you shouldn't be surprised if you don't observe that the error decreases at the expected rate until your mesh is fine enough to actually resolve the high-frequency oscillations with substantially more than 1,000 mesh cells in each coordinate direction.</dd></dl>
-<p>The solution <picture><source srcset="form_6390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u$" src="form_6390.png"/></picture> we choose here satisfies all of these requirements: (i) It is relatively straightforward to differentiate; (ii) it is not a polynomial; (iii) it is smooth; and (iv) it has a length scale of <picture><source srcset="form_6386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma=\frac {1}{8}$" src="form_6386.png"/></picture> which, on the domain <picture><source srcset="form_464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^d$" src="form_464.png"/></picture> is relatively straightforward to resolve with 16 or more cells in each coordinate direction.</p>
+<p> With this particular choice for <picture><source srcset="form_6717_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f,g_1,g_2$" src="form_6717.png"/></picture>, the solution of the original problem must necessarily be <picture><source srcset="form_6718_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u=\bar u$" src="form_6718.png"/></picture>. In other words, by choosing the right hand sides of the equation and the boundary conditions in a particular way, we have manufactured ourselves a problem to which we know the solution &ndash; a very useful case given that in all but the very simplest cases, PDEs do not have solutions we can just write down. This then allows us to compute the error of our numerical solution. In the code below, we represent <picture><source srcset="form_6719_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u$" src="form_6719.png"/></picture> by the <code>Solution</code> class, and other classes will be used to denote <picture><source srcset="form_6720_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u|_{\Gamma_1}=g_1$" src="form_6720.png"/></picture> and <picture><source srcset="form_6721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf n}\cdot \nabla\bar u|_{\Gamma_2}=g_2$" src="form_6721.png"/></picture>.</p>
+<dl class="section note"><dt>Note</dt><dd>In principle, you can choose whatever you want for the function <picture><source srcset="form_6719_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u$" src="form_6719.png"/></picture> above &ndash; here we have simply chosen a sum of three exponentials. In practice, there are two considerations you want to take into account: (i) The function must be simple enough so that you can compute derivatives of the function with not too much effort, for example in order to determine what <picture><source srcset="form_6722_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f = -\Delta \bar u + \bar u$" src="form_6722.png"/></picture> is. Since the derivative of an exponential is relatively straightforward to compute, the choice above satisfies this requirement, whereas a function of the kind <picture><source srcset="form_6723_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u(\mathbf x) = \text{atan}\left(\|\mathbf x\|^{\|\mathbf x\|}\right)$" src="form_6723.png"/></picture> would have presented greater difficulties. (ii) You <em>don't</em> want <picture><source srcset="form_6719_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u$" src="form_6719.png"/></picture> be a polynomial of low degree. That is because if you choose the polynomial degree of your finite element sufficiently high, you can <em>exactly</em> represent this <picture><source srcset="form_6719_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u$" src="form_6719.png"/></picture> with the numerical solution <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture>, making the error zero regardless of how coarse or fine the mesh is. Verifying that this is so is a useful step, but it will not allow you to verify the correct order of convergence of <picture><source srcset="form_6724_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|$" src="form_6724.png"/></picture> as a function of the mesh size <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> in the general case of arbitrary <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture>. (iii) The typical finite element error estimates assume sufficiently smooth solutions, i.e., sufficiently smooth domains, right-hand sides <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> and boundary conditions. As a consequence, you should choose a smooth solution <picture><source srcset="form_6719_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u$" src="form_6719.png"/></picture> &ndash; for example, it shouldn't have kinks. (iv) You want a solution whose variations can be resolved on the meshes you consider to test convergence. For example, if you were to choose <picture><source srcset="form_6725_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u(\mathbf x)=\sin(1000 x_1)\sin(1000 x_2)$" src="form_6725.png"/></picture>, you shouldn't be surprised if you don't observe that the error decreases at the expected rate until your mesh is fine enough to actually resolve the high-frequency oscillations with substantially more than 1,000 mesh cells in each coordinate direction.</dd></dl>
+<p>The solution <picture><source srcset="form_6719_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar u$" src="form_6719.png"/></picture> we choose here satisfies all of these requirements: (i) It is relatively straightforward to differentiate; (ii) it is not a polynomial; (iii) it is smooth; and (iv) it has a length scale of <picture><source srcset="form_6715_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma=\frac {1}{8}$" src="form_6715.png"/></picture> which, on the domain <picture><source srcset="form_464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[-1,1]^d$" src="form_464.png"/></picture> is relatively straightforward to resolve with 16 or more cells in each coordinate direction.</p>
 <p><a class="anchor" id="Anoteongoodprogrammingpractice"></a></p><h3>A note on good programming practice</h3>
 <p>Besides the mathematical topics outlined above, we also want to use this program to illustrate one aspect of good programming practice, namely the use of namespaces. In programming the deal.II library, we have take great care not to use names for classes and global functions that are overly generic, say <code>f(), sz(), rhs()</code> etc. Furthermore, we have put everything into namespace <code>dealii</code>. But when one writes application programs that aren't meant for others to use, one doesn't always pay this much attention. If you follow the programming style of <a class="el" href="step_1.html">step-1</a> through <a class="el" href="step_6.html">step-6</a>, these functions then end up in the global namespace where, unfortunately, a lot of other stuff also lives (basically everything the C language provides, along with everything you get from the operating system through header files). To make things a bit worse, the designers of the C language were also not always careful in avoiding generic names; for example, the symbols <code>j1, jn</code> are defined in C header files (they denote Bessel functions).</p>
 <p>To avoid the problems that result if names of different functions or variables collide (often with confusing error messages), it is good practice to put everything you do into a <a href="http://en.wikipedia.org/wiki/Namespace_(computer_science)">namespace</a>. Following this style, we will open a namespace <code>Step7</code> at the top of the program, import the deal.II namespace into it, put everything that's specific to this program (with the exception of <code>main()</code>, which must be in the global namespace) into it, and only close it at the bottom of the file. In other words, the structure of the program is of the kind </p><div class="fragment"><div class="line"><span class="preprocessor">#href_anchor"line"> </div>
@@ -743,7 +743,7 @@
 <div class="line">  </div>
 <div class="ttc" id="anamespaceVectorTools_html_a69967cb7a148a7169963126249213db1a1048f76e7fb0aea6e654ff1cf036a65f"><div class="ttname"><a href="namespaceVectorTools.html#href_anchor">VectorTools::H1_seminorm</a></div><div class="ttdeci">@ H1_seminorm</div><div class="ttdef"><b>Definition</b> <a href="vector__tools__common_8h_source.html#href_anchor">vector_tools_common.h:165</a></div></div>
 </div><!-- fragment --><p>Finally, we compute the maximum norm. Of course, we can't actually compute the true maximum of the error over <em>all</em> points in the domain, but only the maximum over a finite set of evaluation points that, for convenience, we will still call "quadrature points" and represent by an object of type <a class="el" href="classQuadrature.html">Quadrature</a> even though we do not actually perform any integration.</p>
-<p>There is then the question of what points precisely we want to evaluate at. It turns out that the result we get depends quite sensitively on the "quadrature" points being used. There is also the issue of superconvergence: Finite element solutions are, on some meshes and for polynomial degrees <picture><source srcset="form_6409_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k\ge 2$" src="form_6409.png"/></picture>, particularly accurate at the node points as well as at Gauss-Lobatto points, much more accurate than at randomly chosen points. (See <b>[Li2019]</b> and the discussion and references in Section 1.2 for more information on this.) In other words, if we are interested in finding the largest difference <picture><source srcset="form_6412_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)-u_h(\mathbf x)$" src="form_6412.png"/></picture>, then we ought to look at points <picture><source srcset="form_216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_216.png"/></picture> that are specifically not of this "special" kind of points and we should specifically not use <code><a class="el" href="classQGauss.html">QGauss</a>(fe-&gt;degree+1)</code> to define where we evaluate. Rather, we use a special quadrature rule that is obtained by iterating the trapezoidal rule by the degree of the finite element times two plus one in each space direction. Note that the constructor of the <a class="el" href="classQIterated.html">QIterated</a> class takes a one-dimensional quadrature rule and a number that tells it how often it shall repeat this rule in each space direction.</p>
+<p>There is then the question of what points precisely we want to evaluate at. It turns out that the result we get depends quite sensitively on the "quadrature" points being used. There is also the issue of superconvergence: Finite element solutions are, on some meshes and for polynomial degrees <picture><source srcset="form_6726_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k\ge 2$" src="form_6726.png"/></picture>, particularly accurate at the node points as well as at Gauss-Lobatto points, much more accurate than at randomly chosen points. (See <b>[Li2019]</b> and the discussion and references in Section 1.2 for more information on this.) In other words, if we are interested in finding the largest difference <picture><source srcset="form_6727_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)-u_h(\mathbf x)$" src="form_6727.png"/></picture>, then we ought to look at points <picture><source srcset="form_190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_190.png"/></picture> that are specifically not of this "special" kind of points and we should specifically not use <code><a class="el" href="classQGauss.html">QGauss</a>(fe-&gt;degree+1)</code> to define where we evaluate. Rather, we use a special quadrature rule that is obtained by iterating the trapezoidal rule by the degree of the finite element times two plus one in each space direction. Note that the constructor of the <a class="el" href="classQIterated.html">QIterated</a> class takes a one-dimensional quadrature rule and a number that tells it how often it shall repeat this rule in each space direction.</p>
 <p>Using this special quadrature rule, we can then try to find the maximal error on each cell. Finally, we compute the global L infinity error from the L infinity errors on each cell with a call to <a class="el" href="namespaceVectorTools.html#href_anchor">VectorTools::compute_global_error</a>.</p>
 <div class="fragment"><div class="line">      <span class="keyword">const</span> <a class="code hl_class" href="classQTrapezoid.html">QTrapezoid&lt;1&gt;</a>  q_trapez;</div>
 <div class="line">      <span class="keyword">const</span> <a class="code hl_class" href="classQIterated.html">QIterated&lt;dim&gt;</a> q_iterated(q_trapez, fe-&gt;<a class="code hl_variable" href="classFiniteElementData.html#href_anchor">degree</a> * 2 + 1);</div>
@@ -876,7 +876,7 @@
 <div class="line">      convergence_table.set_scientific(<span class="stringliteral">&quot;H1&quot;</span>, <span class="keyword">true</span>);</div>
 <div class="line">      convergence_table.set_scientific(<span class="stringliteral">&quot;Linfty&quot;</span>, <span class="keyword">true</span>);</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>For the output of a table into a LaTeX file, the default captions of the columns are the keys given as argument to the <code>add_value</code> functions. To have TeX captions that differ from the default ones you can specify them by the following function calls. Note, that &lsquo;\&rsquo; is reduced to &lsquo;&amp;rsquo; by the compiler such that the real TeX caption is, e.g., &lsquo; <picture><source srcset="form_2806_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^\infty$" src="form_2806.png"/></picture>-error&rsquo;.</p>
+</div><!-- fragment --><p>For the output of a table into a LaTeX file, the default captions of the columns are the keys given as argument to the <code>add_value</code> functions. To have TeX captions that differ from the default ones you can specify them by the following function calls. Note, that &lsquo;\&rsquo; is reduced to &lsquo;&amp;rsquo; by the compiler such that the real TeX caption is, e.g., &lsquo; <picture><source srcset="form_2799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^\infty$" src="form_2799.png"/></picture>-error&rsquo;.</p>
 <div class="fragment"><div class="line">      convergence_table.set_tex_caption(<span class="stringliteral">&quot;cells&quot;</span>, <span class="stringliteral">&quot;\\# cells&quot;</span>);</div>
 <div class="line">      convergence_table.set_tex_caption(<span class="stringliteral">&quot;dofs&quot;</span>, <span class="stringliteral">&quot;\\# dofs&quot;</span>);</div>
 <div class="line">      convergence_table.set_tex_caption(<span class="stringliteral">&quot;L2&quot;</span>, <span class="stringliteral">&quot;L^2-error&quot;</span>);</div>
@@ -1245,10 +1245,10 @@
 </div><!-- fragment --><p>One can see the error reduction upon grid refinement, and for the cases where global refinement was performed, also the convergence rates can be seen. The linear and quadratic convergence rates of Q1 and Q2 elements in the <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture> semi-norm can clearly be seen, as are the quadratic and cubic rates in the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> norm.</p>
 <p>Finally, the program also generated LaTeX versions of the tables (not shown here) that is written into a file in a way so that it could be copy-pasted into a LaTeX document.</p>
 <p><a class="anchor" id="Whenistheerrorsmall"></a></p><h3>When is the error "small"? </h3>
-<p>What we showed above is how to determine the size of the error <picture><source srcset="form_6395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|$" src="form_6395.png"/></picture> in a number of different norms. We did this primarily because we were interested in testing that our solutions <em>converge</em>. But from an engineering perspective, the question is often more practical: How fine do I have to make my mesh so that the error is "small enough"? In other words, if in the table above the <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture> semi-norm has been reduced to <code>4.121e-03</code>, is this good enough for me to sign the blueprint and declare that our numerical simulation showed that the bridge is strong enough?</p>
-<p>In practice, we are rarely in this situation because I can not typically compare the numerical solution <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> against the exact solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> in situations that matter &ndash; if I knew <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture>, I would not have to compute <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture>. But even if I could, the question to ask in general is then: <code>4.121e-03</code> <em>what</em>? The solution will have physical units, say kg-times-meter-squared, and I'm integrating a function with units square of the above over the domain, and then take the square root. So if the domain is two-dimensional, the units of <picture><source srcset="form_5221_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|_{L_2}$" src="form_5221.png"/></picture> are kg-times-meter-cubed. The question is then: Is <picture><source srcset="form_6487_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$4.121\times 10^{-3}$" src="form_6487.png"/></picture> kg-times-meter-cubed small? That depends on what you're trying to simulate: If you're an astronomer used to masses measured in solar masses and distances in light years, then yes, this is a fantastically small number. But if you're doing atomic physics, then no: That's not small, and your error is most certainly not sufficiently small; you need a finer mesh.</p>
-<p>In other words, when we look at these sorts of numbers, we generally need to compare against a "scale". One way to do that is to not look at the <em>absolute</em> error <picture><source srcset="form_6395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|$" src="form_6395.png"/></picture> in whatever norm, but at the relative* error <picture><source srcset="form_6489_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|/\|u\|$" src="form_6489.png"/></picture>. If this ratio is <picture><source srcset="form_1957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-5}$" src="form_1957.png"/></picture>, then you know that <em>on average</em>, the difference between <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> and <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> is 0.001 per cent &ndash; probably small enough for engineering purposes.</p>
-<p>How do we compute <picture><source srcset="form_6492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u\|$" src="form_6492.png"/></picture>? We just need to do an integration loop over all cells, quadrature points on these cells, and then sum things up and take the square root at the end. But there is a simpler way often used: You can call </p><div class="fragment"><div class="line"><a class="code hl_class" href="classVector.html">Vector&lt;double&gt;</a> zero_vector (dof_handler.n_dofs());</div>
+<p>What we showed above is how to determine the size of the error <picture><source srcset="form_6724_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|$" src="form_6724.png"/></picture> in a number of different norms. We did this primarily because we were interested in testing that our solutions <em>converge</em>. But from an engineering perspective, the question is often more practical: How fine do I have to make my mesh so that the error is "small enough"? In other words, if in the table above the <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture> semi-norm has been reduced to <code>4.121e-03</code>, is this good enough for me to sign the blueprint and declare that our numerical simulation showed that the bridge is strong enough?</p>
+<p>In practice, we are rarely in this situation because I can not typically compare the numerical solution <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> against the exact solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> in situations that matter &ndash; if I knew <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture>, I would not have to compute <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture>. But even if I could, the question to ask in general is then: <code>4.121e-03</code> <em>what</em>? The solution will have physical units, say kg-times-meter-squared, and I'm integrating a function with units square of the above over the domain, and then take the square root. So if the domain is two-dimensional, the units of <picture><source srcset="form_5460_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|_{L_2}$" src="form_5460.png"/></picture> are kg-times-meter-cubed. The question is then: Is <picture><source srcset="form_6728_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$4.121\times 10^{-3}$" src="form_6728.png"/></picture> kg-times-meter-cubed small? That depends on what you're trying to simulate: If you're an astronomer used to masses measured in solar masses and distances in light years, then yes, this is a fantastically small number. But if you're doing atomic physics, then no: That's not small, and your error is most certainly not sufficiently small; you need a finer mesh.</p>
+<p>In other words, when we look at these sorts of numbers, we generally need to compare against a "scale". One way to do that is to not look at the <em>absolute</em> error <picture><source srcset="form_6724_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|$" src="form_6724.png"/></picture> in whatever norm, but at the relative* error <picture><source srcset="form_6729_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-u_h\|/\|u\|$" src="form_6729.png"/></picture>. If this ratio is <picture><source srcset="form_1957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-5}$" src="form_1957.png"/></picture>, then you know that <em>on average</em>, the difference between <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> and <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> is 0.001 per cent &ndash; probably small enough for engineering purposes.</p>
+<p>How do we compute <picture><source srcset="form_6730_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u\|$" src="form_6730.png"/></picture>? We just need to do an integration loop over all cells, quadrature points on these cells, and then sum things up and take the square root at the end. But there is a simpler way often used: You can call </p><div class="fragment"><div class="line"><a class="code hl_class" href="classVector.html">Vector&lt;double&gt;</a> zero_vector (dof_handler.n_dofs());</div>
 <div class="line"><a class="code hl_class" href="classVector.html">Vector&lt;float&gt;</a> norm_per_cell(<a class="code hl_variable" href="p4est__wrappers_8cc.html#href_anchor">triangulation</a>.n_active_cells());</div>
 <div class="line"><a class="code hl_function" href="namespaceVectorTools.html#href_anchor">VectorTools::integrate_difference</a>(dof_handler,</div>
 <div class="line">                                  zero_vector,</div>
@@ -1256,7 +1256,7 @@
 <div class="line">                                  norm_per_cell,</div>
 <div class="line">                                  <a class="code hl_class" href="classQGauss.html">QGauss&lt;dim&gt;</a>(fe-&gt;<a class="code hl_variable" href="classFiniteElementData.html#href_anchor">degree</a> + 1),</div>
 <div class="line">                                  <a class="code hl_enumvalue" href="namespaceVectorTools.html#href_anchor">VectorTools::L2_norm</a>);</div>
-</div><!-- fragment --><p> which computes <picture><source srcset="form_6495_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-0\|_{L_2}$" src="form_6495.png"/></picture>. Alternatively, if you're particularly lazy and don't feel like creating the <code>zero_vector</code>, you could use that if the mesh is not too coarse, then <picture><source srcset="form_6497_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u\| \approx \|u_h\|$" src="form_6497.png"/></picture>, and we can compute <picture><source srcset="form_6498_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u\| \approx \|u_h\|=\|0-u_h\|$" src="form_6498.png"/></picture> by calling </p><div class="fragment"><div class="line"><a class="code hl_class" href="classVector.html">Vector&lt;float&gt;</a> norm_per_cell(<a class="code hl_variable" href="p4est__wrappers_8cc.html#href_anchor">triangulation</a>.n_active_cells());</div>
+</div><!-- fragment --><p> which computes <picture><source srcset="form_6731_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u-0\|_{L_2}$" src="form_6731.png"/></picture>. Alternatively, if you're particularly lazy and don't feel like creating the <code>zero_vector</code>, you could use that if the mesh is not too coarse, then <picture><source srcset="form_6732_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u\| \approx \|u_h\|$" src="form_6732.png"/></picture>, and we can compute <picture><source srcset="form_6733_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|u\| \approx \|u_h\|=\|0-u_h\|$" src="form_6733.png"/></picture> by calling </p><div class="fragment"><div class="line"><a class="code hl_class" href="classVector.html">Vector&lt;float&gt;</a> norm_per_cell(<a class="code hl_variable" href="p4est__wrappers_8cc.html#href_anchor">triangulation</a>.n_active_cells());</div>
 <div class="line"><a class="code hl_function" href="namespaceVectorTools.html#href_anchor">VectorTools::integrate_difference</a>(dof_handler,</div>
 <div class="line">                                  solution,</div>
 <div class="line">                                  <a class="code hl_class" href="classFunctions_1_1ZeroFunction.html">Functions::ZeroFunction&lt;dim&gt;</a>(),</div>
@@ -1270,11 +1270,11 @@
 <div class="line">                                    <a class="code hl_enumvalue" href="namespaceVectorTools.html#href_anchor">VectorTools::L2_norm</a>);</div>
 </div><!-- fragment --><p><a class="anchor" id="Possibilitiesforextensions"></a></p><h3>Possibilities for extensions </h3>
 <p><a class="anchor" id="HigherOrderElements"></a></p><h4>Higher Order Elements </h4>
-<p>Go ahead and run the program with higher order elements ( <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture>, <picture><source srcset="form_1126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1126.png"/></picture>, ...). You will notice that assertions in several parts of the code will trigger (for example in the generation of the filename for the data output). You might have to address these, but it should not be very hard to get the program to work!</p>
+<p>Go ahead and run the program with higher order elements ( <picture><source srcset="form_950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_3$" src="form_950.png"/></picture>, <picture><source srcset="form_1099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_4$" src="form_1099.png"/></picture>, ...). You will notice that assertions in several parts of the code will trigger (for example in the generation of the filename for the data output). You might have to address these, but it should not be very hard to get the program to work!</p>
 <p><a class="anchor" id="ConvergenceComparison"></a></p><h4>Convergence Comparison </h4>
-<p>Is <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> or <picture><source srcset="form_92_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_92.png"/></picture> better? What about adaptive versus global refinement? A (somewhat unfair but typical) metric to compare them, is to look at the error as a function of the number of unknowns.</p>
-<p>To see this, create a plot in log-log style with the number of unknowns on the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> axis and the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> error on the <picture><source srcset="form_30_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_30.png"/></picture> axis. You can add reference lines for <picture><source srcset="form_6500_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^2=N^{-1}$" src="form_6500.png"/></picture> and <picture><source srcset="form_6501_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^3=N^{-3/2}$" src="form_6501.png"/></picture> and check that global and adaptive refinement follow those. If one makes the (not completely unreasonable) assumption that with a good linear solver, the computational effort is proportional to the number of unknowns <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture>, then it is clear that an error reduction of <picture><source srcset="form_6502_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N^{-3/2})$" src="form_6502.png"/></picture> is substantially better than a reduction of the form <picture><source srcset="form_6503_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N^{-1})$" src="form_6503.png"/></picture>: That is, that adaptive refinement gives us the desired error level with less computational work than if we used global refinement. This is not a particularly surprising conclusion, but it's worth checking these sorts of assumptions in practice.</p>
-<p>Of course, a fairer comparison would be to plot runtime (switch to release mode first!) instead of number of unknowns on the <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> axis. If you plotted run time (check out the <a class="el" href="classTimer.html">Timer</a> class!) against the number of unknowns by timing each refinement step, you will notice that the linear system solver we use in this program is not perfect &ndash; its run time grows faster than proportional to the linear system size &ndash; and picking a better linear solver might be appropriate for this kind of comparison.</p>
+<p>Is <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture> or <picture><source srcset="form_199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_2$" src="form_199.png"/></picture> better? What about adaptive versus global refinement? A (somewhat unfair but typical) metric to compare them, is to look at the error as a function of the number of unknowns.</p>
+<p>To see this, create a plot in log-log style with the number of unknowns on the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> axis and the <picture><source srcset="form_1055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L_2$" src="form_1055.png"/></picture> error on the <picture><source srcset="form_21_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y$" src="form_21.png"/></picture> axis. You can add reference lines for <picture><source srcset="form_6734_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^2=N^{-1}$" src="form_6734.png"/></picture> and <picture><source srcset="form_6735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h^3=N^{-3/2}$" src="form_6735.png"/></picture> and check that global and adaptive refinement follow those. If one makes the (not completely unreasonable) assumption that with a good linear solver, the computational effort is proportional to the number of unknowns <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture>, then it is clear that an error reduction of <picture><source srcset="form_6736_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N^{-3/2})$" src="form_6736.png"/></picture> is substantially better than a reduction of the form <picture><source srcset="form_6737_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\cal O}(N^{-1})$" src="form_6737.png"/></picture>: That is, that adaptive refinement gives us the desired error level with less computational work than if we used global refinement. This is not a particularly surprising conclusion, but it's worth checking these sorts of assumptions in practice.</p>
+<p>Of course, a fairer comparison would be to plot runtime (switch to release mode first!) instead of number of unknowns on the <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> axis. If you plotted run time (check out the <a class="el" href="classTimer.html">Timer</a> class!) against the number of unknowns by timing each refinement step, you will notice that the linear system solver we use in this program is not perfect &ndash; its run time grows faster than proportional to the linear system size &ndash; and picking a better linear solver might be appropriate for this kind of comparison.</p>
 <p>To see how a comparison of this kind could work, take a look at <b>[KronbichlerWall2018]</b> , and specifically Figure 5 that illustrates the error as a function of compute time for a number of polynomial degrees (as well as a number of different ways to discretize the equation used there).</p>
 <p><a class="anchor" id="PlainProg"></a> </p><h1>The plain program</h1>
 <div class="fragment"><div class="line"><span class="comment">/* ---------------------------------------------------------------------</span></div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_70.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_70.html	2024-03-17 21:57:49.035268836 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_70.html	2024-03-17 21:57:49.043268886 +0000
@@ -141,21 +141,21 @@
 <dl class="section note"><dt>Note</dt><dd>If you use this program as a basis for your own work, please consider citing it in your list of references. The initial version of this work was contributed to the deal.II project by the authors listed in the following citation:  <a href="https://doi.org/10.5281/zenodo.3829064"><img src="https://zenodo.org/badge/DOI/10.5281/zenodo.3829064.svg" alt="10.5281/zenodo.3829064"/></a> </dd></dl>
 <p><a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p><a class="anchor" id="Massivelyparallelnonmatchinggridsimulationsoffluidstructureinteractionproblems"></a></p><h3>Massively parallel non-matching grid simulations of fluid structure interaction problems</h3>
-<p>In this tutorial we consider a mixing problem in the laminar flow regime. Such problems occur in a wide range of applications ranging from chemical engineering to power generation (e.g. turbomachinery). Mixing problems are particularly hard to solve numerically, because they often involve a container (with fixed boundaries, and possibly complex geometries such as baffles), represented by the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, and one (or more) immersed and rotating impellers (represented by the domain <picture><source srcset="form_6738_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega^{\text{imp}}$" src="form_6738.png"/></picture>). The domain in which we would like to solve the flow equations is the (time dependent) difference between the two domains, namely: <picture><source srcset="form_6739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega\setminus\Omega^{\text{imp}}$" src="form_6739.png"/></picture>.</p>
+<p>In this tutorial we consider a mixing problem in the laminar flow regime. Such problems occur in a wide range of applications ranging from chemical engineering to power generation (e.g. turbomachinery). Mixing problems are particularly hard to solve numerically, because they often involve a container (with fixed boundaries, and possibly complex geometries such as baffles), represented by the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, and one (or more) immersed and rotating impellers (represented by the domain <picture><source srcset="form_6738_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega^{\text{imp}}$" src="form_6738.png"/></picture>). The domain in which we would like to solve the flow equations is the (time dependent) difference between the two domains, namely: <picture><source srcset="form_6739_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega\setminus\Omega^{\text{imp}}$" src="form_6739.png"/></picture>.</p>
 <p>For rotating impellers, the use of Arbitrary Lagrangian Eulerian formulations (in which the fluid domain &ndash; along with the mesh! &ndash; is smoothly deformed to follow the deformations of the immersed solid) is not possible, unless only small times (i.e., small fluid domain deformations) are considered. If one wants to track the evolution of the flow across multiple rotations of the impellers, the resulting deformed grid would simply be too distorted to be useful.</p>
 <p>In this case, a viable alternative strategy would be to use non-matching methods (similarly to what we have done in <a class="el" href="step_60.html">step-60</a>), where a background fixed grid (that may or may not be locally refined in time to better capture the solid motion) is coupled with a rotating, independent, grid.</p>
-<p>In order to maintain the same notations used in <a class="el" href="step_60.html">step-60</a>, we use <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> to denote the domain in <picture><source srcset="form_383_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^{\text{spacedim}}$" src="form_383.png"/></picture> representing the container of both the fluid and the impeller, and we use <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> in <picture><source srcset="form_375_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^{\text{dim}}$" src="form_375.png"/></picture> to denote either the full impeller (when its <code>spacedim</code> measure is non-negligible, i.e., when we can represent it as a grid of dimension <code>dim</code> equal to <code>spacedim</code>), a co-dimension one representation of a thin impeller, or just the boundary of the full impeller.</p>
-<p>The domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is embedded in <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> ( <picture><source srcset="form_6037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma \subseteq \Omega$" src="form_6037.png"/></picture>) and it is non-matching: It does not, in general, align with any of the features of the volume mesh. We solve a partial differential equation on <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, enforcing some conditions on the solution of the problem on the embedded domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> by some penalization techniques. In the current case, the condition is that the velocity of the fluid at points on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> equal the velocity of the solid impeller at that point.</p>
+<p>In order to maintain the same notations used in <a class="el" href="step_60.html">step-60</a>, we use <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> to denote the domain in <picture><source srcset="form_389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^{\text{spacedim}}$" src="form_389.png"/></picture> representing the container of both the fluid and the impeller, and we use <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> in <picture><source srcset="form_381_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb R}^{\text{dim}}$" src="form_381.png"/></picture> to denote either the full impeller (when its <code>spacedim</code> measure is non-negligible, i.e., when we can represent it as a grid of dimension <code>dim</code> equal to <code>spacedim</code>), a co-dimension one representation of a thin impeller, or just the boundary of the full impeller.</p>
+<p>The domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is embedded in <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> ( <picture><source srcset="form_6037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma \subseteq \Omega$" src="form_6037.png"/></picture>) and it is non-matching: It does not, in general, align with any of the features of the volume mesh. We solve a partial differential equation on <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, enforcing some conditions on the solution of the problem on the embedded domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> by some penalization techniques. In the current case, the condition is that the velocity of the fluid at points on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> equal the velocity of the solid impeller at that point.</p>
 <p>The technique we describe here is presented in the literature using one of many names: the <b>immersed finite element method</b> and the <b>fictitious boundary method</b> among others. The main principle is that the discretization of the two grids are kept completely independent. In the present tutorial, this approach is used to solve for the motion of a viscous fluid, described by the Stokes equation, that is agitated by a rigid non-deformable impeller.</p>
-<p>Thus, the equations solved in <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> are the Stokes equations for a creeping flow (i.e. a flow where <picture><source srcset="form_6740_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{Re}\rightarrow 0$" src="form_6740.png"/></picture>) and a no-slip boundary condition is applied on the moving <em>embedded domain</em> <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> associated with the impeller. However, this tutorial could be readily extended to other equations (e.g. the Navier-Stokes equations, linear elasticity equation, etc.). It can be seen as a natural extension of <a class="el" href="step_60.html">step-60</a> that enables the solution of large problems using a distributed parallel computing architecture via MPI.</p>
+<p>Thus, the equations solved in <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> are the Stokes equations for a creeping flow (i.e. a flow where <picture><source srcset="form_6740_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{Re}\rightarrow 0$" src="form_6740.png"/></picture>) and a no-slip boundary condition is applied on the moving <em>embedded domain</em> <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> associated with the impeller. However, this tutorial could be readily extended to other equations (e.g. the Navier-Stokes equations, linear elasticity equation, etc.). It can be seen as a natural extension of <a class="el" href="step_60.html">step-60</a> that enables the solution of large problems using a distributed parallel computing architecture via MPI.</p>
 <p>However, contrary to <a class="el" href="step_60.html">step-60</a>, the Dirichlet boundary conditions on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> are imposed weakly instead of through the use of Lagrange multipliers, and we concentrate on dealing with the coupling of two fully distributed triangulations (a combination that was not possible in the implementation of <a class="el" href="step_60.html">step-60</a>).</p>
 <p>There are two interesting scenarios that occur when one wants to enforce conditions on the embedded domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>:</p>
 <ul>
-<li>The geometrical dimension <code>dim</code> of the embedded domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is the same of the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> (<code>spacedim</code>), that is, the spacedim-dimensional measure of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is not zero. In this case, the imposition of the Dirichlet boundary boundary condition on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is done through a volumetric penalization. If the applied penalization only depends on the velocity, this is often referred to as <picture><source srcset="form_6741_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{L}^2$" src="form_6741.png"/></picture> penalization whereas if the penalization depends on both the velocity and its gradient, it is an <picture><source srcset="form_6742_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{H}^1$" src="form_6742.png"/></picture> penalization. The case of the <picture><source srcset="form_6741_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{L}^2$" src="form_6741.png"/></picture> penalization is very similar to a Darcy-type approach. Both <picture><source srcset="form_6741_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{L}^2$" src="form_6741.png"/></picture> and <picture><source srcset="form_6742_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{H}^1$" src="form_6742.png"/></picture> penalizations have been analyzed extensively (see, for example, <b>[Angot1999]</b>).</li>
-<li>The embedded domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> has an intrinsic dimension <code>dim</code> which is smaller than that of <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> (<code>spacedim</code>), thus its spacedim-dimensional measure is zero; for example it is a curve embedded in a two dimensional domain, or a surface embedded in a three-dimensional domain. This is of course physically impossible, but one may consider very thin sheets of metal moving in a fluid as essentially lower-dimensional if the thickness of the sheet is negligible. In this case, the boundary condition is imposed weakly on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> by applying the <a href="https://en.wikipedia.org/wiki/Joachim_Nitsche">Nitsche</a> method (see <b>[Freund1995]</b>).</li>
+<li>The geometrical dimension <code>dim</code> of the embedded domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is the same of the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> (<code>spacedim</code>), that is, the spacedim-dimensional measure of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is not zero. In this case, the imposition of the Dirichlet boundary boundary condition on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is done through a volumetric penalization. If the applied penalization only depends on the velocity, this is often referred to as <picture><source srcset="form_6741_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{L}^2$" src="form_6741.png"/></picture> penalization whereas if the penalization depends on both the velocity and its gradient, it is an <picture><source srcset="form_6742_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{H}^1$" src="form_6742.png"/></picture> penalization. The case of the <picture><source srcset="form_6741_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{L}^2$" src="form_6741.png"/></picture> penalization is very similar to a Darcy-type approach. Both <picture><source srcset="form_6741_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{L}^2$" src="form_6741.png"/></picture> and <picture><source srcset="form_6742_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{H}^1$" src="form_6742.png"/></picture> penalizations have been analyzed extensively (see, for example, <b>[Angot1999]</b>).</li>
+<li>The embedded domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> has an intrinsic dimension <code>dim</code> which is smaller than that of <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> (<code>spacedim</code>), thus its spacedim-dimensional measure is zero; for example it is a curve embedded in a two dimensional domain, or a surface embedded in a three-dimensional domain. This is of course physically impossible, but one may consider very thin sheets of metal moving in a fluid as essentially lower-dimensional if the thickness of the sheet is negligible. In this case, the boundary condition is imposed weakly on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> by applying the <a href="https://en.wikipedia.org/wiki/Joachim_Nitsche">Nitsche</a> method (see <b>[Freund1995]</b>).</li>
 </ul>
 <p>Both approaches have very similar requirements and result in highly similar formulations. Thus, we treat them almost in the same way.</p>
-<p>In this tutorial program we are not interested in further details on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>: we assume that the dimension of the embedded domain (<code>dim</code>) is always smaller by one or equal with respect to the dimension of the embedding domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> (<code>spacedim</code>).</p>
+<p>In this tutorial program we are not interested in further details on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>: we assume that the dimension of the embedded domain (<code>dim</code>) is always smaller by one or equal with respect to the dimension of the embedding domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> (<code>spacedim</code>).</p>
 <p>We are going to solve the following differential problem: given a sufficiently regular function <picture><source srcset="form_67_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g$" src="form_67.png"/></picture> on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, find the solution <picture><source srcset="form_6743_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\textbf{u},p)$" src="form_6743.png"/></picture> to</p>
 <p class="formulaDsp">
 <picture><source srcset="form_6744_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
@@ -166,7 +166,7 @@
 \end{eqnarray*}" src="form_6744.png"/></picture>
 </p>
 <p>This equation, which we have normalized by scaling the time units in such a way that the viscosity has a numerical value of 1, describes slow, viscous flow such as honey or lava. The main goal of this tutorial is to show how to impose the velocity field condition <picture><source srcset="form_6745_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u} = \mathbf{g}$" src="form_6745.png"/></picture> on a non-matching <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> in a weak way, using a penalization method. A more extensive discussion of the Stokes problem including body forces, different boundary conditions, and solution strategies can be found in <a class="el" href="step_22.html">step-22</a>.</p>
-<p>Let us start by considering the Stokes problem alone, in the entire domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>. We look for a velocity field <picture><source srcset="form_2520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2520.png"/></picture> and a pressure field <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture> that satisfy the Stokes equations with homogeneous boundary conditions on <picture><source srcset="form_3116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3116.png"/></picture>.</p>
+<p>Let us start by considering the Stokes problem alone, in the entire domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>. We look for a velocity field <picture><source srcset="form_2515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2515.png"/></picture> and a pressure field <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture> that satisfy the Stokes equations with homogeneous boundary conditions on <picture><source srcset="form_3192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3192.png"/></picture>.</p>
 <p>The weak form of the Stokes equations is obtained by first writing it in vector form as  </p><p class="formulaDsp">
 <picture><source srcset="form_6746_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \begin{pmatrix}
@@ -182,7 +182,7 @@
   \end{pmatrix},
 \end{eqnarray*}" src="form_6746.png"/></picture>
 </p>
-<p> forming the dot product from the left with a vector-valued test function <picture><source srcset="form_3399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi = \begin{pmatrix}\textbf{v} \\ q\end{pmatrix}$" src="form_3399.png"/></picture>, and integrating over the domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, yielding the following set of equations:  </p><p class="formulaDsp">
+<p> forming the dot product from the left with a vector-valued test function <picture><source srcset="form_3263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi = \begin{pmatrix}\textbf{v} \\ q\end{pmatrix}$" src="form_3263.png"/></picture>, and integrating over the domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, yielding the following set of equations:  </p><p class="formulaDsp">
 <picture><source srcset="form_6747_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   (\mathrm v,
    -\Delta \textbf{u} + \nabla p)_{\Omega}
@@ -192,16 +192,16 @@
   0
 \end{eqnarray*}" src="form_6747.png"/></picture>
 </p>
-<p> which has to hold for all test functions <picture><source srcset="form_3401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi = \begin{pmatrix}\textbf{v}
-\\ q\end{pmatrix}$" src="form_3401.png"/></picture>.</p>
-<p>Integrating by parts and exploiting the boundary conditions on <picture><source srcset="form_3116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3116.png"/></picture>, we obtain the following variational problem:  </p><p class="formulaDsp">
+<p> which has to hold for all test functions <picture><source srcset="form_3265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\phi = \begin{pmatrix}\textbf{v}
+\\ q\end{pmatrix}$" src="form_3265.png"/></picture>.</p>
+<p>Integrating by parts and exploiting the boundary conditions on <picture><source srcset="form_3192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3192.png"/></picture>, we obtain the following variational problem:  </p><p class="formulaDsp">
 <picture><source srcset="form_6748_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 (\nabla \textbf{v}, \nabla \textbf{u})_{\Omega} - (\textrm{div}\; \textbf{v}, p)_{\Omega}
  - (q, \textrm{div}\; \textbf{u})_{\Omega}&amp;=&amp; 0
 \end{eqnarray*}" src="form_6748.png"/></picture>
 </p>
 <p>where <picture><source srcset="form_6051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\cdot, \cdot)_{\Omega}$" src="form_6051.png"/></picture> represents the <picture><source srcset="form_1209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2$" src="form_1209.png"/></picture> scalar product. This is the same variational form used in <a class="el" href="step_22.html">step-22</a>.</p>
-<p>This variational formulation does not take into account the embedded domain. Contrary to <a class="el" href="step_60.html">step-60</a>, we do not enforce strongly the constraints of <picture><source srcset="form_3394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}$" src="form_3394.png"/></picture> on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, but enforce them weakly via a penalization term.</p>
+<p>This variational formulation does not take into account the embedded domain. Contrary to <a class="el" href="step_60.html">step-60</a>, we do not enforce strongly the constraints of <picture><source srcset="form_3258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}$" src="form_3258.png"/></picture> on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, but enforce them weakly via a penalization term.</p>
 <p>The analysis of this weak imposition of the boundary condition depends on the spacedim-dimensional measure of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> as either positive (if <code>dim</code> is equal to <code>spacedim</code>) or zero (if <code>dim</code> is smaller than <code>spacedim</code>). We discuss both scenarios.</p>
 <p><a class="anchor" id="Codimensiononecase"></a></p><h4>Co-dimension one case</h4>
 <p>In this case, we assume that <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> is the boundary of the actual impeller, that is, a closed curve embedded in a two-dimensional domain or a closed surface in a three-dimensional domain. The idea of this method starts by considering a weak imposition of the Dirichlet boundary condition on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, following the Nitsche method. This is achieved by using the following modified formulation on the fluid domain, where no strong conditions on the test functions on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> are imposed:</p>
@@ -218,9 +218,9 @@
  + \beta (\textbf{v},\textbf{g})_{\Gamma}.
 \end{multline*}" src="form_6749.png"/></picture>
 </p>
-<p>The integrals over <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> are lower-dimensional integrals. It can be shown (see <b>[Freund1995]</b>) that there exists a positive constant <picture><source srcset="form_6750_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C_1$" src="form_6750.png"/></picture> so that if <picture><source srcset="form_6751_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta &gt; C_1$" src="form_6751.png"/></picture>, the weak imposition of the boundary will be consistent and stable. The first two additional integrals on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> (the second line in the equation above) appear naturally after integrating by parts, when one does not assume that <picture><source srcset="form_2461_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}$" src="form_2461.png"/></picture> is zero on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>.</p>
-<p>The third line in the equation above contains two terms that are added to ensure consistency of the weak form, and a stabilization term, that is there to enforce the boundary condition with an error which is consistent with the approximation error. The consistency terms and the stabilization term are added to the right hand side with the actual boundary data <picture><source srcset="form_3946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{g}$" src="form_3946.png"/></picture>.</p>
-<p>When <picture><source srcset="form_2520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2520.png"/></picture> satisfies the condition <picture><source srcset="form_6752_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}=\mathbf{g}$" src="form_6752.png"/></picture> on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, all the consistency and stability integrals on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> cancel out, and one is left with the usual weak form of Stokes flow, that is, the above formulation is consistent.</p>
+<p>The integrals over <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> are lower-dimensional integrals. It can be shown (see <b>[Freund1995]</b>) that there exists a positive constant <picture><source srcset="form_6750_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C_1$" src="form_6750.png"/></picture> so that if <picture><source srcset="form_6751_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta &gt; C_1$" src="form_6751.png"/></picture>, the weak imposition of the boundary will be consistent and stable. The first two additional integrals on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> (the second line in the equation above) appear naturally after integrating by parts, when one does not assume that <picture><source srcset="form_2468_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}$" src="form_2468.png"/></picture> is zero on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>.</p>
+<p>The third line in the equation above contains two terms that are added to ensure consistency of the weak form, and a stabilization term, that is there to enforce the boundary condition with an error which is consistent with the approximation error. The consistency terms and the stabilization term are added to the right hand side with the actual boundary data <picture><source srcset="form_3947_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{g}$" src="form_3947.png"/></picture>.</p>
+<p>When <picture><source srcset="form_2515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2515.png"/></picture> satisfies the condition <picture><source srcset="form_6752_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}=\mathbf{g}$" src="form_6752.png"/></picture> on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, all the consistency and stability integrals on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> cancel out, and one is left with the usual weak form of Stokes flow, that is, the above formulation is consistent.</p>
 <p>We note that an alternative (non-symmetric) formulation can be used :</p>
 <p class="formulaDsp">
 <picture><source srcset="form_6753_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{multline*}
@@ -235,9 +235,9 @@
  + \beta (\textbf{v},\textbf{g})_{\Gamma}.
 \end{multline*}" src="form_6753.png"/></picture>
 </p>
-<p> Note the different sign of the first terms on the third and fourth lines. In this case, the stability and consistency conditions become <picture><source srcset="form_6754_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta &gt; 0$" src="form_6754.png"/></picture>. In the symmetric case, the value of <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> is dependent on <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>, and it is in general chosen such that <picture><source srcset="form_6755_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta = C h^{-1} $" src="form_6755.png"/></picture> with <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> a measure of size of the face being integrated and <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> a constant such that <picture><source srcset="form_6756_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1 \leq C \leq 10$" src="form_6756.png"/></picture>. This is as one usually does with the Nitsche penalty method to enforcing Dirichlet boundary conditions.</p>
+<p> Note the different sign of the first terms on the third and fourth lines. In this case, the stability and consistency conditions become <picture><source srcset="form_6754_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta &gt; 0$" src="form_6754.png"/></picture>. In the symmetric case, the value of <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> is dependent on <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>, and it is in general chosen such that <picture><source srcset="form_6755_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta = C h^{-1} $" src="form_6755.png"/></picture> with <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> a measure of size of the face being integrated and <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> a constant such that <picture><source srcset="form_6756_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1 \leq C \leq 10$" src="form_6756.png"/></picture>. This is as one usually does with the Nitsche penalty method to enforcing Dirichlet boundary conditions.</p>
 <p>The non-symmetric approach, on the other hand, is related to how one enforced continuity for the non-symmetric interior penalty method for discontinuous Galerkin methods (the "NIPG" method <b>[Riviere1999]</b>). Even if the non-symmetric case seems advantageous w.r.t. possible choices of stabilization parameters, we opt for the symmetric discretization, since in this case it can be shown that the dual problem is also consistent, leading to a solution where not only the energy norm of the solution converges with the correct order, but also its <picture><source srcset="form_1209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2$" src="form_1209.png"/></picture> norm. Furthermore, the resulting matrix remains symmetric.</p>
-<p>The above formulation works under the assumption that the domain is discretized exactly. However, if the deformation of the impeller is a rigid body motion, it is possible to artificially extend the solution of the Stokes problem inside the propeller itself, since a rigid body motion is also a solution to the Stokes problem. The idea is then to solve the same problem, inside <picture><source srcset="form_6738_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega^{\text{imp}}$" src="form_6738.png"/></picture>, imposing the same boundary conditions on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, using the same penalization technique, and testing with test functions <picture><source srcset="form_2461_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}$" src="form_2461.png"/></picture> which are globally continuous over <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>.</p>
+<p>The above formulation works under the assumption that the domain is discretized exactly. However, if the deformation of the impeller is a rigid body motion, it is possible to artificially extend the solution of the Stokes problem inside the propeller itself, since a rigid body motion is also a solution to the Stokes problem. The idea is then to solve the same problem, inside <picture><source srcset="form_6738_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega^{\text{imp}}$" src="form_6738.png"/></picture>, imposing the same boundary conditions on <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, using the same penalization technique, and testing with test functions <picture><source srcset="form_2468_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}$" src="form_2468.png"/></picture> which are globally continuous over <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>.</p>
 <p>This results in the following (intermediate) formulation:  </p><p class="formulaDsp">
 <picture><source srcset="form_6757_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{multline*}
 (\nabla \textbf{v}, \nabla \textbf{u})_{\Omega} - (\textrm{div}\;  \textbf{v}, p)_{\Omega}
@@ -260,9 +260,9 @@
 =  2\beta (\textbf{v},\textbf{g})_{\Gamma}.
 \end{multline*}" src="form_6760.png"/></picture>
 </p>
-<p>In <a class="el" href="step_60.html">step-60</a>, the imposition of the constraint required the addition of new variables in the form of Lagrange multipliers. This is not the case for this tutorial program. The imposition of the boundary condition using Nitsche's method only modifies the system matrix and the right-hand side without adding additional unknowns. However, the velocity vector <picture><source srcset="form_3394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}$" src="form_3394.png"/></picture> on the embedded domain will not match exactly the prescribed velocity <picture><source srcset="form_6761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{g}$" src="form_6761.png"/></picture>, but only up to a numerical error which is in the same order as the interpolation error of the finite element method. Furthermore, as in <a class="el" href="step_60.html">step-60</a>, we still need to integrate over the non-matching embedded grid in order to construct the boundary term necessary to impose the boundary condition over <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>.</p>
+<p>In <a class="el" href="step_60.html">step-60</a>, the imposition of the constraint required the addition of new variables in the form of Lagrange multipliers. This is not the case for this tutorial program. The imposition of the boundary condition using Nitsche's method only modifies the system matrix and the right-hand side without adding additional unknowns. However, the velocity vector <picture><source srcset="form_3258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}$" src="form_3258.png"/></picture> on the embedded domain will not match exactly the prescribed velocity <picture><source srcset="form_6761_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{g}$" src="form_6761.png"/></picture>, but only up to a numerical error which is in the same order as the interpolation error of the finite element method. Furthermore, as in <a class="el" href="step_60.html">step-60</a>, we still need to integrate over the non-matching embedded grid in order to construct the boundary term necessary to impose the boundary condition over <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>.</p>
 <p><a class="anchor" id="Codimensionzerocase"></a></p><h4>Co-dimension zero case</h4>
-<p>In this case, <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> has the same dimension, but is embedded into <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>. We can think of this as a thick object moving around in the fluid. In the case of <picture><source srcset="form_6741_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{L}^2$" src="form_6741.png"/></picture> penalization, the additional penalization term can be interpreted as a Darcy term within <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, resulting in:</p>
+<p>In this case, <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> has the same dimension, but is embedded into <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>. We can think of this as a thick object moving around in the fluid. In the case of <picture><source srcset="form_6741_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{L}^2$" src="form_6741.png"/></picture> penalization, the additional penalization term can be interpreted as a Darcy term within <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, resulting in:</p>
 <p class="formulaDsp">
 <picture><source srcset="form_6762_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
 (\nabla \textbf{v}, \nabla \textbf{u})_{\Omega} - &amp; (\textrm{div}\;  \textbf{v}, p)_{\Omega}
@@ -295,15 +295,15 @@
 \]" src="form_6764.png"/></picture>
 </p>
 <p>Computing this sum is non-trivial because we have to evaluate <picture><source srcset="form_6071_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(v_j \circ F_{K})
-(\hat x_i)$" src="form_6071.png"/></picture>. In general, if <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> and <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> are not aligned, the point <picture><source srcset="form_6765_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_i = F_{K}(\hat x_i)$" src="form_6765.png"/></picture> is completely arbitrary with respect to <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, and unless we figure out a way to interpolate all basis functions of <picture><source srcset="form_6073_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h(\Omega)$" src="form_6073.png"/></picture> on an arbitrary point on <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, we cannot compute the integral needed.</p>
+(\hat x_i)$" src="form_6071.png"/></picture>. In general, if <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> and <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> are not aligned, the point <picture><source srcset="form_6765_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_i = F_{K}(\hat x_i)$" src="form_6765.png"/></picture> is completely arbitrary with respect to <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, and unless we figure out a way to interpolate all basis functions of <picture><source srcset="form_6073_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_h(\Omega)$" src="form_6073.png"/></picture> on an arbitrary point on <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, we cannot compute the integral needed.</p>
 <p>To evaluate <picture><source srcset="form_6074_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(v_j \circ F_{K}) (\hat x_i)$" src="form_6074.png"/></picture> the following steps needs to be taken (as shown in the picture below):</p>
 <ul>
 <li>For a given cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> in <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> compute the real point <picture><source srcset="form_6075_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_i \dealcoloneq F_{K} (\hat
-x_i)$" src="form_6075.png"/></picture>, where <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture> is one of the quadrature points used for the integral on <picture><source srcset="form_6076_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K
+x_i)$" src="form_6075.png"/></picture>, where <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture> is one of the quadrature points used for the integral on <picture><source srcset="form_6076_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K
 \subseteq \Gamma$" src="form_6076.png"/></picture>. This is the easy part: <a class="el" href="classFEValuesBase.html#href_anchor">FEValues::quadrature_point()</a> gives us the real-space locations of all quadrature points.</li>
-<li>Find the cell of <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> in which <picture><source srcset="form_2111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_i$" src="form_2111.png"/></picture> lies. We shall call this element <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture>.</li>
-<li>Find the reference coordinates within <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture> of <picture><source srcset="form_2111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_i$" src="form_2111.png"/></picture>. For this, we need the inverse of the mapping <picture><source srcset="form_6077_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_T$" src="form_6077.png"/></picture> that transforms the reference element <picture><source srcset="form_6078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat T$" src="form_6078.png"/></picture> into the element <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture>: <picture><source srcset="form_6766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat y_i = G^{-1}_{T} (y_i)$" src="form_6766.png"/></picture>.</li>
-<li>Evaluate the basis function <picture><source srcset="form_212_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_j$" src="form_212.png"/></picture> of the <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> mesh at this point <picture><source srcset="form_6767_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat y_i$" src="form_6767.png"/></picture>. This is, again, relatively simple using <a class="el" href="classFEValues.html">FEValues</a>.</li>
+<li>Find the cell of <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> in which <picture><source srcset="form_2102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_i$" src="form_2102.png"/></picture> lies. We shall call this element <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture>.</li>
+<li>Find the reference coordinates within <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture> of <picture><source srcset="form_2102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$y_i$" src="form_2102.png"/></picture>. For this, we need the inverse of the mapping <picture><source srcset="form_6077_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$G_T$" src="form_6077.png"/></picture> that transforms the reference element <picture><source srcset="form_6078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat T$" src="form_6078.png"/></picture> into the element <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture>: <picture><source srcset="form_6766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat y_i = G^{-1}_{T} (y_i)$" src="form_6766.png"/></picture>.</li>
+<li>Evaluate the basis function <picture><source srcset="form_186_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_j$" src="form_186.png"/></picture> of the <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> mesh at this point <picture><source srcset="form_6767_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat y_i$" src="form_6767.png"/></picture>. This is, again, relatively simple using <a class="el" href="classFEValues.html">FEValues</a>.</li>
 </ul>
 <p align="center"></p>
 <p><img src="https://www.dealii.org/images/steps/developer/step-60.C_interpolation.png" alt="" class="inline"/> </p>
@@ -322,8 +322,8 @@
 \sum_{K\in \Gamma} \sum_{i=1}^{n_q}  \big(\hat{\textbf{u}}(\hat x_i)  (\textbf{v} \circ F_{K}) (\hat x_i) J_K (\hat x_i) w_i \big)
 \]" src="form_6768.png"/></picture>
 </p>
-<p> If you followed the discussion above, then you will recall that <picture><source srcset="form_3394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}$" src="form_3394.png"/></picture> and <picture><source srcset="form_3412_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{v}$" src="form_3412.png"/></picture> are shape functions defined on the fluid mesh. The only things defined on the solid mesh are: <picture><source srcset="form_6769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_K(\hat x_i)$" src="form_6769.png"/></picture>, which is the location of a quadrature point on a solid cell that is part of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, <picture><source srcset="form_91_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_K$" src="form_91.png"/></picture> is the determinant of its Jacobian, and <picture><source srcset="form_1131_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_i$" src="form_1131.png"/></picture> the corresponding quadrature weight.</p>
-<p>The important part to realize is now this: <picture><source srcset="form_1131_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_i$" src="form_1131.png"/></picture> is a property of the quadrature formula and does not change with time. Furthermore, the Jacobian matrix of <picture><source srcset="form_2033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_K$" src="form_2033.png"/></picture> itself changes as the solid obstacle moves around in the fluid, but because the solid is considered non-deforming (it only translates and rotates, but doesn't dilate), the determinant of the Jacobian remains constant. As a consequence, the product <picture><source srcset="form_6770_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_K(\hat x_i) w_i$" src="form_6770.png"/></picture> (which we typically denote by <code>JxW</code>) remains constant for each quadrature point. So the only thing we need keep track of are the positions <picture><source srcset="form_6771_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i=F_K(\hat x_i)$" src="form_6771.png"/></picture> &ndash; but these move with the velocity of the solid domain.</p>
+<p> If you followed the discussion above, then you will recall that <picture><source srcset="form_3258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{u}$" src="form_3258.png"/></picture> and <picture><source srcset="form_3276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{v}$" src="form_3276.png"/></picture> are shape functions defined on the fluid mesh. The only things defined on the solid mesh are: <picture><source srcset="form_6769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_K(\hat x_i)$" src="form_6769.png"/></picture>, which is the location of a quadrature point on a solid cell that is part of <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, <picture><source srcset="form_91_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_K$" src="form_91.png"/></picture> is the determinant of its Jacobian, and <picture><source srcset="form_1155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_i$" src="form_1155.png"/></picture> the corresponding quadrature weight.</p>
+<p>The important part to realize is now this: <picture><source srcset="form_1155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_i$" src="form_1155.png"/></picture> is a property of the quadrature formula and does not change with time. Furthermore, the Jacobian matrix of <picture><source srcset="form_2044_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_K$" src="form_2044.png"/></picture> itself changes as the solid obstacle moves around in the fluid, but because the solid is considered non-deforming (it only translates and rotates, but doesn't dilate), the determinant of the Jacobian remains constant. As a consequence, the product <picture><source srcset="form_6770_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_K(\hat x_i) w_i$" src="form_6770.png"/></picture> (which we typically denote by <code>JxW</code>) remains constant for each quadrature point. So the only thing we need keep track of are the positions <picture><source srcset="form_6771_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i=F_K(\hat x_i)$" src="form_6771.png"/></picture> &ndash; but these move with the velocity of the solid domain.</p>
 <p>In other words, we don't actually need to keep the solid mesh at all. All we need is the positions <picture><source srcset="form_6772_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i(t)$" src="form_6772.png"/></picture> and corresponding <code>JxW</code> values. Since both of these properties are point-properties (or point-vectors) that are attached to the solid material, they can be idealized as a set of disconnected infinitesimally small "particles", which carry the required <code>JxW</code> information with the movement of the solid. deal.II has the ability to distribute and store such a set of particles in large-scale parallel computations in the form of the ParticleHandler class (for details on the implementation see <b>[GLHPW2018]</b>), and we will make use of this functionality in this tutorial.</p>
 <p>Thus, the approach taken in this step is as follows:</p><ul>
 <li>Create a <a class="el" href="classparallel_1_1distributed_1_1Triangulation.html">parallel::distributed::Triangulation</a> for the domain <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>;</li>
@@ -332,7 +332,7 @@
 <li>Attach the <code>JxW</code> values as a "property" to each <a class="el" href="classParticles_1_1Particle.html">Particles::Particle</a> object.</li>
 </ul>
 <p>This structure is relatively expensive to generate, but must only be generated once per simulation. Once the <a class="el" href="classParticles_1_1ParticleHandler.html">Particles::ParticleHandler</a> is generated and the required information is attached to the particle, the integrals over <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture> can be carried out by exploiting the fact that particles are grouped cellwise inside ParticleHandler, allowing us to:</p><ul>
-<li>Looping over all cells of <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> that contain at least one particle</li>
+<li>Looping over all cells of <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> that contain at least one particle</li>
 <li>Looping over all particles in the given cell</li>
 <li>Compute the integrals and fill the global matrix.</li>
 </ul>
@@ -617,7 +617,7 @@
 <div class="line">  </div>
 <div class="line">  </div>
 <div class="ttc" id="aclassFunctions_1_1ParsedFunction_html_a57fd4a680441ae940812431a421c9c40"><div class="ttname"><a href="classFunctions_1_1ParsedFunction.html#href_anchor">Functions::ParsedFunction::declare_parameters</a></div><div class="ttdeci">static void declare_parameters(ParameterHandler &amp;prm, const unsigned int n_components=1)</div><div class="ttdef"><b>Definition</b> <a href="parsed__function_8cc_source.html#href_anchor">parsed_function.cc:35</a></div></div>
-</div><!-- fragment --><p>Once the angular velocity is provided as a <a class="el" href="classFunction.html">Function</a> object, we reconstruct the pointwise solid velocity through the following class which derives from the <a class="el" href="classFunction.html">Function</a> class. It provides the value of the velocity of the solid body at a given position by assuming that the body rotates around the origin (or the <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> axis in 3d) with a given angular velocity.</p>
+</div><!-- fragment --><p>Once the angular velocity is provided as a <a class="el" href="classFunction.html">Function</a> object, we reconstruct the pointwise solid velocity through the following class which derives from the <a class="el" href="classFunction.html">Function</a> class. It provides the value of the velocity of the solid body at a given position by assuming that the body rotates around the origin (or the <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> axis in 3d) with a given angular velocity.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> spacedim&gt;</div>
 <div class="line">    <span class="keyword">class </span>SolidVelocity : <span class="keyword">public</span> <a class="code hl_class" href="classFunction.html">Function</a>&lt;spacedim&gt;</div>
 <div class="line">    {</div>
@@ -1421,7 +1421,7 @@
 <div class="line">  </div>
 <div class="line">  </div>
 </div><!-- fragment --><p><a class="anchor" id="Solvingthelinearsystem"></a> </p><h4>Solving the linear system</h4>
-<p>This function solves the linear system with FGMRES with a block diagonal preconditioner and an algebraic multigrid (AMG) method for the diagonal blocks. The preconditioner applies a V cycle to the <picture><source srcset="form_350_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0,0)$" src="form_350.png"/></picture> (i.e., the velocity-velocity) block and a CG with the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> for the <picture><source srcset="form_3470_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1,1)$" src="form_3470.png"/></picture> block (which is our approximation to the Schur complement: the pressure mass matrix assembled above).</p>
+<p>This function solves the linear system with FGMRES with a block diagonal preconditioner and an algebraic multigrid (AMG) method for the diagonal blocks. The preconditioner applies a V cycle to the <picture><source srcset="form_350_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0,0)$" src="form_350.png"/></picture> (i.e., the velocity-velocity) block and a CG with the <a class="el" href="DEALGlossary.html#href_anchor">mass matrix</a> for the <picture><source srcset="form_3334_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(1,1)$" src="form_3334.png"/></picture> block (which is our approximation to the Schur complement: the pressure mass matrix assembled above).</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim, <span class="keywordtype">int</span> spacedim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> StokesImmersedProblem&lt;dim, spacedim&gt;::solve()</div>
 <div class="line">    {</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_71.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_71.html	2024-03-17 21:57:49.227270021 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_71.html	2024-03-17 21:57:49.235270071 +0000
@@ -149,7 +149,7 @@
 </p>
 <p><em>This program was contributed by Jean-Paul Pelteret. </em></p>
 <p><a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
-<p>The aim of this tutorial is, quite simply, to introduce the fundamentals of both <a href="https://en.wikipedia.org/wiki/Automatic_differentiation">automatic</a> and <a href="https://en.wikipedia.org/wiki/Computer_algebra">symbolic differentiation</a> (respectively abbreviated as AD and SD): Ways in which one can, in source code, describe a function <picture><source srcset="form_6974_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf f(\mathbf x)$" src="form_6974.png"/></picture> and automatically also obtain a representation of derivatives <picture><source srcset="form_6975_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \mathbf f(\mathbf x)$" src="form_6975.png"/></picture> (the "Jacobian"), <picture><source srcset="form_6976_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla^2 \mathbf f(\mathbf x)$" src="form_6976.png"/></picture> (the "Hessian"), etc., without having to write additional lines of code. Doing this is quite helpful in solving nonlinear or optimization problems where one would like to only describe the nonlinear equation or the objective function in the code, without having to also provide their derivatives (which are necessary for a Newton method for solving a nonlinear problem, or for finding a minimizer).</p>
+<p>The aim of this tutorial is, quite simply, to introduce the fundamentals of both <a href="https://en.wikipedia.org/wiki/Automatic_differentiation">automatic</a> and <a href="https://en.wikipedia.org/wiki/Computer_algebra">symbolic differentiation</a> (respectively abbreviated as AD and SD): Ways in which one can, in source code, describe a function <picture><source srcset="form_6774_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf f(\mathbf x)$" src="form_6774.png"/></picture> and automatically also obtain a representation of derivatives <picture><source srcset="form_6775_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla \mathbf f(\mathbf x)$" src="form_6775.png"/></picture> (the "Jacobian"), <picture><source srcset="form_6776_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla^2 \mathbf f(\mathbf x)$" src="form_6776.png"/></picture> (the "Hessian"), etc., without having to write additional lines of code. Doing this is quite helpful in solving nonlinear or optimization problems where one would like to only describe the nonlinear equation or the objective function in the code, without having to also provide their derivatives (which are necessary for a Newton method for solving a nonlinear problem, or for finding a minimizer).</p>
 <p>Since AD and SD tools are somewhat independent of finite elements and boundary value problems, this tutorial is going to be different to the others that you may have read beforehand. It will focus specifically on how these frameworks work and the principles and thinking behind them, and will forgo looking at them in the direct context of a finite element simulation.</p>
 <p>We will, in fact, look at two different sets of problems that have greatly different levels of complexity, but when framed properly hold sufficient similarity that the same AD and SD frameworks can be leveraged. With these examples the aim is to build up an understanding of the steps that are required to use the AD and SD tools, the differences between them, and hopefully identify where they could be immediately be used in order to improve or simplify existing code.</p>
 <p>It's plausible that you're wondering what AD and SD are, in the first place. Well, that question is easy to answer but without context is not very insightful. So we're not going to cover that in this introduction, but will rather defer this until the first introductory example where we lay out the key points as this example unfolds. To complement this, we should mention that the core theory for both frameworks is extensively discussed in the <a class="el" href="group__auto__symb__diff.html">Automatic and symbolic differentiation</a> module, so it bears little repeating here.</p>
@@ -166,7 +166,7 @@
 <p><a class="anchor" id="Thermodynamicprinciples"></a></p><h4>Thermodynamic principles</h4>
 <p>As a prelude to introducing the coupled magneto-mechanical material law that we'll use to model a magneto-active polymer, we'll start with a very concise summary of the salient thermodynamics to which these constitutive laws must subscribe. The basis for the theory, as summarized here, is described in copious detail by Truesdell and Toupin <b>[Truesdell1960a]</b> and Coleman and Noll <b>[Coleman1963a]</b>, and follows the logic laid out by Holzapfel <b>[Holzapfel2007a]</b>.</p>
 <p>Starting from the first law of thermodynamics, and following a few technical assumptions, it can be shown the balance between the kinetic plus internal energy rates and the power supplied to the system from external sources is given by the following relationship that equates the rate of change of the energy in an (arbitrary) volume <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> on the left, and the sum of forces acting on that volume on the right:  </p><p class="formulaDsp">
-<picture><source srcset="form_6977_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6777_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   D_{t} \int\limits_{V} \left[
     \frac{1}{2} \rho_{0} \mathbf{v} \cdot \mathbf{v}
     + U^{*}_{0} \right] dV
@@ -178,31 +178,31 @@
   - D_{t} M^{*}_{0}
   - \nabla_{0} \cdot \mathbf{Q}
   + R_{0} \right] dV .
-\]" src="form_6977.png"/></picture>
+\]" src="form_6777.png"/></picture>
 </p>
-<p> Here <picture><source srcset="form_6978_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_{t}$" src="form_6978.png"/></picture> represents the total time derivative, <picture><source srcset="form_6979_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho_{0}$" src="form_6979.png"/></picture> is the material density as measured in the Lagrangian reference frame, <picture><source srcset="form_2461_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}$" src="form_2461.png"/></picture> is the material velocity and <picture><source srcset="form_6980_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{a}$" src="form_6980.png"/></picture> its acceleration, <picture><source srcset="form_6981_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^{*}_{0}$" src="form_6981.png"/></picture> is the internal energy per unit reference volume, <picture><source srcset="form_6982_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{P}^{\text{tot}}$" src="form_6982.png"/></picture> is the total Piola stress tensor and <picture><source srcset="form_6983_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dot{\mathbf{F}}$" src="form_6983.png"/></picture> is the time rate of the deformation gradient tensor, <picture><source srcset="form_6984_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\mathbb{H}}$" src="form_6984.png"/></picture> and <picture><source srcset="form_6985_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\mathbb{B}}$" src="form_6985.png"/></picture> are, respectively, the magnetic field vector and the magnetic induction (or magnetic flux density) vector, <picture><source srcset="form_5510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5510.png"/></picture> and <picture><source srcset="form_6986_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{D}$" src="form_6986.png"/></picture> are the electric field vector and electric displacement vector, and <picture><source srcset="form_6987_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{Q}$" src="form_6987.png"/></picture> and <picture><source srcset="form_6988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R_{0}$" src="form_6988.png"/></picture> represent the referential thermal flux vector and thermal source. The material differential operator <picture><source srcset="form_6989_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_{0} (\bullet) \dealcoloneq \frac{d(\bullet)}{d\mathbf{X}}$" src="form_6989.png"/></picture> where <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture> is the material position vector. With some rearrangement of terms, invoking the arbitrariness of the integration volume <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture>, the total internal energy density rate <picture><source srcset="form_6990_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dot{E}_{0}$" src="form_6990.png"/></picture> can be identified as  </p><p class="formulaDsp">
-<picture><source srcset="form_6991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> Here <picture><source srcset="form_6778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_{t}$" src="form_6778.png"/></picture> represents the total time derivative, <picture><source srcset="form_6779_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho_{0}$" src="form_6779.png"/></picture> is the material density as measured in the Lagrangian reference frame, <picture><source srcset="form_2468_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{v}$" src="form_2468.png"/></picture> is the material velocity and <picture><source srcset="form_6780_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{a}$" src="form_6780.png"/></picture> its acceleration, <picture><source srcset="form_6781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^{*}_{0}$" src="form_6781.png"/></picture> is the internal energy per unit reference volume, <picture><source srcset="form_6782_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{P}^{\text{tot}}$" src="form_6782.png"/></picture> is the total Piola stress tensor and <picture><source srcset="form_6783_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dot{\mathbf{F}}$" src="form_6783.png"/></picture> is the time rate of the deformation gradient tensor, <picture><source srcset="form_6784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\mathbb{H}}$" src="form_6784.png"/></picture> and <picture><source srcset="form_6785_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\mathbb{B}}$" src="form_6785.png"/></picture> are, respectively, the magnetic field vector and the magnetic induction (or magnetic flux density) vector, <picture><source srcset="form_5508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{E}$" src="form_5508.png"/></picture> and <picture><source srcset="form_6786_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{D}$" src="form_6786.png"/></picture> are the electric field vector and electric displacement vector, and <picture><source srcset="form_6787_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{Q}$" src="form_6787.png"/></picture> and <picture><source srcset="form_6788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R_{0}$" src="form_6788.png"/></picture> represent the referential thermal flux vector and thermal source. The material differential operator <picture><source srcset="form_6789_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_{0} (\bullet) \dealcoloneq \frac{d(\bullet)}{d\mathbf{X}}$" src="form_6789.png"/></picture> where <picture><source srcset="form_246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{X}$" src="form_246.png"/></picture> is the material position vector. With some rearrangement of terms, invoking the arbitrariness of the integration volume <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture>, the total internal energy density rate <picture><source srcset="form_6790_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dot{E}_{0}$" src="form_6790.png"/></picture> can be identified as  </p><p class="formulaDsp">
+<picture><source srcset="form_6791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \dot{E}_{0}
 = \mathbf{P}^{\text{tot}} : \dot{\mathbf{F}}
   + \boldsymbol{\mathbb{H}} \cdot \dot{\boldsymbol{\mathbb{B}}}
   + \mathbb{E} \cdot \dot{\mathbb{D}}
   - \nabla_{0} \cdot \mathbf{Q}
   + R_{0} .
-\]" src="form_6991.png"/></picture>
+\]" src="form_6791.png"/></picture>
 </p>
 <p> The total internal energy includes contributions that arise not only due to mechanical deformation (the first term), and thermal fluxes and sources (the fourth and fifth terms), but also due to the intrinsic energy stored in the magnetic and electric fields themselves (the second and third terms, respectively).</p>
 <p>The second law of thermodynamics, known also as the entropy inequality principle, informs us that certain thermodynamic processes are irreversible. After accounting for the total entropy and rate of entropy input, the Clausius-Duhem inequality can be derived. In local form (and in the material configuration), this reads  </p><p class="formulaDsp">
-<picture><source srcset="form_6992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \theta \dot{\eta}_{0}
   - R_{0}
   + \nabla_{0} \cdot \mathbf{Q}
   - \frac{1}{\theta} \nabla_{0} \theta \cdot \mathbf{Q}
   \geq 0 .
-\]" src="form_6992.png"/></picture>
+\]" src="form_6792.png"/></picture>
 </p>
-<p> The quantity <picture><source srcset="form_2506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2506.png"/></picture> is the absolute temperature, and <picture><source srcset="form_6993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_{0}$" src="form_6993.png"/></picture> represents the entropy per unit reference volume.</p>
-<p>Using this to replace <picture><source srcset="form_6994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R_{0} - \nabla_{0} \cdot \mathbf{Q}$" src="form_6994.png"/></picture> in the result stemming from the first law of thermodynamics, we now have the relation  </p><p class="formulaDsp">
-<picture><source srcset="form_6995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> The quantity <picture><source srcset="form_2513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta$" src="form_2513.png"/></picture> is the absolute temperature, and <picture><source srcset="form_6793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_{0}$" src="form_6793.png"/></picture> represents the entropy per unit reference volume.</p>
+<p>Using this to replace <picture><source srcset="form_6794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$R_{0} - \nabla_{0} \cdot \mathbf{Q}$" src="form_6794.png"/></picture> in the result stemming from the first law of thermodynamics, we now have the relation  </p><p class="formulaDsp">
+<picture><source srcset="form_6795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf{P}^{\text{tot}} : \dot{\mathbf{F}}
   + \boldsymbol{\mathbb{H}} \cdot \dot{\boldsymbol{\mathbb{B}}}
   + \mathbb{E} \cdot \dot{\mathbb{D}}
@@ -210,26 +210,26 @@
   - \dot{E}_{0}
   - \frac{1}{\theta} \nabla_{0} \theta \cdot \mathbf{Q}
   \geq 0 .
-\]" src="form_6995.png"/></picture>
+\]" src="form_6795.png"/></picture>
 </p>
 <p> On the basis of Fourier's law, which informs us that heat flows from regions of high temperature to low temperature, the last term is always positive and can be ignored. This renders the local dissipation inequality  </p><p class="formulaDsp">
-<picture><source srcset="form_6996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6796_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf{P}^{\text{tot}} : \dot{\mathbf{F}}
   + \boldsymbol{\mathbb{H}} \cdot \dot{\boldsymbol{\mathbb{B}}}
   + \mathbb{E} \cdot \dot{\mathbb{D}}
   - \left[ \dot{E}_{0} - \theta \dot{\eta}_{0}  \right]
   \geq 0 .
-\]" src="form_6996.png"/></picture>
+\]" src="form_6796.png"/></picture>
 </p>
 <p> It is postulated <b>[Holzapfel2007a]</b> that the Legendre transformation  </p><p class="formulaDsp">
-<picture><source srcset="form_6997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6797_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \psi^{*}_{0}
 = \psi^{*}_{0} \left( \mathbf{F}, \boldsymbol{\mathbb{B}}, \mathbb{D}, \theta \right)
 = E_{0} - \theta \eta_{0} ,
-\]" src="form_6997.png"/></picture>
+\]" src="form_6797.png"/></picture>
 </p>
-<p> from which we may define the free energy density function <picture><source srcset="form_6998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{*}_{0}$" src="form_6998.png"/></picture> with the stated parameterization, exists and is valid. Taking the material rate of this equation and substituting it into the local dissipation inequality results in the generic expression  </p><p class="formulaDsp">
-<picture><source srcset="form_6999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> from which we may define the free energy density function <picture><source srcset="form_6798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{*}_{0}$" src="form_6798.png"/></picture> with the stated parameterization, exists and is valid. Taking the material rate of this equation and substituting it into the local dissipation inequality results in the generic expression  </p><p class="formulaDsp">
+<picture><source srcset="form_6799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathcal{D}_{\text{int}}
   = \mathbf{P}^{\text{tot}} : \dot{\mathbf{F}}
   + \boldsymbol{\mathbb{H}} \cdot \dot{\boldsymbol{\mathbb{B}}}
@@ -237,104 +237,104 @@
   - \dot{\theta} \eta_{0}
   - \dot{\psi}^{*}_{0} \left( \mathbf{F}, \boldsymbol{\mathbb{B}}, \mathbb{D}, \theta \right)
   \geq 0 .
-\]" src="form_6999.png"/></picture>
+\]" src="form_6799.png"/></picture>
 </p>
 <p> Under the assumption of isothermal conditions, and that the electric field does not excite the material in a manner that is considered non-negligible, then this dissipation inequality reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_7000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6800_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathcal{D}_{\text{int}}
   = \mathbf{P}^{\text{tot}} : \dot{\mathbf{F}}
   + \boldsymbol{\mathbb{H}} \cdot \dot{\boldsymbol{\mathbb{B}}}
   - \dot{\psi}^{*}_{0} \left( \mathbf{F}, \boldsymbol{\mathbb{B}} \right)
   \geq 0 .
-\]" src="form_7000.png"/></picture>
+\]" src="form_6800.png"/></picture>
 </p>
 <p><a class="anchor" id="Constitutivelaws"></a></p><h4>Constitutive laws</h4>
 <p>When considering materials that exhibit mechanically dissipative behavior, it can be shown that this can be captured within the dissipation inequality through the augmentation of the material free energy density function with additional parameters that represent internal variables <b>[Holzapfel1996a]</b>. Consequently, we write it as  </p><p class="formulaDsp">
-<picture><source srcset="form_7001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6801_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathcal{D}_{\text{int}}
   = \mathbf{P}^{\text{tot}} : \dot{\mathbf{F}}
   + \boldsymbol{\mathbb{H}} \cdot \dot{\boldsymbol{\mathbb{B}}}
   - \dot{\psi}^{*}_{0} \left( \mathbf{F}, \mathbf{F}_{v}^{i}, \boldsymbol{\mathbb{B}} \right)
   \geq 0 .
-\]" src="form_7001.png"/></picture>
+\]" src="form_6801.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_7002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{F}_{v}^{i} = \mathbf{F}_{v}^{i} \left( t \right)$" src="form_7002.png"/></picture> represents the internal variable (which acts like a measure of the deformation gradient) associated with the <code>i</code>th mechanical dissipative (viscous) mechanism. As can be inferred from its parameterization, each of these internal parameters is considered to evolve in time. Currently the free energy density function <picture><source srcset="form_6998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{*}_{0}$" src="form_6998.png"/></picture> is parameterized in terms of the magnetic induction <picture><source srcset="form_6985_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\mathbb{B}}$" src="form_6985.png"/></picture>. This is the natural parameterization that comes as a consequence of the considered balance laws. Should such a class of materials to be incorporated within a finite-element model, it would be ascertained that a certain formulation of the magnetic problem, known as the magnetic vector potential formulation, would need to be adopted. This has its own set of challenges, so where possible the more simple magnetic scalar potential formulation may be preferred. In that case, the magnetic problem needs to be parameterized in terms of the magnetic field <picture><source srcset="form_6984_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\mathbb{H}}$" src="form_6984.png"/></picture>. To make this re-parameterization, we execute a final Legendre transformation  </p><p class="formulaDsp">
-<picture><source srcset="form_7003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_6802_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{F}_{v}^{i} = \mathbf{F}_{v}^{i} \left( t \right)$" src="form_6802.png"/></picture> represents the internal variable (which acts like a measure of the deformation gradient) associated with the <code>i</code>th mechanical dissipative (viscous) mechanism. As can be inferred from its parameterization, each of these internal parameters is considered to evolve in time. Currently the free energy density function <picture><source srcset="form_6798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi^{*}_{0}$" src="form_6798.png"/></picture> is parameterized in terms of the magnetic induction <picture><source srcset="form_6785_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\mathbb{B}}$" src="form_6785.png"/></picture>. This is the natural parameterization that comes as a consequence of the considered balance laws. Should such a class of materials to be incorporated within a finite-element model, it would be ascertained that a certain formulation of the magnetic problem, known as the magnetic vector potential formulation, would need to be adopted. This has its own set of challenges, so where possible the more simple magnetic scalar potential formulation may be preferred. In that case, the magnetic problem needs to be parameterized in terms of the magnetic field <picture><source srcset="form_6784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\mathbb{H}}$" src="form_6784.png"/></picture>. To make this re-parameterization, we execute a final Legendre transformation  </p><p class="formulaDsp">
+<picture><source srcset="form_6803_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \tilde{\psi}_{0} \left( \mathbf{F}, \mathbf{F}_{v}^{i}, \boldsymbol{\mathbb{H}} \right)
   = \psi^{*}_{0} \left( \mathbf{F}, \mathbf{F}_{v}^{i}, \boldsymbol{\mathbb{B}} \right)
   - \boldsymbol{\mathbb{H}} \cdot \boldsymbol{\mathbb{B}} .
-\]" src="form_7003.png"/></picture>
+\]" src="form_6803.png"/></picture>
 </p>
 <p> At the same time, we may take advantage of the principle of material frame indifference in order to express the energy density function in terms of symmetric deformation measures:  </p><p class="formulaDsp">
-<picture><source srcset="form_7004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6804_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \psi_{0} \left( \mathbf{C}, \mathbf{C}_{v}^{i}, \boldsymbol{\mathbb{H}} \right)
   = \tilde{\psi}_{0} \left( \mathbf{F}, \mathbf{F}_{v}^{i}, \boldsymbol{\mathbb{H}} \right) .
-\]" src="form_7004.png"/></picture>
+\]" src="form_6804.png"/></picture>
 </p>
 <p> The upshot of these two transformations (leaving out considerable explicit and hidden details) renders the final expression for the reduced dissipation inequality as  </p><p class="formulaDsp">
-<picture><source srcset="form_7005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6805_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathcal{D}_{\text{int}}
   = \mathbf{S}^{\text{tot}} : \frac{1}{2} \dot{\mathbf{C}}
   - \boldsymbol{\mathbb{B}} \cdot \dot{\boldsymbol{\mathbb{H}}}
   - \dot{\psi}_{0} \left( \mathbf{C}, \mathbf{C}_{v}^{i}, \boldsymbol{\mathbb{H}} \right)
   \geq 0 .
-\]" src="form_7005.png"/></picture>
+\]" src="form_6805.png"/></picture>
 </p>
-<p> (Notice the sign change on the second term on the right hand side, and the transfer of the time derivative to the magnetic induction vector.) The stress quantity <picture><source srcset="form_7006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{S}^{\text{tot}}$" src="form_7006.png"/></picture> is known as the total Piola-Kirchhoff stress tensor and its energy conjugate <picture><source srcset="form_7007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = \mathbf{F}^{T} \cdot \mathbf{F}$" src="form_7007.png"/></picture> is the right Cauchy-Green deformation tensor, and <picture><source srcset="form_7008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}_{v}^{i} = \mathbf{C}_{v}^{i} \left( t \right)$" src="form_7008.png"/></picture> is the re-parameterized internal variable associated with the <code>i</code>th mechanical dissipative (viscous) mechanism.</p>
+<p> (Notice the sign change on the second term on the right hand side, and the transfer of the time derivative to the magnetic induction vector.) The stress quantity <picture><source srcset="form_6806_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{S}^{\text{tot}}$" src="form_6806.png"/></picture> is known as the total Piola-Kirchhoff stress tensor and its energy conjugate <picture><source srcset="form_6807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = \mathbf{F}^{T} \cdot \mathbf{F}$" src="form_6807.png"/></picture> is the right Cauchy-Green deformation tensor, and <picture><source srcset="form_6808_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}_{v}^{i} = \mathbf{C}_{v}^{i} \left( t \right)$" src="form_6808.png"/></picture> is the re-parameterized internal variable associated with the <code>i</code>th mechanical dissipative (viscous) mechanism.</p>
 <p>Expansion of the material rate of the energy density function, and rearrangement of the various terms, results in the expression  </p><p class="formulaDsp">
-<picture><source srcset="form_7009_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathcal{D}_{\text{int}}
   = \left[ \mathbf{S}^{\text{tot}} - 2 \frac{\partial \psi_{0}}{\partial \mathbf{C}} \right] : \frac{1}{2} \dot{\mathbf{C}}
   - \sum\limits_{i}\left[ 2 \frac{\partial \psi_{0}}{\partial \mathbf{C}_{v}^{i}} \right] : \frac{1}{2} \dot{\mathbf{C}}_{v}^{i}
   + \left[ - \boldsymbol{\mathbb{B}} - \frac{\partial \psi_{0}}{\partial \boldsymbol{\mathbb{H}}} \right] \cdot \dot{\boldsymbol{\mathbb{H}}}
   \geq 0 .
-\]" src="form_7009.png"/></picture>
+\]" src="form_6809.png"/></picture>
 </p>
-<p> At this point, its worth noting the use of the <a href="https://en.wikipedia.org/wiki/Partial_derivative">partial derivatives</a> <picture><source srcset="form_7010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \left( \bullet \right)$" src="form_7010.png"/></picture>. This is an important detail that will be fundamental to a certain design choice made within the tutorial. As brief reminder of what this signifies, the partial derivative of a multi-variate function returns the derivative of that function with respect to one of those variables while holding the others constant:  </p><p class="formulaDsp">
-<picture><source srcset="form_7011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> At this point, its worth noting the use of the <a href="https://en.wikipedia.org/wiki/Partial_derivative">partial derivatives</a> <picture><source srcset="form_6810_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial \left( \bullet \right)$" src="form_6810.png"/></picture>. This is an important detail that will be fundamental to a certain design choice made within the tutorial. As brief reminder of what this signifies, the partial derivative of a multi-variate function returns the derivative of that function with respect to one of those variables while holding the others constant:  </p><p class="formulaDsp">
+<picture><source srcset="form_6811_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \frac{\partial f\left(x, y\right)}{\partial x}
   = \frac{d f\left(x, y\right)}{d x} \Big\vert_{y} .
-\]" src="form_7011.png"/></picture>
+\]" src="form_6811.png"/></picture>
 </p>
-<p> More specific to what's encoded in the dissipation inequality (with the very general free energy density function <picture><source srcset="form_7012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_{0}$" src="form_7012.png"/></picture> with its parameterization yet to be formalized), if one of the input variables is a function of another, it is also held constant and the chain rule does not propagate any further, while the computing total derivative would imply judicious use of the chain rule. This can be better understood by comparing the following two statements:  </p><p class="formulaDsp">
-<picture><source srcset="form_7013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> More specific to what's encoded in the dissipation inequality (with the very general free energy density function <picture><source srcset="form_6812_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_{0}$" src="form_6812.png"/></picture> with its parameterization yet to be formalized), if one of the input variables is a function of another, it is also held constant and the chain rule does not propagate any further, while the computing total derivative would imply judicious use of the chain rule. This can be better understood by comparing the following two statements:  </p><p class="formulaDsp">
+<picture><source srcset="form_6813_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \frac{\partial f\left(x, y\left(x\right)\right)}{\partial x}
   &amp;= \frac{d f\left(x, y\left(x\right)\right)}{d x} \Big\vert_{y} \\
   \frac{d f\left(x, y\left(x\right)\right)}{d x}
   &amp;= \frac{d f\left(x, y\left(x\right)\right)}{d x} \Big\vert_{y}
    + \frac{d f\left(x, y\left(x\right)\right)}{d y} \Big\vert_{x} \frac{d y\left(x\right)}{x} .
-\end{align*}" src="form_7013.png"/></picture>
+\end{align*}" src="form_6813.png"/></picture>
 </p>
-<p>Returning to the thermodynamics of the problem, we next exploit the arbitrariness of the quantities <picture><source srcset="form_7014_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dot{\mathbf{C}}$" src="form_7014.png"/></picture> and <picture><source srcset="form_7015_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dot{\boldsymbol{\mathbb{H}}}$" src="form_7015.png"/></picture>, by application of the Coleman-Noll procedure <b>[Coleman1963a]</b>, <b>[Coleman1967a]</b>. This leads to the identification of the kinetic conjugate quantities  </p><p class="formulaDsp">
-<picture><source srcset="form_7016_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Returning to the thermodynamics of the problem, we next exploit the arbitrariness of the quantities <picture><source srcset="form_6814_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dot{\mathbf{C}}$" src="form_6814.png"/></picture> and <picture><source srcset="form_6815_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\dot{\boldsymbol{\mathbb{H}}}$" src="form_6815.png"/></picture>, by application of the Coleman-Noll procedure <b>[Coleman1963a]</b>, <b>[Coleman1967a]</b>. This leads to the identification of the kinetic conjugate quantities  </p><p class="formulaDsp">
+<picture><source srcset="form_6816_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf{S}^{\text{tot}}
   = \mathbf{S}^{\text{tot}} \left( \mathbf{C}, \mathbf{C}_{v}^{i}, \boldsymbol{\mathbb{H}} \right)
   \dealcoloneq 2 \frac{\partial \psi_{0} \left( \mathbf{C}, \mathbf{C}_{v}^{i}, \boldsymbol{\mathbb{H}} \right)}{\partial \mathbf{C}} , \\
   \boldsymbol{\mathbb{B}}
   = \boldsymbol{\mathbb{B}} \left( \mathbf{C}, \mathbf{C}_{v}^{i}, \boldsymbol{\mathbb{H}} \right)
   \dealcoloneq - \frac{\partial \psi_{0} \left( \mathbf{C}, \mathbf{C}_{v}^{i}, \boldsymbol{\mathbb{H}} \right)}{\partial \boldsymbol{\mathbb{H}}} .
-\]" src="form_7016.png"/></picture>
+\]" src="form_6816.png"/></picture>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_72.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_72.html	2024-03-17 21:57:49.319270590 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_72.html	2024-03-17 21:57:49.323270614 +0000
@@ -142,48 +142,48 @@
 <p><a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p><a class="anchor" id="Motivation"></a></p><h3>Motivation</h3>
 <p>This program solves the same problem as <a class="el" href="step_15.html">step-15</a>, that is, it solves for the <a href="https://en.wikipedia.org/wiki/Minimal_surface">minimal surface equation</a>  </p><p class="formulaDsp">
-<picture><source srcset="form_6774_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_6943_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     F(u) \dealcoloneq -\nabla \cdot \left( \frac{1}{\sqrt{1+|\nabla u|^{2}}}\nabla u \right) &amp;= 0 \qquad
     \qquad &amp;&amp;\textrm{in} ~ \Omega
     \\
     u&amp;=g \qquad\qquad &amp;&amp;\textrm{on} ~ \partial \Omega.
-  \end{align*}" src="form_6774.png"/></picture>
+  \end{align*}" src="form_6943.png"/></picture>
 </p>
-<p>Among the issues we had identified there (see the <a href="step_15#href_anchor">Possibilities for extensions</a> section) was that when wanting to use a Newton iteration, we needed to compute the derivative of the residual of the equation with regard to the solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> (here, because the right hand side is zero, the residual is simply the left hand side). For the equation we have here, this is cumbersome but not impossible &ndash; but one can easily imagine much more complicated equations where just implementing the residual itself correctly is a challenge, let alone doing so for the derivative necessary to compute the Jacobian matrix. We will address this issue in this program: Using the automatic differentiation techniques discussed in great detail in <a class="el" href="step_71.html">step-71</a>, we will come up with a way how we only have to implement the residual and get the Jacobian for free.</p>
+<p>Among the issues we had identified there (see the <a href="step_15#href_anchor">Possibilities for extensions</a> section) was that when wanting to use a Newton iteration, we needed to compute the derivative of the residual of the equation with regard to the solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> (here, because the right hand side is zero, the residual is simply the left hand side). For the equation we have here, this is cumbersome but not impossible &ndash; but one can easily imagine much more complicated equations where just implementing the residual itself correctly is a challenge, let alone doing so for the derivative necessary to compute the Jacobian matrix. We will address this issue in this program: Using the automatic differentiation techniques discussed in great detail in <a class="el" href="step_71.html">step-71</a>, we will come up with a way how we only have to implement the residual and get the Jacobian for free.</p>
 <p>In fact, we can even go one step further. While in <a class="el" href="step_15.html">step-15</a> we have just taken the equation as a given, the minimal surface equation is actually the product of minimizing an energy. Specifically, the minimal surface equations are the Euler-Lagrange equations that correspond to minimizing the energy  </p><p class="formulaDsp">
-<picture><source srcset="form_6775_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6944_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     E(u) = \int_\Omega \Psi \left( u \right)
-  \]" src="form_6775.png"/></picture>
+  \]" src="form_6944.png"/></picture>
 </p>
 <p> where the <em>energy density</em> is given by  </p><p class="formulaDsp">
-<picture><source srcset="form_6776_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6945_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     \Psi \left( u \right) = \sqrt{1+|\nabla u|^{2}}.
-  \]" src="form_6776.png"/></picture>
+  \]" src="form_6945.png"/></picture>
 </p>
 <p> This is the same as saying that we seek to find the stationary point of the variation of the energy functional  </p><p class="formulaDsp">
-<picture><source srcset="form_6777_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
     \min\limits_{u} E \left( u \right)
       \quad \rightarrow \quad
       \delta E \left( u, \varphi \right) \dealcoloneq
       \left(\varphi, F(u)\right) = 0
       \qquad
       \forall \varphi,
-  \]" src="form_6777.png"/></picture>
+  \]" src="form_6946.png"/></picture>
 </p>
 <p> as this is where the equilibrium solution to the boundary value problem lies.</p>
-<p>The key point then is that, maybe, we don't even need to implement the residual, but that implementing the simpler energy density <picture><source srcset="form_6778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi(u)$" src="form_6778.png"/></picture> might actually be enough.</p>
+<p>The key point then is that, maybe, we don't even need to implement the residual, but that implementing the simpler energy density <picture><source srcset="form_6947_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Psi(u)$" src="form_6947.png"/></picture> might actually be enough.</p>
 <p>Our goal then is this: When using a Newton iteration, we need to repeatedly solve the linear partial differential equation  </p><p class="formulaDsp">
-<picture><source srcset="form_2895_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_2936_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     F'(u^{n},\delta u^{n}) &amp;=- F(u^{n})
-  \end{align*}" src="form_2895.png"/></picture>
+  \end{align*}" src="form_2936.png"/></picture>
 </p>
 <p> so that we can compute the update  </p><p class="formulaDsp">
-<picture><source srcset="form_2896_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_2937_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     u^{n+1}&amp;=u^{n}+\alpha^n \delta u^{n}
-  \end{align*}" src="form_2896.png"/></picture>
+  \end{align*}" src="form_2937.png"/></picture>
 </p>
-<p> with the solution <picture><source srcset="form_2829_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^{n}$" src="form_2829.png"/></picture> of the Newton step. As discussed in <a class="el" href="step_15.html">step-15</a>, we can compute the derivative <picture><source srcset="form_2823_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(u,\delta u)$" src="form_2823.png"/></picture> by hand and obtain  </p><p class="formulaDsp">
-<picture><source srcset="form_2897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> with the solution <picture><source srcset="form_2870_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^{n}$" src="form_2870.png"/></picture> of the Newton step. As discussed in <a class="el" href="step_15.html">step-15</a>, we can compute the derivative <picture><source srcset="form_2864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(u,\delta u)$" src="form_2864.png"/></picture> by hand and obtain  </p><p class="formulaDsp">
+<picture><source srcset="form_2938_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   F'(u,\delta u)
   =
   - \nabla \cdot \left( \frac{1}{\left(1+|\nabla u|^{2}\right)^{\frac{1}{2}}}\nabla
@@ -191,76 +191,76 @@
   \nabla \cdot \left( \frac{\nabla u \cdot
   \nabla \delta u}{\left(1+|\nabla u|^{2}\right)^{\frac{3}{2}}} \nabla u
   \right).
-  \]" src="form_2897.png"/></picture>
+  \]" src="form_2938.png"/></picture>
 </p>
-<p>So here then is what this program is about: It is about techniques that can help us with computing <picture><source srcset="form_2823_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(u,\delta u)$" src="form_2823.png"/></picture> without having to implement it explicitly, either by providing an implementation of <picture><source srcset="form_2215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u)$" src="form_2215.png"/></picture> or an implementation of <picture><source srcset="form_6779_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E(u)$" src="form_6779.png"/></picture>. More precisely, we will implement three different approaches and compare them in terms of run-time but also &ndash; maybe more importantly &ndash; how much human effort it takes to implement them:</p><ul>
+<p>So here then is what this program is about: It is about techniques that can help us with computing <picture><source srcset="form_2864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F'(u,\delta u)$" src="form_2864.png"/></picture> without having to implement it explicitly, either by providing an implementation of <picture><source srcset="form_2215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u)$" src="form_2215.png"/></picture> or an implementation of <picture><source srcset="form_6948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E(u)$" src="form_6948.png"/></picture>. More precisely, we will implement three different approaches and compare them in terms of run-time but also &ndash; maybe more importantly &ndash; how much human effort it takes to implement them:</p><ul>
 <li>The method used in <a class="el" href="step_15.html">step-15</a> to form the Jacobian matrix.</li>
 <li>Computing the Jacobian matrix from an implementation of the residual <picture><source srcset="form_2215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(u)$" src="form_2215.png"/></picture>, using automatic differentiation.</li>
-<li>Computing both the residual and Jacobian matrix from an implementation of the energy functional <picture><source srcset="form_6779_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E(u)$" src="form_6779.png"/></picture>, also using automatic differentiation.</li>
+<li>Computing both the residual and Jacobian matrix from an implementation of the energy functional <picture><source srcset="form_6948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E(u)$" src="form_6948.png"/></picture>, also using automatic differentiation.</li>
 </ul>
 <p>For the first of these methods, there are no conceptual changes compared to <a class="el" href="step_15.html">step-15</a>.</p>
 <p><a class="anchor" id="ComputingtheJacobianfromtheresidual"></a></p><h3>Computing the Jacobian from the residual </h3>
-<p>For the second method, let us outline how we will approach the issue using automatic differentiation to compute the linearization of the residual vector. To this end, let us change notation for a moment and denote by <picture><source srcset="form_2589_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)$" src="form_2589.png"/></picture> not the residual of the differential equation, but in fact the <em>residual vector</em> &ndash; i.e., the <em>discrete residual</em>. We do so because that is what we actually* do when we discretize the problem on a given mesh: We solve the problem <picture><source srcset="form_6780_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)=0$" src="form_6780.png"/></picture> where <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> is the vector of unknowns.</p>
-<p>More precisely, the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th component of the residual is given by  </p><p class="formulaDsp">
-<picture><source srcset="form_6781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>For the second method, let us outline how we will approach the issue using automatic differentiation to compute the linearization of the residual vector. To this end, let us change notation for a moment and denote by <picture><source srcset="form_2676_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)$" src="form_2676.png"/></picture> not the residual of the differential equation, but in fact the <em>residual vector</em> &ndash; i.e., the <em>discrete residual</em>. We do so because that is what we actually* do when we discretize the problem on a given mesh: We solve the problem <picture><source srcset="form_6949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)=0$" src="form_6949.png"/></picture> where <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> is the vector of unknowns.</p>
+<p>More precisely, the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th component of the residual is given by  </p><p class="formulaDsp">
+<picture><source srcset="form_6950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   F(U)_i \dealcoloneq
   \int\limits_{\Omega}\nabla \varphi_i \cdot \left[ \frac{1}{\sqrt{1+|\nabla
   u|^{2}}} \nabla u \right] \, dV ,
-\]" src="form_6781.png"/></picture>
+\]" src="form_6950.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_6782_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)=\sum_j U_j \varphi_j(\mathbf x)$" src="form_6782.png"/></picture>. Given this, the contribution for cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is  </p><p class="formulaDsp">
-<picture><source srcset="form_6783_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_6951_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)=\sum_j U_j \varphi_j(\mathbf x)$" src="form_6951.png"/></picture>. Given this, the contribution for cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> is  </p><p class="formulaDsp">
+<picture><source srcset="form_6952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   F(U)_i^K \dealcoloneq
   \int\limits_K\nabla \varphi_i \cdot \left[ \frac{1}{\sqrt{1+|\nabla
   u|^{2}}} \nabla u \right] \, dV ,
-\]" src="form_6783.png"/></picture>
+\]" src="form_6952.png"/></picture>
 </p>
 <p> Its first order Taylor expansion is given as  </p><p class="formulaDsp">
-<picture><source srcset="form_6784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6953_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   F(U + \delta U)_i^K
   \approx F(U)_i^K
   + \sum_{j}^{n_{\textrm{dofs}}} \left[ \frac{\partial F(U)_i^K}{\partial
   U_j} \delta U_j \right],
-\]" src="form_6784.png"/></picture>
+\]" src="form_6953.png"/></picture>
 </p>
-<p> and consequently we can compute the contribution of cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to the Jacobian matrix <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> as <picture><source srcset="form_6785_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(U)_{ij}^K = \frac{\partial F(U)_i^K}{\partial U_j}$" src="form_6785.png"/></picture>. The important point here is that on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, we can express  </p><p class="formulaDsp">
-<picture><source srcset="form_6786_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> and consequently we can compute the contribution of cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to the Jacobian matrix <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture> as <picture><source srcset="form_6954_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(U)_{ij}^K = \frac{\partial F(U)_i^K}{\partial U_j}$" src="form_6954.png"/></picture>. The important point here is that on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, we can express  </p><p class="formulaDsp">
+<picture><source srcset="form_6955_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   F(U)_i^K \dealcoloneq
   \int\limits_K\nabla \varphi_i \cdot \left[ \frac{1}{\sqrt{1+\left|
   \sum_{j'}^{n_\textrm{dofs}} U_{j'} \nabla \varphi_{j'}\right|^{2}}}
   \left(\sum_{j''}^{n_\textrm{dofs}} U_{j''} \nabla \varphi_{j''}\right)\right] \, dV.
-\]" src="form_6786.png"/></picture>
+\]" src="form_6955.png"/></picture>
 </p>
-<p> For clarity, we have used <picture><source srcset="form_6787_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j'$" src="form_6787.png"/></picture> and <picture><source srcset="form_6788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j''$" src="form_6788.png"/></picture> as counting indices to make clear that they are distinct from each other and from <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> above. Because in this formula, <picture><source srcset="form_2589_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)$" src="form_2589.png"/></picture> only depends on the coefficients <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture>, we can compute the derivative <picture><source srcset="form_6789_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(U)_{ij}^K$" src="form_6789.png"/></picture> as a matrix via automatic differentiation of <picture><source srcset="form_6790_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)_i^K$" src="form_6790.png"/></picture>. By the same argument as we always use, it is clear that <picture><source srcset="form_6791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)^K$" src="form_6791.png"/></picture> does not actually depend on all* unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture>, but only on those unknowns for which <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> is a shape function that lives on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, and so in practice, we restrict <picture><source srcset="form_6791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)^K$" src="form_6791.png"/></picture> and <picture><source srcset="form_6792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(U)^K$" src="form_6792.png"/></picture> to that part of the vector and matrix that corresponds to the <em>local</em> DoF indices, and then distribute from the local cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to the global objects.</p>
-<p>Using all of these realizations, the approach will then be to implement <picture><source srcset="form_6791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)^K$" src="form_6791.png"/></picture> in the program and let the automatic differentiation machinery compute the derivatives <picture><source srcset="form_6792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(U)^K$" src="form_6792.png"/></picture> from that.</p>
+<p> For clarity, we have used <picture><source srcset="form_6956_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j'$" src="form_6956.png"/></picture> and <picture><source srcset="form_6957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j''$" src="form_6957.png"/></picture> as counting indices to make clear that they are distinct from each other and from <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> above. Because in this formula, <picture><source srcset="form_2676_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)$" src="form_2676.png"/></picture> only depends on the coefficients <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture>, we can compute the derivative <picture><source srcset="form_6958_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(U)_{ij}^K$" src="form_6958.png"/></picture> as a matrix via automatic differentiation of <picture><source srcset="form_6959_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)_i^K$" src="form_6959.png"/></picture>. By the same argument as we always use, it is clear that <picture><source srcset="form_6960_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)^K$" src="form_6960.png"/></picture> does not actually depend on all* unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture>, but only on those unknowns for which <picture><source srcset="form_665_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_665.png"/></picture> is a shape function that lives on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, and so in practice, we restrict <picture><source srcset="form_6960_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)^K$" src="form_6960.png"/></picture> and <picture><source srcset="form_6961_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(U)^K$" src="form_6961.png"/></picture> to that part of the vector and matrix that corresponds to the <em>local</em> DoF indices, and then distribute from the local cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to the global objects.</p>
+<p>Using all of these realizations, the approach will then be to implement <picture><source srcset="form_6960_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)^K$" src="form_6960.png"/></picture> in the program and let the automatic differentiation machinery compute the derivatives <picture><source srcset="form_6961_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(U)^K$" src="form_6961.png"/></picture> from that.</p>
 <p><a class="anchor" id="ComputingtheJacobianandtheresidualfromtheenergyfunctional"></a></p><h3>Computing the Jacobian and the residual from the energy functional </h3>
 <p>For the final implementation of the assembly process, we will move a level higher than the residual: our entire linear system will be determined directly from the energy functional that governs the physics of this boundary value problem. We can take advantage of the fact that we can calculate the total energy in the domain directly from the local contributions, i.e.,  </p><p class="formulaDsp">
-<picture><source srcset="form_6793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6962_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   E \left( U \right) \dealcoloneq \int\limits_{\Omega} \Psi \left( u
   \right) \, dV .
-\]" src="form_6793.png"/></picture>
+\]" src="form_6962.png"/></picture>
 </p>
 <p> In the discrete setting, this means that on each finite element we have  </p><p class="formulaDsp">
-<picture><source srcset="form_6794_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6963_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    E \left( U \right)^K
     \dealcoloneq \int\limits_{K} \Psi \left( u \right) \, dV
     \approx \sum\limits_{q}^{n_{\textrm{q-points}}} \Psi \left( u \left(
     \mathbf{x}_{q} \right) \right) \underbrace{\vert J_{q} \vert \times W_{q}}_{\text{JxW(q)}} .
-\]" src="form_6794.png"/></picture>
+\]" src="form_6963.png"/></picture>
 </p>
 <p> If we implement the cell energy, which depends on the field solution, we can compute its first (discrete) variation  </p><p class="formulaDsp">
-<picture><source srcset="form_6795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   F(U)^K_i
     = \frac{\partial E(U)^K}{\partial U_i}
-\]" src="form_6795.png"/></picture>
+\]" src="form_6964.png"/></picture>
 </p>
 <p> and, thereafter, its second (discrete) variation  </p><p class="formulaDsp">
-<picture><source srcset="form_6796_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6965_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   J(U)^K_{ij}
     = \frac{\partial^{2}  E(U)^K}{\partial U_i \partial U_j}.
-\]" src="form_6796.png"/></picture>
+\]" src="form_6965.png"/></picture>
 </p>
-<p> So, from the cell contribution to the total energy function, we may expect to have the approximate residual and tangent contributions generated for us as long as we can provide an implementation of the local energy <picture><source srcset="form_6797_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E(U)^K$" src="form_6797.png"/></picture>. Again, due to the design of the automatic differentiation variables used in this tutorial, in practice these approximations for the contributions to the residual vector and tangent matrix are actually accurate to machine precision.</p>
+<p> So, from the cell contribution to the total energy function, we may expect to have the approximate residual and tangent contributions generated for us as long as we can provide an implementation of the local energy <picture><source srcset="form_6966_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E(U)^K$" src="form_6966.png"/></picture>. Again, due to the design of the automatic differentiation variables used in this tutorial, in practice these approximations for the contributions to the residual vector and tangent matrix are actually accurate to machine precision.</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
 <p>The majority of this tutorial is an exact replica of <a class="el" href="step_15.html">step-15</a>. So, in the interest of brevity and maintaining a focus on the changes implemented here, we will only document what's new and simply indicate which sections of code are a repetition of what has come before.</p>
 <p><a class="anchor" id="Includefiles"></a> </p><h3>Include files</h3>
@@ -578,7 +578,7 @@
 <div class="line">  </div>
 <div class="ttc" id="agroup__MeshWorker_html_ga76ec61fbd188fb320fe8ca166a79b322"><div class="ttname"><a href="group__MeshWorker.html#href_anchor">MeshWorker::mesh_loop</a></div><div class="ttdeci">void mesh_loop(const CellIteratorType &amp;begin, const CellIteratorType &amp;end, const CellWorkerFunctionType &amp;cell_worker, const CopierType &amp;copier, const ScratchData &amp;sample_scratch_data, const CopyData &amp;sample_copy_data, const AssembleFlags flags=assemble_own_cells, const BoundaryWorkerFunctionType &amp;boundary_worker=BoundaryWorkerFunctionType(), const FaceWorkerFunctionType &amp;face_worker=FaceWorkerFunctionType(), const unsigned int queue_length=2 *MultithreadInfo::n_threads(), const unsigned int chunk_size=8)</div><div class="ttdef"><b>Definition</b> <a href="mesh__loop_8h_source.html#href_anchor">mesh_loop.h:282</a></div></div>
 <div class="ttc" id="anamespaceMeshWorker_html_ac7a9db8b34d398d7d398d1e8809874aaa44a76e905b1d4cd80af387b5fac4d8aa"><div class="ttname"><a href="namespaceMeshWorker.html#href_anchor">MeshWorker::assemble_own_cells</a></div><div class="ttdeci">@ assemble_own_cells</div><div class="ttdef"><b>Definition</b> <a href="assemble__flags_8h_source.html#href_anchor">assemble_flags.h:50</a></div></div>
-</div><!-- fragment --><p>And finally, as is done in <a class="el" href="step_15.html">step-15</a>, we remove hanging nodes from the system and apply zero boundary values to the linear system that defines the Newton updates <picture><source srcset="form_2826_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^n$" src="form_2826.png"/></picture>.</p>
+</div><!-- fragment --><p>And finally, as is done in <a class="el" href="step_15.html">step-15</a>, we remove hanging nodes from the system and apply zero boundary values to the linear system that defines the Newton updates <picture><source srcset="form_2867_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u^n$" src="form_2867.png"/></picture>.</p>
 <div class="fragment"><div class="line">      hanging_node_constraints.condense(system_matrix);</div>
 <div class="line">      hanging_node_constraints.condense(system_rhs);</div>
 <div class="line">  </div>
@@ -597,15 +597,15 @@
 <div class="ttc" id="anamespaceMatrixTools_html_a9ad0eb7a8662628534586716748d62fb"><div class="ttname"><a href="namespaceMatrixTools.html#href_anchor">MatrixTools::apply_boundary_values</a></div><div class="ttdeci">void apply_boundary_values(const std::map&lt; types::global_dof_index, number &gt; &amp;boundary_values, SparseMatrix&lt; number &gt; &amp;matrix, Vector&lt; number &gt; &amp;solution, Vector&lt; number &gt; &amp;right_hand_side, const bool eliminate_columns=true)</div><div class="ttdef"><b>Definition</b> <a href="matrix__tools_8cc_source.html#href_anchor">matrix_tools.cc:76</a></div></div>
 <div class="ttc" id="anamespaceVectorTools_html_ab2562d41bb26f362043f9719a8cd9b87"><div class="ttname"><a href="namespaceVectorTools.html#href_anchor">VectorTools::interpolate_boundary_values</a></div><div class="ttdeci">void interpolate_boundary_values(const Mapping&lt; dim, spacedim &gt; &amp;mapping, const DoFHandler&lt; dim, spacedim &gt; &amp;dof, const std::map&lt; types::boundary_id, const Function&lt; spacedim, number &gt; * &gt; &amp;function_map, std::map&lt; types::global_dof_index, number &gt; &amp;boundary_values, const ComponentMask &amp;component_mask=ComponentMask())</div></div>
 </div><!-- fragment --><p><a class="anchor" id="Assemblyviadifferentiationoftheresidualvector"></a> </p><h5>Assembly via differentiation of the residual vector</h5>
-<p>As outlined in the introduction, what we need to do for this second approach is implement the local contributions <picture><source srcset="form_6791_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)^K$" src="form_6791.png"/></picture> from cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to the residual vector, and then let the AD machinery deal with how to compute the derivatives <picture><source srcset="form_6798_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(U)_{ij}^K=\frac{\partial F(U)^K_i}{\partial U_j}$" src="form_6798.png"/></picture> from it.</p>
+<p>As outlined in the introduction, what we need to do for this second approach is implement the local contributions <picture><source srcset="form_6960_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)^K$" src="form_6960.png"/></picture> from cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to the residual vector, and then let the AD machinery deal with how to compute the derivatives <picture><source srcset="form_6967_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(U)_{ij}^K=\frac{\partial F(U)^K_i}{\partial U_j}$" src="form_6967.png"/></picture> from it.</p>
 <p>For the following, recall that  </p><p class="formulaDsp">
-<picture><source srcset="form_6799_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6968_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    F(U)_i^K \dealcoloneq
    \int\limits_K\nabla \varphi_i \cdot \left[ \frac{1}{\sqrt{1+|\nabla
    u|^{2}}} \nabla u \right] \, dV ,
-   \]" src="form_6799.png"/></picture>
+   \]" src="form_6968.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_6782_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)=\sum_j U_j \varphi_j(\mathbf x)$" src="form_6782.png"/></picture>.</p>
+<p> where <picture><source srcset="form_6951_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)=\sum_j U_j \varphi_j(\mathbf x)$" src="form_6951.png"/></picture>.</p>
 <p>Let us see how this is implemented in practice:</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> MinimalSurfaceProblem&lt;dim&gt;::assemble_system_with_residual_linearization()</div>
@@ -651,12 +651,12 @@
/usr/share/doc/packages/dealii/doxygen/deal.II/step_74.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_74.html	2024-03-17 21:57:49.403271108 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_74.html	2024-03-17 21:57:49.399271083 +0000
@@ -144,28 +144,28 @@
 </ol>
 <p><a class="anchor" id="Theequation"></a></p><h3>The equation</h3>
 <p>In this example, we consider Poisson's equation  </p><p class="formulaDsp">
-<picture><source srcset="form_6806_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6975_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 - \nabla \cdot \left( \nu  \nabla u\right) = f  \qquad   \mbox{in } \Omega,
-\]" src="form_6806.png"/></picture>
+\]" src="form_6975.png"/></picture>
 </p>
 <p> subject to the boundary condition  </p><p class="formulaDsp">
-<picture><source srcset="form_6807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6976_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u = g_D \qquad \mbox{on } \partial \Omega.
-\]" src="form_6807.png"/></picture>
+\]" src="form_6976.png"/></picture>
 </p>
-<p> For simplicity, we assume that the diffusion coefficient <picture><source srcset="form_3078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3078.png"/></picture> is constant here. Note that if <picture><source srcset="form_3078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3078.png"/></picture> is discontinuous, we need to take this into account when computing jump terms on cell faces.</p>
-<p>We denote the mesh by <picture><source srcset="form_6808_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb T}_h$" src="form_6808.png"/></picture>, and <picture><source srcset="form_6809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\in{\mathbb T}_h$" src="form_6809.png"/></picture> is a mesh cell. The sets of interior and boundary faces are denoted by <picture><source srcset="form_6810_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb F}^i_h$" src="form_6810.png"/></picture> and <picture><source srcset="form_6811_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb F}^b_h$" src="form_6811.png"/></picture> respectively. Let <picture><source srcset="form_6812_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K^0$" src="form_6812.png"/></picture> and <picture><source srcset="form_6813_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K^1$" src="form_6813.png"/></picture> be the two cells sharing a face <picture><source srcset="form_6814_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\in F_h^i$" src="form_6814.png"/></picture>, and <picture><source srcset="form_2957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n$" src="form_2957.png"/></picture> be the outer normal vector of <picture><source srcset="form_6812_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K^0$" src="form_6812.png"/></picture>. Then the jump operator is given by the "here minus there" formula,  </p><p class="formulaDsp">
-<picture><source srcset="form_6815_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> For simplicity, we assume that the diffusion coefficient <picture><source srcset="form_3006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3006.png"/></picture> is constant here. Note that if <picture><source srcset="form_3006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3006.png"/></picture> is discontinuous, we need to take this into account when computing jump terms on cell faces.</p>
+<p>We denote the mesh by <picture><source srcset="form_6977_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb T}_h$" src="form_6977.png"/></picture>, and <picture><source srcset="form_6978_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\in{\mathbb T}_h$" src="form_6978.png"/></picture> is a mesh cell. The sets of interior and boundary faces are denoted by <picture><source srcset="form_6979_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb F}^i_h$" src="form_6979.png"/></picture> and <picture><source srcset="form_6980_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbb F}^b_h$" src="form_6980.png"/></picture> respectively. Let <picture><source srcset="form_6981_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K^0$" src="form_6981.png"/></picture> and <picture><source srcset="form_6982_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K^1$" src="form_6982.png"/></picture> be the two cells sharing a face <picture><source srcset="form_6983_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\in F_h^i$" src="form_6983.png"/></picture>, and <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf n$" src="form_3020.png"/></picture> be the outer normal vector of <picture><source srcset="form_6981_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K^0$" src="form_6981.png"/></picture>. Then the jump operator is given by the "here minus there" formula,  </p><p class="formulaDsp">
+<picture><source srcset="form_6984_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \jump{v} = v^0 - v^1
-\]" src="form_6815.png"/></picture>
+\]" src="form_6984.png"/></picture>
 </p>
 <p> and the averaging operator as  </p><p class="formulaDsp">
-<picture><source srcset="form_6816_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6985_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \average{v} = \frac{v^0 + v^1}{2}
-\]" src="form_6816.png"/></picture>
+\]" src="form_6985.png"/></picture>
 </p>
-<p> respectively. Note that when <picture><source srcset="form_6817_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\subset \partial \Omega$" src="form_6817.png"/></picture>, we define <picture><source srcset="form_6818_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{v} = v$" src="form_6818.png"/></picture> and <picture><source srcset="form_6819_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{v}=v$" src="form_6819.png"/></picture>. The discretization using the SIPG is given by the following weak formula (more details can be found in <b>[di2011mathematical]</b> and the references therein)  </p><p class="formulaDsp">
-<picture><source srcset="form_6820_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> respectively. Note that when <picture><source srcset="form_6986_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\subset \partial \Omega$" src="form_6986.png"/></picture>, we define <picture><source srcset="form_6987_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\jump{v} = v$" src="form_6987.png"/></picture> and <picture><source srcset="form_6988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\average{v}=v$" src="form_6988.png"/></picture>. The discretization using the SIPG is given by the following weak formula (more details can be found in <b>[di2011mathematical]</b> and the references therein)  </p><p class="formulaDsp">
+<picture><source srcset="form_6989_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 &amp;\sum_{K\in {\mathbb T}_h} (\nabla v_h, \nu \nabla u_h)_K\\
 &amp;-\sum_{F \in F_h^i} \left\{
     \left&lt; \jump{v_h}, \nu\average{ \nabla u_h} \cdot  \mathbf n \right&gt;_F
@@ -181,52 +181,52 @@
   - \sum_{F \in F_h^b} \left\{
     \left&lt; \nabla v_h \cdot \mathbf n, \nu g_D\right&gt;_F - \left&lt;v_h,\nu \sigma g_D\right&gt;_F
   \right\}.
-\end{align*}" src="form_6820.png"/></picture>
+\end{align*}" src="form_6989.png"/></picture>
 </p>
 <p><a class="anchor" id="Thepenaltyparameter"></a></p><h3>The penalty parameter</h3>
-<p>The penalty parameter is defined as <picture><source srcset="form_6821_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma = \gamma/h_f$" src="form_6821.png"/></picture>, where <picture><source srcset="form_6822_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_f$" src="form_6822.png"/></picture> a local length scale associated with the cell face; here we choose an approximation of the length of the cell in the direction normal to the face: <picture><source srcset="form_6823_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 1{h_f} = \frac 12 \left(\frac 1{h_K} + \frac 1{h_{K'}}\right)$" src="form_6823.png"/></picture>, where <picture><source srcset="form_6824_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K,K'$" src="form_6824.png"/></picture> are the two cells adjacent to the face <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> and we we compute <picture><source srcset="form_6825_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_K = \frac{|K|}{|f|}$" src="form_6825.png"/></picture>.</p>
-<p>In the formula above, <picture><source srcset="form_1532_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1532.png"/></picture> is the penalization constant. To ensure the discrete coercivity, the penalization constant has to be large enough <b>[ainsworth2007posteriori]</b>. People do not really have consensus on which of the formulas proposed in the literature should be used. (This is similar to the situation discussed in the "Results" section of <a class="el" href="step_47.html">step-47</a>.) One can just pick a large constant, while other options could be the multiples of <picture><source srcset="form_6826_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(p+1)^2$" src="form_6826.png"/></picture> or <picture><source srcset="form_5220_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p(p+1)$" src="form_5220.png"/></picture>. In this code, we follow <a class="el" href="step_39.html">step-39</a> and use <picture><source srcset="form_5225_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma = p(p+1)$" src="form_5225.png"/></picture>.</p>
+<p>The penalty parameter is defined as <picture><source srcset="form_6990_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma = \gamma/h_f$" src="form_6990.png"/></picture>, where <picture><source srcset="form_6991_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_f$" src="form_6991.png"/></picture> a local length scale associated with the cell face; here we choose an approximation of the length of the cell in the direction normal to the face: <picture><source srcset="form_6992_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\frac 1{h_f} = \frac 12 \left(\frac 1{h_K} + \frac 1{h_{K'}}\right)$" src="form_6992.png"/></picture>, where <picture><source srcset="form_6993_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K,K'$" src="form_6993.png"/></picture> are the two cells adjacent to the face <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> and we we compute <picture><source srcset="form_6994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_K = \frac{|K|}{|f|}$" src="form_6994.png"/></picture>.</p>
+<p>In the formula above, <picture><source srcset="form_1538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma$" src="form_1538.png"/></picture> is the penalization constant. To ensure the discrete coercivity, the penalization constant has to be large enough <b>[ainsworth2007posteriori]</b>. People do not really have consensus on which of the formulas proposed in the literature should be used. (This is similar to the situation discussed in the "Results" section of <a class="el" href="step_47.html">step-47</a>.) One can just pick a large constant, while other options could be the multiples of <picture><source srcset="form_6995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(p+1)^2$" src="form_6995.png"/></picture> or <picture><source srcset="form_5459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p(p+1)$" src="form_5459.png"/></picture>. In this code, we follow <a class="el" href="step_39.html">step-39</a> and use <picture><source srcset="form_5464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma = p(p+1)$" src="form_5464.png"/></picture>.</p>
 <p><a class="anchor" id="Aposteriorierrorestimator"></a></p><h3>A posteriori error estimator</h3>
 <p>In this example, with a slight modification, we use the error estimator by Karakashian and Pascal <b>[karakashian2003posteriori]</b>  </p><p class="formulaDsp">
-<picture><source srcset="form_6827_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_6996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \eta^2 = \sum_{K \in {\mathbb T}_h} \eta^2_{K} +  \sum_{f_i \in {\mathbb F}^i_h}  \eta^2_{f_i} + \sum_{f_b \in F^i_b}\eta^2_{f_b}
-\]" src="form_6827.png"/></picture>
+\]" src="form_6996.png"/></picture>
 </p>
 <p> where  </p><p class="formulaDsp">
-<picture><source srcset="form_6828_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_6997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 \eta^2_{K} &amp;= h_K^2 \left\| f + \nu \Delta u_h \right\|_K^2,
 \\
 \eta^2_{f_i} &amp;= \sigma \left\| \jump{u_h}  \right\|_f^2   +  h_f \left\|  \jump{\nu \nabla u_h} \cdot \mathbf n   \right\|_f^2,
 \\
 \eta_{f_b}^2 &amp;=  \sigma \left\| u_h-g_D \right\|_f^2.
-\end{align*}" src="form_6828.png"/></picture>
+\end{align*}" src="form_6997.png"/></picture>
 </p>
-<p> Here we use <picture><source srcset="form_6821_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma = \gamma/h_f$" src="form_6821.png"/></picture> instead of <picture><source srcset="form_6829_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma^2/h_f$" src="form_6829.png"/></picture> for the jump terms of <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> (the first term in <picture><source srcset="form_6830_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta^2_{f_i}$" src="form_6830.png"/></picture> and <picture><source srcset="form_6831_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_{f_b}^2$" src="form_6831.png"/></picture>).</p>
+<p> Here we use <picture><source srcset="form_6990_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma = \gamma/h_f$" src="form_6990.png"/></picture> instead of <picture><source srcset="form_6998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma^2/h_f$" src="form_6998.png"/></picture> for the jump terms of <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> (the first term in <picture><source srcset="form_6999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta^2_{f_i}$" src="form_6999.png"/></picture> and <picture><source srcset="form_7000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_{f_b}^2$" src="form_7000.png"/></picture>).</p>
 <p>In order to compute this estimator, in each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> we compute  </p><p class="formulaDsp">
-<picture><source srcset="form_6832_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7001_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 \eta_{c}^2 &amp;= h_K^2 \left\| f + \nu \Delta u_h \right\|_K^2,
 \\
 \eta_{f}^2 &amp;= \sum_{f\in \partial K}\lbrace \sigma \left\| \jump{u_h}  \right\|_f^2   +  h_f \left\|  \jump{\nu \nabla u_h} \cdot \mathbf n  \right\|_f^2 \rbrace,
 \\
 \eta_{b}^2 &amp;= \sum_{f\in \partial K \cap \partial \Omega}  \sigma \left\| (u_h -g_D)  \right\|_f^2.
-\end{align*}" src="form_6832.png"/></picture>
+\end{align*}" src="form_7001.png"/></picture>
 </p>
 <p> Then the square of the error estimate per cell is  </p><p class="formulaDsp">
-<picture><source srcset="form_6833_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7002_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \eta_\text{local}^2 =\eta_{c}^2+0.5\eta_{f}^2+\eta_{b}^2.
-\]" src="form_6833.png"/></picture>
+\]" src="form_7002.png"/></picture>
 </p>
-<p> The factor of <picture><source srcset="form_3007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0.5$" src="form_3007.png"/></picture> results from the fact that the overall error estimator includes each interior face only once, and so the estimators per cell count it with a factor of one half for each of the two adjacent cells. Note that we compute <picture><source srcset="form_6834_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_\text{local}^2$" src="form_6834.png"/></picture> instead of <picture><source srcset="form_6835_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_\text{local}$" src="form_6835.png"/></picture> to simplify the implementation. The error estimate square per cell is then stored in a global vector, whose <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture> norm is equal to <picture><source srcset="form_6836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta^2$" src="form_6836.png"/></picture>.</p>
+<p> The factor of <picture><source srcset="form_3070_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0.5$" src="form_3070.png"/></picture> results from the fact that the overall error estimator includes each interior face only once, and so the estimators per cell count it with a factor of one half for each of the two adjacent cells. Note that we compute <picture><source srcset="form_7003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_\text{local}^2$" src="form_7003.png"/></picture> instead of <picture><source srcset="form_7004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta_\text{local}$" src="form_7004.png"/></picture> to simplify the implementation. The error estimate square per cell is then stored in a global vector, whose <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture> norm is equal to <picture><source srcset="form_7005_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta^2$" src="form_7005.png"/></picture>.</p>
 <p><a class="anchor" id="Thetestcase"></a></p><h3>The test case</h3>
-<p>In the first test problem, we run a convergence test using a smooth manufactured solution with <picture><source srcset="form_6837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu =1$" src="form_6837.png"/></picture> in 2D  </p><p class="formulaDsp">
-<picture><source srcset="form_6838_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>In the first test problem, we run a convergence test using a smooth manufactured solution with <picture><source srcset="form_7006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu =1$" src="form_7006.png"/></picture> in 2D  </p><p class="formulaDsp">
+<picture><source srcset="form_7007_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 u&amp;=\sin(2\pi x)\sin(2\pi y), &amp;\qquad\qquad &amp;(x,y)\in\Omega=(0,1)\times (0,1),
 \\
 u&amp;=0,                        &amp;\qquad\qquad &amp;\text{on } \partial \Omega,
-\end{align*}" src="form_6838.png"/></picture>
+\end{align*}" src="form_7007.png"/></picture>
 </p>
-<p> and <picture><source srcset="form_6839_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f= 8\pi^2 u$" src="form_6839.png"/></picture>. We compute errors against the manufactured solution and evaluate the convergence rate.</p>
-<p>In the second test, we choose <a class="el" href="classFunctions_1_1LSingularityFunction.html">Functions::LSingularityFunction</a> on a L-shaped domain (<a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_L</a>) in 2D. The solution is given in the polar coordinates by <picture><source srcset="form_6840_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(r,\phi) = r^{\frac{2}{3}}\sin \left(\frac{2}{3}\phi \right)$" src="form_6840.png"/></picture>, which has a singularity at the origin. An error estimator is constructed to detect the region with large errors, according to which the mesh is refined adaptively.</p>
+<p> and <picture><source srcset="form_7008_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f= 8\pi^2 u$" src="form_7008.png"/></picture>. We compute errors against the manufactured solution and evaluate the convergence rate.</p>
+<p>In the second test, we choose <a class="el" href="classFunctions_1_1LSingularityFunction.html">Functions::LSingularityFunction</a> on a L-shaped domain (<a class="el" href="namespaceGridGenerator.html#href_anchor">GridGenerator::hyper_L</a>) in 2D. The solution is given in the polar coordinates by <picture><source srcset="form_7009_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(r,\phi) = r^{\frac{2}{3}}\sin \left(\frac{2}{3}\phi \right)$" src="form_7009.png"/></picture>, which has a singularity at the origin. An error estimator is constructed to detect the region with large errors, according to which the mesh is refined adaptively.</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
 <p>The first few files have already been covered in previous examples and will thus not be further commented on:</p>
 <div class="fragment"><div class="line">  #include &lt;deal.II/base/quadrature_lib.h&gt;</div>
@@ -359,7 +359,7 @@
 <div class="line">  </div>
 <div class="line">  </div>
 <div class="line">  </div>
-</div><!-- fragment --><p>The right-hand side that corresponds to the function <a class="el" href="classFunctions_1_1LSingularityFunction.html">Functions::LSingularityFunction</a>, where we assume that the diffusion coefficient <picture><source srcset="form_4380_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu = 1$" src="form_4380.png"/></picture>:</p>
+</div><!-- fragment --><p>The right-hand side that corresponds to the function <a class="el" href="classFunctions_1_1LSingularityFunction.html">Functions::LSingularityFunction</a>, where we assume that the diffusion coefficient <picture><source srcset="form_4519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu = 1$" src="form_4519.png"/></picture>:</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keyword">class </span>SingularRightHandSide : <span class="keyword">public</span> <a class="code hl_class" href="classFunction.html">Function</a>&lt;dim&gt;</div>
 <div class="line">    {</div>
@@ -393,7 +393,7 @@
 <div class="ttc" id="aclassFunctions_1_1LSingularityFunction_html"><div class="ttname"><a href="classFunctions_1_1LSingularityFunction.html">Functions::LSingularityFunction</a></div><div class="ttdef"><b>Definition</b> <a href="function__lib_8h_source.html#href_anchor">function_lib.h:411</a></div></div>
 <div class="ttc" id="aclassFunctions_1_1LSingularityFunction_html_a770a8e877f17612fe37f611004d3e126"><div class="ttname"><a href="classFunctions_1_1LSingularityFunction.html#href_anchor">Functions::LSingularityFunction::laplacian</a></div><div class="ttdeci">virtual double laplacian(const Point&lt; 2 &gt; &amp;p, const unsigned int component=0) const override</div><div class="ttdef"><b>Definition</b> <a href="function__lib_8cc_source.html#href_anchor">function_lib.cc:1247</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="Auxiliaryfunctions"></a> </p><h3>Auxiliary functions</h3>
-<p>This function computes the penalty <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture>.</p>
+<p>This function computes the penalty <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture>.</p>
 <div class="fragment"><div class="line">    <span class="keywordtype">double</span> get_penalty_factor(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fe_degree,</div>
 <div class="line">                              <span class="keyword">const</span> <span class="keywordtype">double</span>       cell_extent_left,</div>
 <div class="line">                              <span class="keyword">const</span> <span class="keywordtype">double</span>       cell_extent_right)</div>
@@ -492,7 +492,7 @@
 </div><!-- fragment --><p>The remainder of the class's members are used for the following:</p><ul>
 <li>Vectors to store error estimator square and energy norm square per cell.</li>
 <li>Print convergence rate and errors on the screen.</li>
-<li>The fiffusion coefficient <picture><source srcset="form_3078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3078.png"/></picture> is set to 1.</li>
+<li>The fiffusion coefficient <picture><source srcset="form_3006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3006.png"/></picture> is set to 1.</li>
 <li>Members that store information about the test case to be computed.</li>
 </ul>
 <div class="fragment"><div class="line">      <a class="code hl_class" href="classVector.html">Vector&lt;double&gt;</a> estimated_error_square_per_cell;</div>
@@ -802,7 +802,7 @@
 <div class="ttc" id="aclassSparseDirectUMFPACK_html_a25b1d3c7dbb88158a76165a4a56a16d6"><div class="ttname"><a href="classSparseDirectUMFPACK.html#href_anchor">SparseDirectUMFPACK::initialize</a></div><div class="ttdeci">void initialize(const SparsityPattern &amp;sparsity_pattern)</div><div class="ttdef"><b>Definition</b> <a href="sparse__direct_8cc_source.html#href_anchor">sparse_direct.cc:68</a></div></div>
 <div class="ttc" id="anamespaceUtilities_html_a6195c5f009ea8c7c536c6ffdf108c32f"><div class="ttname"><a href="namespaceUtilities.html#href_anchor">Utilities::int_to_string</a></div><div class="ttdeci">std::string int_to_string(const unsigned int value, const unsigned int digits=numbers::invalid_unsigned_int)</div><div class="ttdef"><b>Definition</b> <a href="base_2utilities_8cc_source.html#href_anchor">utilities.cc:471</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="Thecompute_error_estimatefunction"></a> </p><h3>The compute_error_estimate() function</h3>
-<p>The assembly of the error estimator here is quite similar to that of the global matrix and right-had side and can be handled by the <a class="el" href="group__MeshWorker.html#href_anchor">MeshWorker::mesh_loop()</a> framework. To understand what each of the local (lambda) functions is doing, recall first that the local cell residual is defined as <picture><source srcset="form_6841_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_K^2 \left\| f + \nu \Delta u_h \right\|_K^2$" src="form_6841.png"/></picture>:</p>
+<p>The assembly of the error estimator here is quite similar to that of the global matrix and right-had side and can be handled by the <a class="el" href="group__MeshWorker.html#href_anchor">MeshWorker::mesh_loop()</a> framework. To understand what each of the local (lambda) functions is doing, recall first that the local cell residual is defined as <picture><source srcset="form_7010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_K^2 \left\| f + \nu \Delta u_h \right\|_K^2$" src="form_7010.png"/></picture>:</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> SIPGLaplace&lt;dim&gt;::compute_error_estimate()</div>
 <div class="line">    {</div>
@@ -835,8 +835,8 @@
 <div class="line">        };</div>
 <div class="line">  </div>
 <div class="ttc" id="asymmetric__tensor_8h_html_a82808d9c285700b167c758f42c79e833"><div class="ttname"><a href="symmetric__tensor_8h.html#href_anchor">trace</a></div><div class="ttdeci">DEAL_II_HOST constexpr Number trace(const SymmetricTensor&lt; 2, dim2, Number &gt; &amp;)</div></div>
-</div><!-- fragment --><p>Next compute boundary terms <picture><source srcset="form_6842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sum_{f\in \partial K \cap \partial \Omega}
-   \sigma \left\| [  u_h-g_D ]  \right\|_f^2  $" src="form_6842.png"/></picture>:</p>
+</div><!-- fragment --><p>Next compute boundary terms <picture><source srcset="form_7011_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sum_{f\in \partial K \cap \partial \Omega}
+   \sigma \left\| [  u_h-g_D ]  \right\|_f^2  $" src="form_7011.png"/></picture>:</p>
 <div class="fragment"><div class="line">      <span class="keyword">const</span> <span class="keyword">auto</span> boundary_worker = [&amp;](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;        cell,</div>
 <div class="line">                                       <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;face_no,</div>
 <div class="line">                                       <span class="keyword">auto</span> &amp;              scratch_data,</div>
@@ -866,9 +866,9 @@
 <div class="line">        copy_data.value += penalty * difference_norm_square;</div>
 <div class="line">      };</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>And finally interior face terms <picture><source srcset="form_6843_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sum_{f\in \partial K}\lbrace \sigma
+</div><!-- fragment --><p>And finally interior face terms <picture><source srcset="form_7012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sum_{f\in \partial K}\lbrace \sigma
    \left\| [u_h]  \right\|_f^2   +  h_f \left\|  [\nu \nabla u_h \cdot
-   \mathbf n ] \right\|_f^2 \rbrace$" src="form_6843.png"/></picture>:</p>
+   \mathbf n ] \right\|_f^2 \rbrace$" src="form_7012.png"/></picture>:</p>
 <div class="fragment"><div class="line">      <span class="keyword">const</span> <span class="keyword">auto</span> face_worker = [&amp;](<span class="keyword">const</span> <span class="keyword">auto</span> &amp;        cell,</div>
 <div class="line">                                   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;f,</div>
 <div class="line">                                   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;sf,</div>
@@ -958,25 +958,25 @@
 <div class="ttc" id="agroup__feaccess_html_ggaa94b67d2fdcc390690c523f28019e52fa378cbcddbdf54fb3f9f0acf47b1c4719"><div class="ttname"><a href="group__feaccess.html#href_anchor">update_hessians</a></div><div class="ttdeci">@ update_hessians</div><div class="ttdoc">Second derivatives of shape functions.</div><div class="ttdef"><b>Definition</b> <a href="fe__update__flags_8h_source.html#href_anchor">fe_update_flags.h:88</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="Thecompute_energy_norm_errorfunction"></a> </p><h3>The compute_energy_norm_error() function</h3>
 <p>Next, we evaluate the accuracy in terms of the energy norm. This function is similar to the assembling of the error estimator above. Here we compute the square of the energy norm defined by  </p><p class="formulaDsp">
-<picture><source srcset="form_6844_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7013_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \|u \|_{1,h}^2 = \sum_{K \in \Gamma_h} \nu\|\nabla u \|_K^2 +
    \sum_{f \in F_i} \sigma \| [ u ] \|_f^2 +
    \sum_{f \in F_b} \sigma  \|u\|_f^2.
-   \]" src="form_6844.png"/></picture>
+   \]" src="form_7013.png"/></picture>
 </p>
 <p> Therefore the corresponding error is  </p><p class="formulaDsp">
-<picture><source srcset="form_6845_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7014_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    \|u -u_h \|_{1,h}^2 = \sum_{K \in \Gamma_h} \nu\|\nabla (u_h - u)  \|_K^2
    + \sum_{f \in F_i} \sigma  \|[ u_h ] \|_f^2 + \sum_{f \in F_b}\sigma
    \|u_h-g_D\|_f^2.
-   \]" src="form_6845.png"/></picture>
+   \]" src="form_7014.png"/></picture>
 </p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">double</span> SIPGLaplace&lt;dim&gt;::compute_energy_norm_error()</div>
 <div class="line">    {</div>
 <div class="line">      energy_norm_square_per_cell.reinit(<a class="code hl_variable" href="p4est__wrappers_8cc.html#href_anchor">triangulation</a>.n_active_cells());</div>
 <div class="line">  </div>
-</div><!-- fragment --><p>Assemble <picture><source srcset="form_6846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sum_{K \in \Gamma_h} \nu\|\nabla (u_h - u)  \|_K^2 $" src="form_6846.png"/></picture>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_75.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_75.html	2024-03-17 21:57:49.499271701 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_75.html	2024-03-17 21:57:49.503271726 +0000
@@ -162,65 +162,65 @@
 <p><a class="anchor" id="hpdecisionindicators"></a></p><h3>hp-decision indicators</h3>
 <p>With hp-adaptive methods, we not only have to decide which cells we want to refine or coarsen, but we also have the choice how we want to do that: either by adjusting the grid resolution or the polynomial degree of the finite element.</p>
 <p>We will again base the decision on which cells to adapt on (a posteriori) computed error estimates of the current solution, e.g., using the <a class="el" href="classKellyErrorEstimator.html">KellyErrorEstimator</a>. We will similarly decide how to adapt with (a posteriori) computed smoothness estimates: large polynomial degrees work best on smooth parts of the solution while fine grid resolutions are favorable on irregular parts. In <a class="el" href="step_27.html">step-27</a>, we presented a way to calculate smoothness estimates based on the decay of Fourier coefficients. Let us take here the opportunity and present an alternative that follows the same idea, but with Legendre coefficients.</p>
-<p>We will briefly present the idea of this new technique, but limit its description to 1D for simplicity. Suppose <picture><source srcset="form_6853_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_\text{hp}(x)$" src="form_6853.png"/></picture> is a finite element function defined on a cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> as  </p><p class="formulaDsp">
-<picture><source srcset="form_6854_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>We will briefly present the idea of this new technique, but limit its description to 1D for simplicity. Suppose <picture><source srcset="form_7022_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_\text{hp}(x)$" src="form_7022.png"/></picture> is a finite element function defined on a cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> as  </p><p class="formulaDsp">
+<picture><source srcset="form_7023_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u_\text{hp}(x) = \sum c_i \varphi_i(x)
-\]" src="form_6854.png"/></picture>
+\]" src="form_7023.png"/></picture>
 </p>
-<p> where each <picture><source srcset="form_5535_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i(x)$" src="form_5535.png"/></picture> is a shape function. We can equivalently represent <picture><source srcset="form_6853_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_\text{hp}(x)$" src="form_6853.png"/></picture> in the basis of Legendre polynomials <picture><source srcset="form_1176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_k$" src="form_1176.png"/></picture> as  </p><p class="formulaDsp">
-<picture><source srcset="form_6855_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where each <picture><source srcset="form_5616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i(x)$" src="form_5616.png"/></picture> is a shape function. We can equivalently represent <picture><source srcset="form_7022_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_\text{hp}(x)$" src="form_7022.png"/></picture> in the basis of Legendre polynomials <picture><source srcset="form_1198_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P_k$" src="form_1198.png"/></picture> as  </p><p class="formulaDsp">
+<picture><source srcset="form_7024_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u_\text{hp}(x) = \sum l_k P_k(x).
-\]" src="form_6855.png"/></picture>
+\]" src="form_7024.png"/></picture>
 </p>
-<p> Our goal is to obtain a mapping between the finite element coefficients <picture><source srcset="form_519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_i$" src="form_519.png"/></picture> and the Legendre coefficients <picture><source srcset="form_6856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_k$" src="form_6856.png"/></picture>. We will accomplish this by writing the problem as a <picture><source srcset="form_1209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2$" src="form_1209.png"/></picture>-projection of <picture><source srcset="form_6853_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_\text{hp}(x)$" src="form_6853.png"/></picture> onto the Legendre basis. Each coefficient <picture><source srcset="form_6856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_k$" src="form_6856.png"/></picture> can be calculated via  </p><p class="formulaDsp">
-<picture><source srcset="form_6857_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> Our goal is to obtain a mapping between the finite element coefficients <picture><source srcset="form_528_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$c_i$" src="form_528.png"/></picture> and the Legendre coefficients <picture><source srcset="form_7025_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_k$" src="form_7025.png"/></picture>. We will accomplish this by writing the problem as a <picture><source srcset="form_1209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2$" src="form_1209.png"/></picture>-projection of <picture><source srcset="form_7022_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_\text{hp}(x)$" src="form_7022.png"/></picture> onto the Legendre basis. Each coefficient <picture><source srcset="form_7025_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_k$" src="form_7025.png"/></picture> can be calculated via  </p><p class="formulaDsp">
+<picture><source srcset="form_7026_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 l_k = \int_K u_\text{hp}(x) P_k(x) dx.
-\]" src="form_6857.png"/></picture>
+\]" src="form_7026.png"/></picture>
 </p>
 <p> By construction, the Legendre polynomials are orthogonal under the <picture><source srcset="form_1209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2$" src="form_1209.png"/></picture>-inner product on <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. Additionally, we assume that they have been normalized, so their inner products can be written as  </p><p class="formulaDsp">
-<picture><source srcset="form_6858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7027_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_K P_i(x) P_j(x) dx = \det(J_K) \, \delta_{ij}
-\]" src="form_6858.png"/></picture>
+\]" src="form_7027.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_{ij}$" src="form_144.png"/></picture> is the Kronecker delta, and <picture><source srcset="form_91_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_K$" src="form_91.png"/></picture> is the Jacobian of the mapping from <picture><source srcset="form_140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{K}$" src="form_140.png"/></picture> to <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, which (in this tutorial) is assumed to be constant (i.e., the mapping must be affine).</p>
-<p>Hence, combining all these assumptions, the projection matrix for expressing <picture><source srcset="form_6853_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_\text{hp}(x)$" src="form_6853.png"/></picture> in the Legendre basis is just <picture><source srcset="form_6859_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\det(J_K) \,
-\mathbb{I}$" src="form_6859.png"/></picture> &ndash; that is, <picture><source srcset="form_6860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\det(J_K)$" src="form_6860.png"/></picture> times the identity matrix. Let <picture><source srcset="form_2033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_K$" src="form_2033.png"/></picture> be the <a class="el" href="classMapping.html" title="Abstract base class for mapping classes.">Mapping</a> from <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to its reference cell <picture><source srcset="form_140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{K}$" src="form_140.png"/></picture>. The entries in the right-hand side in the projection system are, therefore,  </p><p class="formulaDsp">
-<picture><source srcset="form_6861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_118_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta_{ij}$" src="form_118.png"/></picture> is the Kronecker delta, and <picture><source srcset="form_91_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_K$" src="form_91.png"/></picture> is the Jacobian of the mapping from <picture><source srcset="form_114_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{K}$" src="form_114.png"/></picture> to <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, which (in this tutorial) is assumed to be constant (i.e., the mapping must be affine).</p>
+<p>Hence, combining all these assumptions, the projection matrix for expressing <picture><source srcset="form_7022_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_\text{hp}(x)$" src="form_7022.png"/></picture> in the Legendre basis is just <picture><source srcset="form_7028_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\det(J_K) \,
+\mathbb{I}$" src="form_7028.png"/></picture> &ndash; that is, <picture><source srcset="form_7029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\det(J_K)$" src="form_7029.png"/></picture> times the identity matrix. Let <picture><source srcset="form_2044_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_K$" src="form_2044.png"/></picture> be the <a class="el" href="classMapping.html" title="Abstract base class for mapping classes.">Mapping</a> from <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to its reference cell <picture><source srcset="form_114_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{K}$" src="form_114.png"/></picture>. The entries in the right-hand side in the projection system are, therefore,  </p><p class="formulaDsp">
+<picture><source srcset="form_7030_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_K u_\text{hp}(x) P_k(x) dx
 = \det(J_K) \int_{\hat{K}} u_\text{hp}(F_K(\hat{x})) P_k(F_K(\hat{x})) d\hat{x}.
-\]" src="form_6861.png"/></picture>
+\]" src="form_7030.png"/></picture>
 </p>
-<p> Recalling the shape function representation of <picture><source srcset="form_6853_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_\text{hp}(x)$" src="form_6853.png"/></picture>, we can write this as <picture><source srcset="form_6862_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\det(J_K) \, \mathbf{C} \, \mathbf{c}$" src="form_6862.png"/></picture>, where <picture><source srcset="form_1837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1837.png"/></picture> is the change-of-basis matrix with entries  </p><p class="formulaDsp">
-<picture><source srcset="form_6863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> Recalling the shape function representation of <picture><source srcset="form_7022_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_\text{hp}(x)$" src="form_7022.png"/></picture>, we can write this as <picture><source srcset="form_7031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\det(J_K) \, \mathbf{C} \, \mathbf{c}$" src="form_7031.png"/></picture>, where <picture><source srcset="form_1807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1807.png"/></picture> is the change-of-basis matrix with entries  </p><p class="formulaDsp">
+<picture><source srcset="form_7032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_K P_i(x) \varphi_j(x) dx
 = \det(J_K) \int_{\hat{K}} P_i(F_K(\hat{x})) \varphi_j(F_K(\hat{x})) d\hat{x}
 = \det(J_K) \int_{\hat{K}} \hat{P}_i(\hat{x}) \hat{\varphi}_j(\hat{x}) d\hat{x}
 \dealcoloneq \det(J_K) \, C_{ij}
-\]" src="form_6863.png"/></picture>
+\]" src="form_7032.png"/></picture>
 </p>
-<p> so the values of <picture><source srcset="form_1837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1837.png"/></picture> can be written <em>independently</em> of <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> by factoring <picture><source srcset="form_6860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\det(J_K)$" src="form_6860.png"/></picture> out front after transforming to reference coordinates. Hence, putting it all together, the projection problem can be written as  </p><p class="formulaDsp">
-<picture><source srcset="form_6864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> so the values of <picture><source srcset="form_1807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1807.png"/></picture> can be written <em>independently</em> of <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> by factoring <picture><source srcset="form_7029_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\det(J_K)$" src="form_7029.png"/></picture> out front after transforming to reference coordinates. Hence, putting it all together, the projection problem can be written as  </p><p class="formulaDsp">
+<picture><source srcset="form_7033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \det(J_K) \, \mathbb{I} \, \mathbf{l} = \det(J_K) \, \mathbf{C} \, \mathbf{c}
-\]" src="form_6864.png"/></picture>
+\]" src="form_7033.png"/></picture>
 </p>
 <p> which can be rewritten as simply  </p><p class="formulaDsp">
-<picture><source srcset="form_6865_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf{l} = \mathbf{C} \, \mathbf{c}.
-\]" src="form_6865.png"/></picture>
+\]" src="form_7034.png"/></picture>
 </p>
-<p>At this point, we need to emphasize that most finite element applications use unstructured meshes for which mapping is almost always non-affine. Put another way: the assumption that <picture><source srcset="form_91_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_K$" src="form_91.png"/></picture> is constant across the cell is not true for general meshes. Hence, a correct calculation of <picture><source srcset="form_6856_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_k$" src="form_6856.png"/></picture> requires not only that we calculate the corresponding transformation matrix <picture><source srcset="form_1837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1837.png"/></picture> for every single cell, but that we also define a set of Legendre-like orthogonal functions on a cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> which may have an arbitrary and very complex geometry. The second part, in particular, is very computationally expensive. The current implementation of the <a class="el" href="namespaceFESeries.html">FESeries</a> transformation classes relies on the simplification resulting from having a constant Jacobian to increase performance and thus only yields correct results for affine mappings. The transformation is only used for the purpose of smoothness estimation to decide on the type of adaptation, which is not a critical component of a finite element program. Apart from that, this circumstance does not pose a problem for this tutorial as we only use square-shaped cells.</p>
+<p>At this point, we need to emphasize that most finite element applications use unstructured meshes for which mapping is almost always non-affine. Put another way: the assumption that <picture><source srcset="form_91_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_K$" src="form_91.png"/></picture> is constant across the cell is not true for general meshes. Hence, a correct calculation of <picture><source srcset="form_7025_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_k$" src="form_7025.png"/></picture> requires not only that we calculate the corresponding transformation matrix <picture><source srcset="form_1807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1807.png"/></picture> for every single cell, but that we also define a set of Legendre-like orthogonal functions on a cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> which may have an arbitrary and very complex geometry. The second part, in particular, is very computationally expensive. The current implementation of the <a class="el" href="namespaceFESeries.html">FESeries</a> transformation classes relies on the simplification resulting from having a constant Jacobian to increase performance and thus only yields correct results for affine mappings. The transformation is only used for the purpose of smoothness estimation to decide on the type of adaptation, which is not a critical component of a finite element program. Apart from that, this circumstance does not pose a problem for this tutorial as we only use square-shaped cells.</p>
 <p>Eibner and Melenk <b>[eibner2007hp]</b> argued that a function is analytic, i.e., representable by a power series, if and only if the absolute values of the Legendre coefficients decay exponentially with increasing index <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_6866_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7035_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \exists C,\sigma &gt; 0 : \quad \forall k \in \mathbb{N}_0 : \quad |l_k|
 \leq C \exp\left( - \sigma k \right) .
-\]" src="form_6866.png"/></picture>
+\]" src="form_7035.png"/></picture>
 </p>
-<p> The rate of decay <picture><source srcset="form_2360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2360.png"/></picture> can be interpreted as a measure for the smoothness of that function. We can get it as the slope of a linear regression fit of the transformation coefficients:  </p><p class="formulaDsp">
-<picture><source srcset="form_6867_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> The rate of decay <picture><source srcset="form_2223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma$" src="form_2223.png"/></picture> can be interpreted as a measure for the smoothness of that function. We can get it as the slope of a linear regression fit of the transformation coefficients:  </p><p class="formulaDsp">
+<picture><source srcset="form_7036_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \ln(|l_k|) \sim \ln(C) - \sigma k .
-\]" src="form_6867.png"/></picture>
+\]" src="form_7036.png"/></picture>
 </p>
-<p>We will perform this fit on each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to get a local estimate for the smoothness of the finite element approximation. The decay rate <picture><source srcset="form_6868_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_K$" src="form_6868.png"/></picture> then acts as the decision indicator for hp-adaptation. For a finite element on a cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> with a polynomial degree <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>, calculating the coefficients for <picture><source srcset="form_6869_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k \leq (p+1)$" src="form_6869.png"/></picture> proved to be a reasonable choice to estimate smoothness. You can find a more detailed and dimension independent description in <b>[fehling2020]</b>.</p>
+<p>We will perform this fit on each cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to get a local estimate for the smoothness of the finite element approximation. The decay rate <picture><source srcset="form_7037_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma_K$" src="form_7037.png"/></picture> then acts as the decision indicator for hp-adaptation. For a finite element on a cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> with a polynomial degree <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>, calculating the coefficients for <picture><source srcset="form_7038_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k \leq (p+1)$" src="form_7038.png"/></picture> proved to be a reasonable choice to estimate smoothness. You can find a more detailed and dimension independent description in <b>[fehling2020]</b>.</p>
 <p>All of the above is already implemented in the <a class="el" href="classFESeries_1_1Legendre.html">FESeries::Legendre</a> class and the <a class="el" href="namespaceSmoothnessEstimator_1_1Legendre.html">SmoothnessEstimator::Legendre</a> namespace. With the error estimates and smoothness indicators, we are then left to flag the cells for actual refinement and coarsening. Some functions from the <a class="el" href="namespaceparallel_1_1distributed_1_1GridRefinement.html">parallel::distributed::GridRefinement</a> and <a class="el" href="namespacehp_1_1Refinement.html">hp::Refinement</a> namespaces will help us with that later.</p>
 <p><a class="anchor" id="Hybridgeometricmultigrid"></a></p><h3>Hybrid geometric multigrid</h3>
 <p>Finite element matrices are typically very sparse. Additionally, hp-adaptive methods correspond to matrices with highly variable numbers of nonzero entries per row. Some state-of-the-art preconditioners, like the algebraic multigrid (AMG) ones as used in <a class="el" href="step_40.html">step-40</a>, behave poorly in these circumstances.</p>
@@ -229,18 +229,18 @@
 <p><a class="anchor" id="Thetestcase"></a></p><h3>The test case</h3>
 <p>For elliptic equations, each reentrant corner typically invokes a singularity <b>[brenner2008]</b>. We can use this circumstance to put our hp-decision algorithms to a test: on all cells to be adapted, we would prefer a fine grid near the singularity, and a high polynomial degree otherwise.</p>
 <p>As the simplest elliptic problem to solve under these conditions, we chose the Laplace equation in a L-shaped domain with the reentrant corner in the origin of the coordinate system.</p>
-<p>To be able to determine the actual error, we manufacture a boundary value problem with a known solution. On the above mentioned domain, one solution to the Laplace equation is, in polar coordinates, <picture><source srcset="form_6870_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(r, \varphi)$" src="form_6870.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_6871_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>To be able to determine the actual error, we manufacture a boundary value problem with a known solution. On the above mentioned domain, one solution to the Laplace equation is, in polar coordinates, <picture><source srcset="form_7039_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(r, \varphi)$" src="form_7039.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_7040_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 u_\text{sol} = r^{2/3} \sin(2/3 \varphi).
-\]" src="form_6871.png"/></picture>
+\]" src="form_7040.png"/></picture>
 </p>
 <p>See also <b>[brenner2008]</b> or <b>[mitchell2014hp]</b>. The solution looks as follows:</p>
 <div style="text-align:center;"> <img src="https://www.dealii.org/images/steps/developer/step-75.solution.svg" alt="Analytic solution." style="pointer-events: none;" class="inline"/> </div><p>The singularity becomes obvious by investigating the solution's gradient in the vicinity of the reentrant corner, i.e., the origin  </p><p class="formulaDsp">
-<picture><source srcset="form_6872_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7041_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \left\| \nabla u_\text{sol} \right\|_{2} = 2/3 r^{-1/3} , \quad
 \lim\limits_{r \rightarrow 0} \left\| \nabla u_\text{sol} \right\|_{2} =
 \infty .
-\]" src="form_6872.png"/></picture>
+\]" src="form_7041.png"/></picture>
 </p>
 <p>As we know where the singularity will be located, we expect that our hp-decision algorithm decides for a fine grid resolution in this particular region, and high polynomial degree anywhere else.</p>
 <p>So let's see if that is actually the case, and how hp-adaptation performs compared to pure h-adaptation. But first let us have a detailed look at the actual code.</p>
@@ -1125,7 +1125,7 @@
 <div class="line">  </div>
 <div class="ttc" id="anamespaceSmoothnessEstimator_1_1Legendre_html_adabe60025f0ce97091bb35eb8fc4c600"><div class="ttname"><a href="namespaceSmoothnessEstimator_1_1Legendre.html#href_anchor">SmoothnessEstimator::Legendre::default_fe_series</a></div><div class="ttdeci">FESeries::Legendre&lt; dim, spacedim &gt; default_fe_series(const hp::FECollection&lt; dim, spacedim &gt; &amp;fe_collection, const unsigned int component=numbers::invalid_unsigned_int)</div><div class="ttdef"><b>Definition</b> <a href="smoothness__estimator_8cc_source.html#href_anchor">smoothness_estimator.cc:290</a></div></div>
 </div><!-- fragment --><p>The next part is going to be tricky. During execution of refinement, a few hp-algorithms need to interfere with the actual refinement process on the <a class="el" href="classTriangulation.html">Triangulation</a> object. We do this by connecting several functions to <a class="el" href="structTriangulation_1_1Signals.html">Triangulation::Signals</a>: signals will be called at different stages during the actual refinement process and trigger all connected functions. We require this functionality for load balancing and to limit the polynomial degrees of neighboring cells.</p>
-<p>For the former, we would like to assign a weight to every cell that is proportional to the number of degrees of freedom of its future finite element. The library offers a class <a class="el" href="classparallel_1_1CellWeights.html">parallel::CellWeights</a> that allows to easily attach individual weights at the right place during the refinement process, i.e., after all refine and coarsen flags have been set correctly for hp-adaptation and right before repartitioning for load balancing is about to happen. <a class="el" href="namespaceFunctions.html">Functions</a> can be registered that will attach weights in the form that <picture><source srcset="form_6873_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a (n_\text{dofs})^b$" src="form_6873.png"/></picture> with a provided pair of parameters <picture><source srcset="form_943_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(a,b)$" src="form_943.png"/></picture>. We register such a function in the following.</p>
+<p>For the former, we would like to assign a weight to every cell that is proportional to the number of degrees of freedom of its future finite element. The library offers a class <a class="el" href="classparallel_1_1CellWeights.html">parallel::CellWeights</a> that allows to easily attach individual weights at the right place during the refinement process, i.e., after all refine and coarsen flags have been set correctly for hp-adaptation and right before repartitioning for load balancing is about to happen. <a class="el" href="namespaceFunctions.html">Functions</a> can be registered that will attach weights in the form that <picture><source srcset="form_7042_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a (n_\text{dofs})^b$" src="form_7042.png"/></picture> with a provided pair of parameters <picture><source srcset="form_943_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(a,b)$" src="form_943.png"/></picture>. We register such a function in the following.</p>
 <p>For load balancing, efficient solvers like the one we use should scale linearly with the number of degrees of freedom owned. We set the parameters for cell weighting correspondingly: A weighting factor of <picture><source srcset="form_670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1$" src="form_670.png"/></picture> and an exponent of <picture><source srcset="form_670_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$1$" src="form_670.png"/></picture> (see the definitions of the <code>weighting_factor</code> and <code>weighting_exponent</code> above).</p>
 <div class="fragment"><div class="line">      cell_weights = std::make_unique&lt;parallel::CellWeights&lt;dim&gt;&gt;(</div>
 <div class="line">        dof_handler,</div>
@@ -1644,7 +1644,7 @@
 <p>The deal.II library offers multiple strategies to decide which type of adaptation to impose on cells: either adjust the grid resolution or change the polynomial degree. We only presented the <em>Legendre coefficient decay</em> strategy in this tutorial, while <a class="el" href="step_27.html">step-27</a> demonstrated the <em>Fourier</em> equivalent of the same idea.</p>
 <p>See the "possibilities for extensions" section of <a class="el" href="step_27.html">step-27</a> for an overview over these strategies, or the corresponding documentation for a detailed description.</p>
 <p>There, another strategy is mentioned that has not been shown in any tutorial so far: the strategy based on <em>refinement history</em>. The usage of this method for parallel distributed applications is more tricky than the others, so we will highlight the challenges that come along with it. We need information about the final state of refinement flags, and we need to transfer the solution across refined meshes. For the former, we need to attach the <a class="el" href="namespacehp_1_1Refinement.html#href_anchor">hp::Refinement::predict_error()</a> function to the <a class="el" href="structTriangulation_1_1Signals.html#href_anchor">Triangulation::Signals::post_p4est_refinement</a> signal in a way that it will be called <em>after</em> the <a class="el" href="namespacehp_1_1Refinement.html#href_anchor">hp::Refinement::limit_p_level_difference()</a> function. At this stage, all refinement flags and future FE indices are terminally set and a reliable prediction of the error is possible. The predicted error then needs to be transferred across refined meshes with the aid of <a class="el" href="classparallel_1_1distributed_1_1CellDataTransfer.html">parallel::distributed::CellDataTransfer</a>.</p>
-<p>Try implementing one of these strategies into this tutorial and observe the subtle changes to the results. You will notice that all strategies are capable of identifying the singularities near the reentrant corners and will perform <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>-refinement in these regions, while preferring <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>-refinement in the bulk domain. A detailed comparison of these strategies is presented in <b>[fehling2020]</b> .</p>
+<p>Try implementing one of these strategies into this tutorial and observe the subtle changes to the results. You will notice that all strategies are capable of identifying the singularities near the reentrant corners and will perform <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>-refinement in these regions, while preferring <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>-refinement in the bulk domain. A detailed comparison of these strategies is presented in <b>[fehling2020]</b> .</p>
 <p><a class="anchor" id="Solvewithmatrixbasedmethods"></a></p><h4>Solve with matrix-based methods</h4>
 <p>This tutorial focuses solely on matrix-free strategies. All hp-adaptive algorithms however also work with matrix-based approaches in the parallel distributed context.</p>
 <p>To create a system matrix, you can either use the LaplaceOperator::get_system_matrix() function, or use an <code>assemble_system()</code> function similar to the one of <a class="el" href="step_27.html">step-27</a>. You can then pass the system matrix to the solver as usual.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_76.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_76.html	2024-03-17 21:57:49.619272442 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_76.html	2024-03-17 21:57:49.615272418 +0000
@@ -366,7 +366,7 @@
 <div class="line">  dst,</div>
 <div class="line">  src);</div>
 </div><!-- fragment --><p><a class="anchor" id="VectorizedArrayType"></a></p><h3>VectorizedArrayType</h3>
-<p>The class <a class="el" href="classVectorizedArray.html">VectorizedArray&lt;Number&gt;</a> is a key component to achieve the high node-level performance of the matrix-free algorithms in deal.II. It is a wrapper class around a short vector of <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> entries of type Number and maps arithmetic operations to appropriate single-instruction/multiple-data (SIMD) concepts by intrinsic functions. The length of the vector can be queried by <a class="el" href="classVectorizedArrayBase.html#href_anchor">VectorizedArray::size()</a> and its underlying number type by <a class="el" href="classVectorizedArray.html#href_anchor">VectorizedArray::value_type</a>.</p>
+<p>The class <a class="el" href="classVectorizedArray.html">VectorizedArray&lt;Number&gt;</a> is a key component to achieve the high node-level performance of the matrix-free algorithms in deal.II. It is a wrapper class around a short vector of <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> entries of type Number and maps arithmetic operations to appropriate single-instruction/multiple-data (SIMD) concepts by intrinsic functions. The length of the vector can be queried by <a class="el" href="classVectorizedArrayBase.html#href_anchor">VectorizedArray::size()</a> and its underlying number type by <a class="el" href="classVectorizedArray.html#href_anchor">VectorizedArray::value_type</a>.</p>
 <p>In the default case (<code><a class="el" href="classVectorizedArray.html">VectorizedArray&lt;Number&gt;</a></code>), the vector length is set at compile time of the library to match the highest value supported by the given processor architecture. However, also a second optional template argument can be specified as <code>VectorizedArray&lt;Number, size&gt;</code>, where <code>size</code> explicitly controls the vector length within the capabilities of a particular instruction set. A full list of supported vector lengths is presented in the following table:</p>
 <table align="center" class="doxtable">
 <tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_77.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_77.html	2024-03-17 21:57:49.691272887 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_77.html	2024-03-17 21:57:49.699272936 +0000
@@ -137,68 +137,68 @@
 </p>
 <p><a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p>The <a class="el" href="step_15.html">step-15</a> program solved the following, nonlinear equation describing the minimal surface problem:  </p><p class="formulaDsp">
-<picture><source srcset="form_6874_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7043_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     -\nabla \cdot \left( \frac{1}{\sqrt{1+|\nabla u|^{2}}}\nabla u \right) &amp;= 0 \qquad
     \qquad &amp;&amp;\textrm{in} ~ \Omega
     \\
     u&amp;=g \qquad\qquad &amp;&amp;\textrm{on} ~ \partial \Omega.
-\end{align*}" src="form_6874.png"/></picture>
+\end{align*}" src="form_7043.png"/></picture>
 </p>
-<p> <a class="el" href="step_15.html">step-15</a> uses a Newton method, and Newton's method works by repeatedly solving a <em>linearized</em> problem for an update <picture><source srcset="form_6875_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u_k$" src="form_6875.png"/></picture> &ndash; called the "search direction" &ndash;, computing a "step length" <picture><source srcset="form_5912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha_k$" src="form_5912.png"/></picture>, and then combining them to compute the new guess for the solution via  </p><p class="formulaDsp">
-<picture><source srcset="form_6876_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> <a class="el" href="step_15.html">step-15</a> uses a Newton method, and Newton's method works by repeatedly solving a <em>linearized</em> problem for an update <picture><source srcset="form_7044_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u_k$" src="form_7044.png"/></picture> &ndash; called the "search direction" &ndash;, computing a "step length" <picture><source srcset="form_5912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha_k$" src="form_5912.png"/></picture>, and then combining them to compute the new guess for the solution via  </p><p class="formulaDsp">
+<picture><source srcset="form_7045_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     u_{k+1} = u_k + \alpha_k \, \delta u_k.
-\end{align*}" src="form_6876.png"/></picture>
+\end{align*}" src="form_7045.png"/></picture>
 </p>
-<p>In the course of the discussions in <a class="el" href="step_15.html">step-15</a>, we found that it is awkward to compute the step length, and so just settled for simple choice: Always choose <picture><source srcset="form_6877_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha_k=0.1$" src="form_6877.png"/></picture>. This is of course not efficient: We know that we can only realize Newton's quadratic convergence rate if we eventually are able to choose <picture><source srcset="form_6878_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha_k=1$" src="form_6878.png"/></picture>, though we may have to choose it smaller for the first few iterations where we are still too far away to use this long a step length.</p>
+<p>In the course of the discussions in <a class="el" href="step_15.html">step-15</a>, we found that it is awkward to compute the step length, and so just settled for simple choice: Always choose <picture><source srcset="form_7046_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha_k=0.1$" src="form_7046.png"/></picture>. This is of course not efficient: We know that we can only realize Newton's quadratic convergence rate if we eventually are able to choose <picture><source srcset="form_7047_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha_k=1$" src="form_7047.png"/></picture>, though we may have to choose it smaller for the first few iterations where we are still too far away to use this long a step length.</p>
 <p>Among the goals of this program is therefore to address this shortcoming. Since line search algorithms are not entirely trivial to implement, one does as one should do anyway: Import complicated functionality from an external library. To this end, we will make use of the interfaces deal.II has to one of the big nonlinear solver packages, namely the <a href="https://computing.llnl.gov/projects/sundials/kinsol">KINSOL</a> sub-package of the <a href="https://computing.llnl.gov/projects/sundials">SUNDIALS</a> suite. SUNDIALS is, at its heart, a package meant to solve complex ordinary differential equations (ODEs) and differential-algebraic equations (DAEs), and the deal.II interfaces allow for this via the classes in the <a class="el" href="namespaceSUNDIALS.html">SUNDIALS</a> namespace: Notably the <a class="el" href="classSUNDIALS_1_1ARKode.html">SUNDIALS::ARKode</a> and <a class="el" href="classSUNDIALS_1_1IDA.html">SUNDIALS::IDA</a> classes. But, because that is an important step in the solution of ODEs and DAEs with implicit methods, SUNDIALS also has a solver for nonlinear problems called KINSOL, and deal.II has an interface to it in the form of the <a class="el" href="classSUNDIALS_1_1KINSOL.html">SUNDIALS::KINSOL</a> class. This is what we will use for the solution of our problem.</p>
 <p>But SUNDIALS isn't just a convenient way for us to avoid writing a line search algorithm. In general, the solution of nonlinear problems is quite expensive, and one typically wants to save as much compute time as possible. One way one can achieve this is as follows: The algorithm in <a class="el" href="step_15.html">step-15</a> discretizes the problem and then in every iteration solves a linear system of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_6879_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7048_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   J_k \, \delta U_k = -F_k
-\end{align*}" src="form_6879.png"/></picture>
+\end{align*}" src="form_7048.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_6880_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_k$" src="form_6880.png"/></picture> is the residual vector computed using the current vector of nodal values <picture><source srcset="form_6881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_k$" src="form_6881.png"/></picture>, <picture><source srcset="form_6882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_6882.png"/></picture> is its derivative (called the "Jacobian"), and <picture><source srcset="form_6883_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta U_k$" src="form_6883.png"/></picture> is the update vector that corresponds to the function <picture><source srcset="form_6875_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u_k$" src="form_6875.png"/></picture> mentioned above. The construction of <picture><source srcset="form_6884_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k,F_k$" src="form_6884.png"/></picture> has been thoroughly discussed in <a class="el" href="step_15.html">step-15</a>, as has the way to solve the linear system in each Newton iteration. So let us focus on another aspect of the nonlinear solution procedure: Computing <picture><source srcset="form_6880_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_k$" src="form_6880.png"/></picture> is expensive, and assembling the matrix <picture><source srcset="form_6882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_6882.png"/></picture> even more so. Do we actually need to do that in every iteration? It turns out that in many applications, this is not actually necessary: These methods often converge even if we replace <picture><source srcset="form_6882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_6882.png"/></picture> by an approximation <picture><source srcset="form_6885_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k$" src="form_6885.png"/></picture> and solve  </p><p class="formulaDsp">
-<picture><source srcset="form_6886_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> where <picture><source srcset="form_7049_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_k$" src="form_7049.png"/></picture> is the residual vector computed using the current vector of nodal values <picture><source srcset="form_7050_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_k$" src="form_7050.png"/></picture>, <picture><source srcset="form_7051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_7051.png"/></picture> is its derivative (called the "Jacobian"), and <picture><source srcset="form_7052_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta U_k$" src="form_7052.png"/></picture> is the update vector that corresponds to the function <picture><source srcset="form_7044_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta u_k$" src="form_7044.png"/></picture> mentioned above. The construction of <picture><source srcset="form_7053_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k,F_k$" src="form_7053.png"/></picture> has been thoroughly discussed in <a class="el" href="step_15.html">step-15</a>, as has the way to solve the linear system in each Newton iteration. So let us focus on another aspect of the nonlinear solution procedure: Computing <picture><source srcset="form_7049_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_k$" src="form_7049.png"/></picture> is expensive, and assembling the matrix <picture><source srcset="form_7051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_7051.png"/></picture> even more so. Do we actually need to do that in every iteration? It turns out that in many applications, this is not actually necessary: These methods often converge even if we replace <picture><source srcset="form_7051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_7051.png"/></picture> by an approximation <picture><source srcset="form_7054_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k$" src="form_7054.png"/></picture> and solve  </p><p class="formulaDsp">
+<picture><source srcset="form_7055_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \tilde J_k \, \widetilde{\delta U}_k = -F_k
-\end{align*}" src="form_6886.png"/></picture>
+\end{align*}" src="form_7055.png"/></picture>
 </p>
 <p> instead, then update  </p><p class="formulaDsp">
-<picture><source srcset="form_6887_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7056_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     U_{k+1} = U_k + \alpha_k \, \widetilde{\delta U}_k.
-\end{align*}" src="form_6887.png"/></picture>
+\end{align*}" src="form_7056.png"/></picture>
 </p>
-<p> This may require an iteration or two more because our update <picture><source srcset="form_6888_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widetilde{\delta U}_k$" src="form_6888.png"/></picture> is not quite as good as <picture><source srcset="form_6883_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta U_k$" src="form_6883.png"/></picture>, but it may still be a win because we don't have to assemble <picture><source srcset="form_6882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_6882.png"/></picture> quite as often.</p>
-<p>What kind of approximation <picture><source srcset="form_6885_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k$" src="form_6885.png"/></picture> would we like for <picture><source srcset="form_6882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_6882.png"/></picture>? Theory says that as <picture><source srcset="form_6881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_k$" src="form_6881.png"/></picture> converges to the exact solution <picture><source srcset="form_6889_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\ast$" src="form_6889.png"/></picture>, we need to ensure that <picture><source srcset="form_6885_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k$" src="form_6885.png"/></picture> needs to converge to <picture><source srcset="form_6890_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^\ast = \nabla F(U^\ast)$" src="form_6890.png"/></picture>. In particular, since <picture><source srcset="form_6891_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k\rightarrow J^\ast$" src="form_6891.png"/></picture>, a valid choice is <picture><source srcset="form_6892_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k = J_k$" src="form_6892.png"/></picture>. But so is choosing <picture><source srcset="form_6892_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k = J_k$" src="form_6892.png"/></picture> every, say, fifth iteration <picture><source srcset="form_6893_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=0,5,10,\ldots$" src="form_6893.png"/></picture> and for the other iterations, we choose <picture><source srcset="form_6885_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k$" src="form_6885.png"/></picture> equal to the last computed <picture><source srcset="form_6894_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{k'}$" src="form_6894.png"/></picture>. This is what we will do here: we will just re-use <picture><source srcset="form_6895_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_{k-1}$" src="form_6895.png"/></picture> from the previous iteration, which may again be what we had used in the iteration before that, <picture><source srcset="form_6896_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_{k-2}$" src="form_6896.png"/></picture>.</p>
-<p>This scheme becomes even more interesting if, for the solution of the linear system with <picture><source srcset="form_6882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_6882.png"/></picture>, we don't just have to assemble a matrix, but also compute a good preconditioner. For example, if we were to use a sparse LU decomposition via the <a class="el" href="classSparseDirectUMFPACK.html">SparseDirectUMFPACK</a> class, or used a geometric or algebraic multigrid. In those cases, we would also not have to update the preconditioner, whose computation may have taken about as long or longer than the assembly of the matrix in the first place. Indeed, with this mindset, we should probably think about using the <em>best</em> preconditioner we can think of, even though their construction is typically quite expensive: We will hope to amortize the cost of computing this preconditioner by applying it to more than one just one linear solve.</p>
-<p>The big question is, of course: By what criterion do we decide whether we can get away with the approximation <picture><source srcset="form_6885_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k$" src="form_6885.png"/></picture> based on a previously computed Jacobian matrix <picture><source srcset="form_6897_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{k-s}$" src="form_6897.png"/></picture> that goes back <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> steps, or whether we need to &ndash; at least in this iteration &ndash; actually re-compute the Jacobian <picture><source srcset="form_6882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_6882.png"/></picture> and the corresponding preconditioner? This is, like the issue with line search, one that requires a non-trivial amount of code that monitors the convergence of the overall algorithm. We <em>could</em> implement these sorts of things ourselves, but we probably <em>shouldn't</em>: KINSOL already does that for us. It will tell our code when to "update" the Jacobian matrix.</p>
-<p>One last consideration if we were to use an iterative solver instead of the sparse direct one mentioned above: Not only is it possible to get away with replacing <picture><source srcset="form_6882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_6882.png"/></picture> by some approximation <picture><source srcset="form_6885_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k$" src="form_6885.png"/></picture> when solving for the update <picture><source srcset="form_6883_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta U_k$" src="form_6883.png"/></picture>, but one can also ask whether it is necessary to solve the linear system  </p><p class="formulaDsp">
-<picture><source srcset="form_6898_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> This may require an iteration or two more because our update <picture><source srcset="form_7057_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\widetilde{\delta U}_k$" src="form_7057.png"/></picture> is not quite as good as <picture><source srcset="form_7052_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta U_k$" src="form_7052.png"/></picture>, but it may still be a win because we don't have to assemble <picture><source srcset="form_7051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_7051.png"/></picture> quite as often.</p>
+<p>What kind of approximation <picture><source srcset="form_7054_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k$" src="form_7054.png"/></picture> would we like for <picture><source srcset="form_7051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_7051.png"/></picture>? Theory says that as <picture><source srcset="form_7050_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_k$" src="form_7050.png"/></picture> converges to the exact solution <picture><source srcset="form_7058_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\ast$" src="form_7058.png"/></picture>, we need to ensure that <picture><source srcset="form_7054_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k$" src="form_7054.png"/></picture> needs to converge to <picture><source srcset="form_7059_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J^\ast = \nabla F(U^\ast)$" src="form_7059.png"/></picture>. In particular, since <picture><source srcset="form_7060_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k\rightarrow J^\ast$" src="form_7060.png"/></picture>, a valid choice is <picture><source srcset="form_7061_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k = J_k$" src="form_7061.png"/></picture>. But so is choosing <picture><source srcset="form_7061_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k = J_k$" src="form_7061.png"/></picture> every, say, fifth iteration <picture><source srcset="form_7062_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k=0,5,10,\ldots$" src="form_7062.png"/></picture> and for the other iterations, we choose <picture><source srcset="form_7054_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k$" src="form_7054.png"/></picture> equal to the last computed <picture><source srcset="form_7063_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{k'}$" src="form_7063.png"/></picture>. This is what we will do here: we will just re-use <picture><source srcset="form_7064_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_{k-1}$" src="form_7064.png"/></picture> from the previous iteration, which may again be what we had used in the iteration before that, <picture><source srcset="form_7065_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_{k-2}$" src="form_7065.png"/></picture>.</p>
+<p>This scheme becomes even more interesting if, for the solution of the linear system with <picture><source srcset="form_7051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_7051.png"/></picture>, we don't just have to assemble a matrix, but also compute a good preconditioner. For example, if we were to use a sparse LU decomposition via the <a class="el" href="classSparseDirectUMFPACK.html">SparseDirectUMFPACK</a> class, or used a geometric or algebraic multigrid. In those cases, we would also not have to update the preconditioner, whose computation may have taken about as long or longer than the assembly of the matrix in the first place. Indeed, with this mindset, we should probably think about using the <em>best</em> preconditioner we can think of, even though their construction is typically quite expensive: We will hope to amortize the cost of computing this preconditioner by applying it to more than one just one linear solve.</p>
+<p>The big question is, of course: By what criterion do we decide whether we can get away with the approximation <picture><source srcset="form_7054_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k$" src="form_7054.png"/></picture> based on a previously computed Jacobian matrix <picture><source srcset="form_7066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_{k-s}$" src="form_7066.png"/></picture> that goes back <picture><source srcset="form_481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$s$" src="form_481.png"/></picture> steps, or whether we need to &ndash; at least in this iteration &ndash; actually re-compute the Jacobian <picture><source srcset="form_7051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_7051.png"/></picture> and the corresponding preconditioner? This is, like the issue with line search, one that requires a non-trivial amount of code that monitors the convergence of the overall algorithm. We <em>could</em> implement these sorts of things ourselves, but we probably <em>shouldn't</em>: KINSOL already does that for us. It will tell our code when to "update" the Jacobian matrix.</p>
+<p>One last consideration if we were to use an iterative solver instead of the sparse direct one mentioned above: Not only is it possible to get away with replacing <picture><source srcset="form_7051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_7051.png"/></picture> by some approximation <picture><source srcset="form_7054_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k$" src="form_7054.png"/></picture> when solving for the update <picture><source srcset="form_7052_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta U_k$" src="form_7052.png"/></picture>, but one can also ask whether it is necessary to solve the linear system  </p><p class="formulaDsp">
+<picture><source srcset="form_7067_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \tilde J_k \widetilde{\delta U}_k = -F_k
-\end{align*}" src="form_6898.png"/></picture>
+\end{align*}" src="form_7067.png"/></picture>
 </p>
-<p> to high accuracy. The thinking goes like this: While our current solution <picture><source srcset="form_6881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_k$" src="form_6881.png"/></picture> is still far away from <picture><source srcset="form_6889_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\ast$" src="form_6889.png"/></picture>, why would we solve this linear system particularly accurately? The update <picture><source srcset="form_6899_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_{k+1}=U_k + \widetilde{\delta U}_k$" src="form_6899.png"/></picture> is likely still going to be far away from the exact solution, so why spend much time on solving the linear system to great accuracy? This is the kind of thinking that underlies algorithms such as the "Eisenstat-Walker trick" <b>[eiwa96]</b> in which one is given a tolerance to which the linear system above in iteration <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> has to be solved, with this tolerance dependent on the progress in the overall nonlinear solver. As before, one could try to implement this oneself, but KINSOL already provides this kind of information for us &ndash; though we will not use it in this program since we use a direct solver that requires no solver tolerance and just solves the linear system exactly up to round-off.</p>
+<p> to high accuracy. The thinking goes like this: While our current solution <picture><source srcset="form_7050_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_k$" src="form_7050.png"/></picture> is still far away from <picture><source srcset="form_7058_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\ast$" src="form_7058.png"/></picture>, why would we solve this linear system particularly accurately? The update <picture><source srcset="form_7068_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_{k+1}=U_k + \widetilde{\delta U}_k$" src="form_7068.png"/></picture> is likely still going to be far away from the exact solution, so why spend much time on solving the linear system to great accuracy? This is the kind of thinking that underlies algorithms such as the "Eisenstat-Walker trick" <b>[eiwa96]</b> in which one is given a tolerance to which the linear system above in iteration <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture> has to be solved, with this tolerance dependent on the progress in the overall nonlinear solver. As before, one could try to implement this oneself, but KINSOL already provides this kind of information for us &ndash; though we will not use it in this program since we use a direct solver that requires no solver tolerance and just solves the linear system exactly up to round-off.</p>
 <p>As a summary of all of these considerations, we could say the following: There is no need to reinvent the wheel. Just like deal.II provides a vast amount of finite-element functionality, SUNDIALS' KINSOL package provides a vast amount of nonlinear solver functionality, and we better use it.</p>
 <dl class="section note"><dt>Note</dt><dd>While this program uses SUNDIAL's KINSOL package as the engine to solve nonlinear problems, KINSOL is not the only option you have. deal.II also has interfaces to PETSc's SNES collection of algorithms (see the <a class="el" href="classPETScWrappers_1_1NonlinearSolver.html">PETScWrappers::NonlinearSolver</a> class) as well as to the Trilinos NOX package (see the <a class="el" href="classTrilinosWrappers_1_1NOXSolver.html">TrilinosWrappers::NOXSolver</a> class) that provide not only very similar functionality, but also a largely identical interface. If you have installed a version of deal.II that is configured to use either PETSc or Trilinos, but not <a class="el" href="namespaceSUNDIALS.html">SUNDIALS</a>, then it is not too difficult to switch this program to use either of the former two packages instead: Basically everything that we say and do below will also be true and work for these other packages! (We will also come back to this point in the <a href="#href_anchor">results section</a> below.)</dd></dl>
 <p><a class="anchor" id="HowdealIIinterfaceswithKINSOL"></a></p><h3>How deal.II interfaces with KINSOL </h3>
 <p>KINSOL, like many similar packages, works in a pretty abstract way. At its core, it sees a nonlinear problem of the form  </p><p class="formulaDsp">
-<picture><source srcset="form_6900_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7069_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     F(U) = 0
-\end{align*}" src="form_6900.png"/></picture>
+\end{align*}" src="form_7069.png"/></picture>
 </p>
-<p> and constructs a sequence of iterates <picture><source srcset="form_6881_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_k$" src="form_6881.png"/></picture> which, in general, are vectors of the same length as the vector returned by the function <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture>. To do this, there are a few things it needs from the user:</p><ul>
+<p> and constructs a sequence of iterates <picture><source srcset="form_7050_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_k$" src="form_7050.png"/></picture> which, in general, are vectors of the same length as the vector returned by the function <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture>. To do this, there are a few things it needs from the user:</p><ul>
 <li>A way to resize a given vector to the correct size.</li>
-<li>A way to evaluate, for a given vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture>, the function <picture><source srcset="form_2589_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)$" src="form_2589.png"/></picture>. This function is generally called the "residual" operation because the goal is of course to find a point <picture><source srcset="form_6889_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\ast$" src="form_6889.png"/></picture> for which <picture><source srcset="form_6901_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U^\ast)=0$" src="form_6901.png"/></picture>; if <picture><source srcset="form_2589_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)$" src="form_2589.png"/></picture> returns a nonzero vector, then this is the <a href="https://en.wikipedia.org/wiki/Residual_(numerical_analysis)">"residual"</a> (i.e., the "rest", or whatever is "left over"). The function that will do this is in essence the same as the computation of the right hand side vector in <a class="el" href="step_15.html">step-15</a>, but with an important difference: There, the right hand side denoted the <em>negative</em> of the residual, so we have to switch a sign.</li>
-<li>A way to compute the matrix <picture><source srcset="form_6882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_6882.png"/></picture> if that is necessary in the current iteration, along with possibly a preconditioner or other data structures (e.g., a sparse decomposition via <a class="el" href="classSparseDirectUMFPACK.html">SparseDirectUMFPACK</a> if that's what we choose to use to solve a linear system). This operation will generally be called the "setup" operation.</li>
-<li>A way to solve a linear system <picture><source srcset="form_6902_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k x = b$" src="form_6902.png"/></picture> with whatever matrix <picture><source srcset="form_6885_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k$" src="form_6885.png"/></picture> was last computed. This operation will generally be called the "solve" operation.</li>
+<li>A way to evaluate, for a given vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture>, the function <picture><source srcset="form_2676_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)$" src="form_2676.png"/></picture>. This function is generally called the "residual" operation because the goal is of course to find a point <picture><source srcset="form_7058_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U^\ast$" src="form_7058.png"/></picture> for which <picture><source srcset="form_7070_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U^\ast)=0$" src="form_7070.png"/></picture>; if <picture><source srcset="form_2676_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)$" src="form_2676.png"/></picture> returns a nonzero vector, then this is the <a href="https://en.wikipedia.org/wiki/Residual_(numerical_analysis)">"residual"</a> (i.e., the "rest", or whatever is "left over"). The function that will do this is in essence the same as the computation of the right hand side vector in <a class="el" href="step_15.html">step-15</a>, but with an important difference: There, the right hand side denoted the <em>negative</em> of the residual, so we have to switch a sign.</li>
+<li>A way to compute the matrix <picture><source srcset="form_7051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_7051.png"/></picture> if that is necessary in the current iteration, along with possibly a preconditioner or other data structures (e.g., a sparse decomposition via <a class="el" href="classSparseDirectUMFPACK.html">SparseDirectUMFPACK</a> if that's what we choose to use to solve a linear system). This operation will generally be called the "setup" operation.</li>
+<li>A way to solve a linear system <picture><source srcset="form_7071_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k x = b$" src="form_7071.png"/></picture> with whatever matrix <picture><source srcset="form_7054_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde J_k$" src="form_7054.png"/></picture> was last computed. This operation will generally be called the "solve" operation.</li>
 </ul>
 <p>All of these operations need to be provided to KINSOL by <a href="https://en.cppreference.com/w/cpp/utility/functional/function">std::function</a> objects that take the appropriate set of arguments and that generally return an integer that indicates success (a zero return value) or failure (a nonzero return value). Specifically, the objects we will access are the <a class="el" href="classSUNDIALS_1_1KINSOL.html#href_anchor">SUNDIALS::KINSOL::reinit_vector</a>, <a class="el" href="classSUNDIALS_1_1KINSOL.html#href_anchor">SUNDIALS::KINSOL::residual</a>, <a class="el" href="classSUNDIALS_1_1KINSOL.html#href_anchor">SUNDIALS::KINSOL::setup_jacobian</a>, and <a class="el" href="classSUNDIALS_1_1KINSOL.html#href_anchor">SUNDIALS::KINSOL::solve_with_jacobian</a> member variables. (See the documentation of these variables for their details.) In our implementation, we will use <a href="https://en.cppreference.com/w/cpp/language/lambda">lambda functions</a> to implement these "callbacks" that in turn can call member functions; KINSOL will then call these callbacks whenever its internal algorithms think it is useful.</p>
 <p><a class="anchor" id="Detailsoftheimplementation"></a></p><h3>Details of the implementation </h3>
-<p>The majority of the code of this tutorial program is as in <a class="el" href="step_15.html">step-15</a>, and we will not comment on it in much detail. There is really just one aspect one has to pay some attention to, namely how to compute <picture><source srcset="form_2589_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)$" src="form_2589.png"/></picture> given a vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> on the one hand, and <picture><source srcset="form_6903_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(U)$" src="form_6903.png"/></picture> given a vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> separately. At first, this seems trivial: We just take the <code>assemble_system()</code> function and in the one case throw out all code that deals with the matrix and in the other case with the right hand side vector. There: Problem solved.</p>
+<p>The majority of the code of this tutorial program is as in <a class="el" href="step_15.html">step-15</a>, and we will not comment on it in much detail. There is really just one aspect one has to pay some attention to, namely how to compute <picture><source srcset="form_2676_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U)$" src="form_2676.png"/></picture> given a vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> on the one hand, and <picture><source srcset="form_7072_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J(U)$" src="form_7072.png"/></picture> given a vector <picture><source srcset="form_304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U$" src="form_304.png"/></picture> separately. At first, this seems trivial: We just take the <code>assemble_system()</code> function and in the one case throw out all code that deals with the matrix and in the other case with the right hand side vector. There: Problem solved.</p>
 <p>But it isn't quite as simple. That's because the two are not independent if we have nonzero Dirichlet boundary values, as we do here. The linear system we want to solve contains both interior and boundary degrees of freedom, and when eliminating those degrees of freedom from those that are truly "free", using for example <a class="el" href="classAffineConstraints.html#href_anchor">AffineConstraints::distribute_local_to_global()</a>, we need to know the matrix when assembling the right hand side vector.</p>
 <p>Of course, this completely contravenes the original intent: To <em>not</em> assemble the matrix if we can get away without it. We solve this problem as follows:</p><ul>
-<li>We set the starting guess for the solution vector, <picture><source srcset="form_6904_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_0$" src="form_6904.png"/></picture>, to one where boundary degrees of freedom already have their correct values.</li>
-<li>This implies that all updates can have zero updates for these degrees of freedom, and we can build both residual vectors <picture><source srcset="form_6905_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U_k)$" src="form_6905.png"/></picture> and Jacobian matrices <picture><source srcset="form_6882_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_6882.png"/></picture> that corresponds to linear systems whose solutions are zero in these vector components. For this special case, the assembly of matrix and right hand side vectors is independent, and can be broken into separate functions.</li>
+<li>We set the starting guess for the solution vector, <picture><source srcset="form_7073_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_0$" src="form_7073.png"/></picture>, to one where boundary degrees of freedom already have their correct values.</li>
+<li>This implies that all updates can have zero updates for these degrees of freedom, and we can build both residual vectors <picture><source srcset="form_7074_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U_k)$" src="form_7074.png"/></picture> and Jacobian matrices <picture><source srcset="form_7051_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k$" src="form_7051.png"/></picture> that corresponds to linear systems whose solutions are zero in these vector components. For this special case, the assembly of matrix and right hand side vectors is independent, and can be broken into separate functions.</li>
 </ul>
-<p>There is an assumption here that whenever KINSOL asks for a linear solver with the (approximation of the) Jacobian, that this will be for an update <picture><source srcset="form_6906_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta U$" src="form_6906.png"/></picture> (which has zero boundary values), a multiple of which will be added to the solution (which already has the right boundary values). This may not be true and if so, we might have to rethink our approach. That said, it turns out that in practice this is exactly what KINSOL does when using a Newton method, and so our approach is successful.</p>
+<p>There is an assumption here that whenever KINSOL asks for a linear solver with the (approximation of the) Jacobian, that this will be for an update <picture><source srcset="form_7075_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta U$" src="form_7075.png"/></picture> (which has zero boundary values), a multiple of which will be added to the solution (which already has the right boundary values). This may not be true and if so, we might have to rethink our approach. That said, it turns out that in practice this is exactly what KINSOL does when using a Newton method, and so our approach is successful.</p>
 <p><a class="anchor" id="CommProg"></a> </p><h1>The commented program</h1>
 <p><a class="anchor" id="Includefiles"></a> </p><h3>Include files</h3>
 <p>This program starts out like most others with well known include files. Compared to the <a class="el" href="step_15.html">step-15</a> program from which most of what we do here is copied, the only difference is the include of the header files from which we import the <a class="el" href="classSparseDirectUMFPACK.html">SparseDirectUMFPACK</a> class and the actual interface to KINSOL:</p>
@@ -470,8 +470,8 @@
 <div class="line">  </div>
 <div class="line">  </div>
 </div><!-- fragment --><p><a class="anchor" id="Computingtheresidualvector"></a> </p><h4>Computing the residual vector</h4>
-<p>The second part of what <code>assemble_system()</code> used to do in <a class="el" href="step_15.html">step-15</a> is computing the residual vector, i.e., the right hand side vector of the Newton linear systems. We have broken this out of the previous function, but the following function will be easy to understand if you understood what <code>assemble_system()</code> in <a class="el" href="step_15.html">step-15</a> did. Importantly, however, we need to compute the residual not linearized around the current solution vector, but whatever we get from KINSOL. This is necessary for operations such as line search where we want to know what the residual <picture><source srcset="form_6907_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U^k + \alpha_k \delta
-   U^K)$" src="form_6907.png"/></picture> is for different values of <picture><source srcset="form_5912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha_k$" src="form_5912.png"/></picture>; KINSOL in those cases simply gives us the argument to the function <picture><source srcset="form_4_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_4.png"/></picture> and we then compute the residual <picture><source srcset="form_3504_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(\cdot)$" src="form_3504.png"/></picture> at this point.</p>
+<p>The second part of what <code>assemble_system()</code> used to do in <a class="el" href="step_15.html">step-15</a> is computing the residual vector, i.e., the right hand side vector of the Newton linear systems. We have broken this out of the previous function, but the following function will be easy to understand if you understood what <code>assemble_system()</code> in <a class="el" href="step_15.html">step-15</a> did. Importantly, however, we need to compute the residual not linearized around the current solution vector, but whatever we get from KINSOL. This is necessary for operations such as line search where we want to know what the residual <picture><source srcset="form_7076_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U^k + \alpha_k \delta
+   U^K)$" src="form_7076.png"/></picture> is for different values of <picture><source srcset="form_5912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha_k$" src="form_5912.png"/></picture>; KINSOL in those cases simply gives us the argument to the function <picture><source srcset="form_1_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F$" src="form_1.png"/></picture> and we then compute the residual <picture><source srcset="form_3512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(\cdot)$" src="form_3512.png"/></picture> at this point.</p>
 <p>The function prints the norm of the so-computed residual at the end as a way for us to follow along the progress of the program.</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> MinimalSurfaceProblem&lt;dim&gt;::compute_residual(</div>
@@ -657,7 +657,7 @@
 <div class="ttc" id="anamespaceUtilities_html_a6195c5f009ea8c7c536c6ffdf108c32f"><div class="ttname"><a href="namespaceUtilities.html#href_anchor">Utilities::int_to_string</a></div><div class="ttdeci">std::string int_to_string(const unsigned int value, const unsigned int digits=numbers::invalid_unsigned_int)</div><div class="ttdef"><b>Definition</b> <a href="base_2utilities_8cc_source.html#href_anchor">utilities.cc:471</a></div></div>
 </div><!-- fragment --><p><a class="anchor" id="Therunfunctionandtheoveralllogicoftheprogram"></a> </p><h4>The run() function and the overall logic of the program</h4>
 <p>The only function that <em>really</em> is interesting in this program is the one that drives the overall algorithm of starting on a coarse mesh, doing some mesh refinement cycles, and on each mesh using KINSOL to find the solution of the nonlinear algebraic equation we obtain from discretization on this mesh. The <code>refine_mesh()</code> function above makes sure that the solution on one mesh is used as the starting guess on the next mesh. We also use a <a class="el" href="classTimerOutput.html">TimerOutput</a> object to measure how much time every operation on each mesh costs, and reset the timer at the beginning of each cycle.</p>
-<p>As discussed in the introduction, it is not necessary to solve problems on coarse meshes particularly accurately since these will only solve as starting guesses for the next mesh. As a consequence, we will use a target tolerance of <picture><source srcset="form_6908_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau=10^{-3} \frac{1}{10^k}$" src="form_6908.png"/></picture> for the <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>th mesh refinement cycle.</p>
+<p>As discussed in the introduction, it is not necessary to solve problems on coarse meshes particularly accurately since these will only solve as starting guesses for the next mesh. As a consequence, we will use a target tolerance of <picture><source srcset="form_7077_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau=10^{-3} \frac{1}{10^k}$" src="form_7077.png"/></picture> for the <picture><source srcset="form_75_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k$" src="form_75.png"/></picture>th mesh refinement cycle.</p>
 <p>All of this is encoded in the first part of this function:</p>
 <div class="fragment"><div class="line">    <span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line">    <span class="keywordtype">void</span> MinimalSurfaceProblem&lt;dim&gt;::run()</div>
@@ -891,9 +891,9 @@
 <div class="line">  ...</div>
 </div><!-- fragment --><p> What is happening is this:</p><ul>
 <li>In the first residual computation, KINSOL computes the residual to see whether the desired tolerance has been reached. The answer is no, so it requests the user program to compute the Jacobian matrix (and the function then also factorizes the matrix via <a class="el" href="classSparseDirectUMFPACK.html">SparseDirectUMFPACK</a>).</li>
-<li>KINSOL then instructs us to solve a linear system of the form <picture><source srcset="form_6909_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k \, \delta U_k = -F_k$" src="form_6909.png"/></picture> with this matrix and the previously computed residual vector.</li>
-<li>It is then time to determine how far we want to go in this direction, i.e., do line search. To this end, KINSOL requires us to compute the residual vector <picture><source srcset="form_6910_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U_k + \alpha_k \delta U_k)$" src="form_6910.png"/></picture> for different step lengths <picture><source srcset="form_5912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha_k$" src="form_5912.png"/></picture>. For the first step above, it finds an acceptable <picture><source srcset="form_5912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha_k$" src="form_5912.png"/></picture> after two tries, and that's generally what will happen in later line searches as well.</li>
-<li>Having found a suitable updated solution <picture><source srcset="form_6911_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_{k+1}$" src="form_6911.png"/></picture>, the process is repeated except now KINSOL is happy with the current Jacobian matrix and does not instruct us to re-build the matrix and its factorization, instead asking us to solve a linear system with that same matrix. That will happen several times over, and only after ten solves with the same matrix are we instructed to build a matrix again, using what is by then an already substantially improved solution as linearization point.</li>
+<li>KINSOL then instructs us to solve a linear system of the form <picture><source srcset="form_7078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_k \, \delta U_k = -F_k$" src="form_7078.png"/></picture> with this matrix and the previously computed residual vector.</li>
+<li>It is then time to determine how far we want to go in this direction, i.e., do line search. To this end, KINSOL requires us to compute the residual vector <picture><source srcset="form_7079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F(U_k + \alpha_k \delta U_k)$" src="form_7079.png"/></picture> for different step lengths <picture><source srcset="form_5912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha_k$" src="form_5912.png"/></picture>. For the first step above, it finds an acceptable <picture><source srcset="form_5912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha_k$" src="form_5912.png"/></picture> after two tries, and that's generally what will happen in later line searches as well.</li>
+<li>Having found a suitable updated solution <picture><source srcset="form_7080_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_{k+1}$" src="form_7080.png"/></picture>, the process is repeated except now KINSOL is happy with the current Jacobian matrix and does not instruct us to re-build the matrix and its factorization, instead asking us to solve a linear system with that same matrix. That will happen several times over, and only after ten solves with the same matrix are we instructed to build a matrix again, using what is by then an already substantially improved solution as linearization point.</li>
 </ul>
 <p>The program also writes the solution to a VTU file at the end of each mesh refinement cycle, and it looks as follows: </p><table width="60%" align="center">
 <tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_78.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_78.html	2024-03-17 21:57:49.759273307 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_78.html	2024-03-17 21:57:49.767273357 +0000
@@ -128,9 +128,9 @@
 </ol> </td> </tr> </table>
  <a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p>The Black-Scholes equation is a partial differential equation that falls a bit out of the ordinary scheme. It describes what the fair price of a "European
-call" stock option is. Without going into too much detail, a stock "option" is a contract one can buy from a bank that allows me, but not requires me, to buy a specific stock at a fixed price <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> at a fixed future time <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture> in the future. The question one would then want to answer as a buyer of such an option is "How much do I think such a contract is worth?", or as the seller "How much do I need to charge for this contract?", both as a function of the time <picture><source srcset="form_6912_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t&lt;T$" src="form_6912.png"/></picture> before the contract is up at time <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture> and as a function of the stock price <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>. Fischer Black and Myron Scholes derived a partial differential equation for the fair price <picture><source srcset="form_6913_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(S,t)$" src="form_6913.png"/></picture> for such options under the assumption that stock prices exhibit random price fluctuations with a given level of "volatility" plus a background exponential price increase (which one can think of as the inflation rate that simply devalues all money over time). For their work, Black and Scholes received the Nobel Prize in Economic Sciences in 1997, making this the first tutorial program dealing with a problem for which someone has gotten a Nobel Prize <b>[black1973pricing]</b>.</p>
+call" stock option is. Without going into too much detail, a stock "option" is a contract one can buy from a bank that allows me, but not requires me, to buy a specific stock at a fixed price <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> at a fixed future time <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture> in the future. The question one would then want to answer as a buyer of such an option is "How much do I think such a contract is worth?", or as the seller "How much do I need to charge for this contract?", both as a function of the time <picture><source srcset="form_7081_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t&lt;T$" src="form_7081.png"/></picture> before the contract is up at time <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture> and as a function of the stock price <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>. Fischer Black and Myron Scholes derived a partial differential equation for the fair price <picture><source srcset="form_7082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(S,t)$" src="form_7082.png"/></picture> for such options under the assumption that stock prices exhibit random price fluctuations with a given level of "volatility" plus a background exponential price increase (which one can think of as the inflation rate that simply devalues all money over time). For their work, Black and Scholes received the Nobel Prize in Economic Sciences in 1997, making this the first tutorial program dealing with a problem for which someone has gotten a Nobel Prize <b>[black1973pricing]</b>.</p>
 <p>The equation reads as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_6914_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7083_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     &amp;\frac{\partial V}{\partial t} + \frac{\sigma^2S^2}{2} \
     \frac{\partial^2 V}{\partial S^2} + \
     rS\frac{\partial V}{\partial S} - rV = 0, \
@@ -144,35 +144,35 @@
     \\
     &amp;V(S,T) = \max(S-K,0) \
     &amp;&amp;\forall S \in \Omega
-\end{align*}" src="form_6914.png"/></picture>
+\end{align*}" src="form_7083.png"/></picture>
 </p>
 <p> where  </p><p class="formulaDsp">
-<picture><source srcset="form_6915_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7084_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     V(S,t): &amp;&amp; \text{Value of call option at time t and asset price S} \\
     \sigma: &amp;&amp; \text{Volatility of the underlying asset} \\
     r: &amp;&amp; \text{Risk free interest rate} \\
     K : &amp;&amp; \text{Strike price for purchasing asset}
-\end{align*}" src="form_6915.png"/></picture>
+\end{align*}" src="form_7084.png"/></picture>
 </p>
-<p>The way we should interpret this equation is that it is a time-dependent partial differential equation of one "space" variable <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> as the price of the stock, and <picture><source srcset="form_6913_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(S,t)$" src="form_6913.png"/></picture> is the price of the option at time <picture><source srcset="form_215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t$" src="form_215.png"/></picture> if the stock price at that time were <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>.</p>
+<p>The way we should interpret this equation is that it is a time-dependent partial differential equation of one "space" variable <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> as the price of the stock, and <picture><source srcset="form_7082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(S,t)$" src="form_7082.png"/></picture> is the price of the option at time <picture><source srcset="form_189_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t$" src="form_189.png"/></picture> if the stock price at that time were <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>.</p>
 <p><a class="anchor" id="Particularitiesoftheequationsystem"></a></p><h3>Particularities of the equation system</h3>
-<p>There are a number of oddities in this equation that are worth discussing before moving on to its numerical solution. First, the "spatial" domain <picture><source srcset="form_6916_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega\subset\mathbb{R}$" src="form_6916.png"/></picture> is unbounded, and thus <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> can be unbounded in value. This is because there may be a practical upper bound for stock prices, but not a conceptual one. The boundary conditions <picture><source srcset="form_6917_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(S,t)\rightarrow S$" src="form_6917.png"/></picture> as <picture><source srcset="form_6918_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S\rightarrow \infty$" src="form_6918.png"/></picture> can then be interpreted as follows: What is the value of an option that allows me to buy a stock at price <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> if the stock price (today or at time <picture><source srcset="form_6919_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=T$" src="form_6919.png"/></picture>) is <picture><source srcset="form_6920_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S\gg K$" src="form_6920.png"/></picture>? One would expect that it is <picture><source srcset="form_6921_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V\approx S-K$" src="form_6921.png"/></picture> plus some adjustment for inflation, or, if we really truly consider huge values of <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>, we can neglect <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> and arrive at the statement that the boundary values at the infinite boundary should be of the form <picture><source srcset="form_6922_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V\rightarrow S$" src="form_6922.png"/></picture> as stated above.</p>
-<p>In practice, for us to use a finite element method to solve this, we are going to need to bound <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>. Since this equation describes prices, and it doesn't make sense to talk about prices being negative, we will set the lower bound of <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> to be 0. Then, for an upper bound, we will choose a very large number, one that <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> is not very likely to ever get to. We will call this <picture><source srcset="form_6923_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_\text{max}$" src="form_6923.png"/></picture>. So, <picture><source srcset="form_6924_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega=[0,S_\text{max}]$" src="form_6924.png"/></picture>.</p>
-<p>Second, after truncating the domain, we need to ask what boundary values we should pose at this now finite boundary. To take care of this, we use "put-call" parity <b>[stoll1969relationship]</b>. A "pull option" is one in which we are allowed, but not required, to <em>sell</em> a stock at price <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to someone at a future time <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture>. This says  </p><p class="formulaDsp">
-<picture><source srcset="form_6925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>There are a number of oddities in this equation that are worth discussing before moving on to its numerical solution. First, the "spatial" domain <picture><source srcset="form_7085_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega\subset\mathbb{R}$" src="form_7085.png"/></picture> is unbounded, and thus <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> can be unbounded in value. This is because there may be a practical upper bound for stock prices, but not a conceptual one. The boundary conditions <picture><source srcset="form_7086_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(S,t)\rightarrow S$" src="form_7086.png"/></picture> as <picture><source srcset="form_7087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S\rightarrow \infty$" src="form_7087.png"/></picture> can then be interpreted as follows: What is the value of an option that allows me to buy a stock at price <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> if the stock price (today or at time <picture><source srcset="form_7088_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=T$" src="form_7088.png"/></picture>) is <picture><source srcset="form_7089_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S\gg K$" src="form_7089.png"/></picture>? One would expect that it is <picture><source srcset="form_7090_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V\approx S-K$" src="form_7090.png"/></picture> plus some adjustment for inflation, or, if we really truly consider huge values of <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>, we can neglect <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> and arrive at the statement that the boundary values at the infinite boundary should be of the form <picture><source srcset="form_7091_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V\rightarrow S$" src="form_7091.png"/></picture> as stated above.</p>
+<p>In practice, for us to use a finite element method to solve this, we are going to need to bound <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>. Since this equation describes prices, and it doesn't make sense to talk about prices being negative, we will set the lower bound of <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> to be 0. Then, for an upper bound, we will choose a very large number, one that <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> is not very likely to ever get to. We will call this <picture><source srcset="form_7092_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_\text{max}$" src="form_7092.png"/></picture>. So, <picture><source srcset="form_7093_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega=[0,S_\text{max}]$" src="form_7093.png"/></picture>.</p>
+<p>Second, after truncating the domain, we need to ask what boundary values we should pose at this now finite boundary. To take care of this, we use "put-call" parity <b>[stoll1969relationship]</b>. A "pull option" is one in which we are allowed, but not required, to <em>sell</em> a stock at price <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> to someone at a future time <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture>. This says  </p><p class="formulaDsp">
+<picture><source srcset="form_7094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     V(S,t)+Ke^{-r(T-t)}=P(S,t)+S
-\end{align*}" src="form_6925.png"/></picture>
+\end{align*}" src="form_7094.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_6913_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(S,t)$" src="form_6913.png"/></picture> is the value of the call option, and <picture><source srcset="form_6926_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P(S,t)$" src="form_6926.png"/></picture> is the value of the put option. Since we expect <picture><source srcset="form_6927_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P(S,t) \rightarrow 0$" src="form_6927.png"/></picture> as <picture><source srcset="form_6928_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S \rightarrow \infty$" src="form_6928.png"/></picture>, this says  </p><p class="formulaDsp">
-<picture><source srcset="form_6929_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> where <picture><source srcset="form_7082_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(S,t)$" src="form_7082.png"/></picture> is the value of the call option, and <picture><source srcset="form_7095_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P(S,t)$" src="form_7095.png"/></picture> is the value of the put option. Since we expect <picture><source srcset="form_7096_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P(S,t) \rightarrow 0$" src="form_7096.png"/></picture> as <picture><source srcset="form_7097_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S \rightarrow \infty$" src="form_7097.png"/></picture>, this says  </p><p class="formulaDsp">
+<picture><source srcset="form_7098_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     V(S,t) \rightarrow S-Ke^{-r(T-t)},
-\end{align*}" src="form_6929.png"/></picture>
+\end{align*}" src="form_7098.png"/></picture>
 </p>
-<p> and we can use this as a reasonable boundary condition at our finite point <picture><source srcset="form_6923_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_\text{max}$" src="form_6923.png"/></picture>.</p>
-<p>The second complication of the Block-Scholes equation is that we are given a final condition, and not an initial condition. This is because we know what the option is worth at time <picture><source srcset="form_6919_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=T$" src="form_6919.png"/></picture>: If the stock price at <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture> is <picture><source srcset="form_6930_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S&lt;K$" src="form_6930.png"/></picture>, then we have no incentive to use our option of buying a price <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> because we can buy that stock for cheaper on the open market. So <picture><source srcset="form_6931_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(S,T)=0$" src="form_6931.png"/></picture> for <picture><source srcset="form_6930_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S&lt;K$" src="form_6930.png"/></picture>. On the other hand, if at time <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture> we have <picture><source srcset="form_6932_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S&gt;K$" src="form_6932.png"/></picture>, then we can buy the stock at price <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> via the option and immediately sell it again on the market for price <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>, giving me a profit of <picture><source srcset="form_6933_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S-K$" src="form_6933.png"/></picture>. In other words, <picture><source srcset="form_6934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(S,T)=S-K$" src="form_6934.png"/></picture> for <picture><source srcset="form_6932_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S&gt;K$" src="form_6932.png"/></picture>. So, we only know values for <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> at the <em>end time</em> but not the initial time &ndash; in fact, finding out what a fair price at the current time (conventionally taken to be <picture><source srcset="form_430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=0$" src="form_430.png"/></picture>) is what solving these equations is all about.</p>
-<p>This means that this is not an equation that is posed going forward in time, but in fact going <em>backward</em> in time. Thus it makes sense to solve this problem in reverse by making the change of variables <picture><source srcset="form_6935_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau=T-t$" src="form_6935.png"/></picture> where now <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture> denotes the time before the strike time <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture>.</p>
+<p> and we can use this as a reasonable boundary condition at our finite point <picture><source srcset="form_7092_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S_\text{max}$" src="form_7092.png"/></picture>.</p>
+<p>The second complication of the Block-Scholes equation is that we are given a final condition, and not an initial condition. This is because we know what the option is worth at time <picture><source srcset="form_7088_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=T$" src="form_7088.png"/></picture>: If the stock price at <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture> is <picture><source srcset="form_7099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S&lt;K$" src="form_7099.png"/></picture>, then we have no incentive to use our option of buying a price <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> because we can buy that stock for cheaper on the open market. So <picture><source srcset="form_7100_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(S,T)=0$" src="form_7100.png"/></picture> for <picture><source srcset="form_7099_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S&lt;K$" src="form_7099.png"/></picture>. On the other hand, if at time <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture> we have <picture><source srcset="form_7101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S&gt;K$" src="form_7101.png"/></picture>, then we can buy the stock at price <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> via the option and immediately sell it again on the market for price <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture>, giving me a profit of <picture><source srcset="form_7102_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S-K$" src="form_7102.png"/></picture>. In other words, <picture><source srcset="form_7103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(S,T)=S-K$" src="form_7103.png"/></picture> for <picture><source srcset="form_7101_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S&gt;K$" src="form_7101.png"/></picture>. So, we only know values for <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> at the <em>end time</em> but not the initial time &ndash; in fact, finding out what a fair price at the current time (conventionally taken to be <picture><source srcset="form_430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$t=0$" src="form_430.png"/></picture>) is what solving these equations is all about.</p>
+<p>This means that this is not an equation that is posed going forward in time, but in fact going <em>backward</em> in time. Thus it makes sense to solve this problem in reverse by making the change of variables <picture><source srcset="form_7104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau=T-t$" src="form_7104.png"/></picture> where now <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture> denotes the time before the strike time <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture>.</p>
 <p>With all of this, we finally end up with the following problem:  </p><p class="formulaDsp">
-<picture><source srcset="form_6936_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     &amp;-\frac{\partial V}{\partial \tau} + \frac{\sigma^2S^2}{2} \
     \frac{\partial^2 V}{\partial S^2} + rS\frac{\partial V}{\partial S} - rV=0\
     , \quad\quad &amp;&amp;\forall S\in [0,S_\text{max}], \tau \in [0,T]
@@ -185,23 +185,23 @@
     \\
     &amp;V(S,0) = \max(S-K,0) \
     &amp;&amp;\forall S \in [0,S_\text{max}]
-\end{align*}" src="form_6936.png"/></picture>
+\end{align*}" src="form_7105.png"/></picture>
 </p>
 <p>Conceptually, this is an advection-diffusion-reaction problem for the variable <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture>: There is both a second-order derivative diffusion term, a first-order derivative advection term, and a zeroth-order reaction term. We can expect this problem to be a little bit forgiving in practice because for realistic values of the coefficients, it is diffusive dominated. But, because of the advective terms in the problem, we will have to be careful with mesh refinement and time step choice. There is also the issue that the diffusion term is written in a non-conservative form and so integration by parts is not immediately obvious. This will be discussed in the next section.</p>
 <p><a class="anchor" id="Schemeforthenumericalsolution"></a></p><h3>Scheme for the numerical solution</h3>
-<p>We will solve this problem using an IMEX method. In particular, we first discretize in time with the theta method and will later pick different values of theta for the advective and diffusive terms. Let <picture><source srcset="form_6937_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^n(S)$" src="form_6937.png"/></picture> approximate <picture><source srcset="form_6938_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(S,\tau_n)$" src="form_6938.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_6939_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>We will solve this problem using an IMEX method. In particular, we first discretize in time with the theta method and will later pick different values of theta for the advective and diffusive terms. Let <picture><source srcset="form_7106_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^n(S)$" src="form_7106.png"/></picture> approximate <picture><source srcset="form_7107_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(S,\tau_n)$" src="form_7107.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_7108_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     0=&amp;-\frac{V^n(S)-V^{n-1}(S)}{k_n} \\
     &amp;+\frac{\sigma^2S^2}{2}\left[(1-\theta)\frac{d^2V^{n-1}(S)}{dS^2} + \
     \theta \frac{d^2V^{n}(S)}{dS^2}\right] \\
     &amp;+rS\left[(1-\theta)\frac{dV^{n-1}(S)}{dS} + \
     \theta\frac{dV^{n}(S)}{dS}\right]  \\
     &amp;-r\left[(1-\theta)V^{n-1}(S) + \theta V^n(S)\right]
-\end{align*}" src="form_6939.png"/></picture>
+\end{align*}" src="form_7108.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_6940_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n=\tau_n-\tau_{n-1}$" src="form_6940.png"/></picture> is the time step size. Given this time discretization, we can proceed to discretize space by multiplying with test functions and then integrating by parts. Because there are some interesting details in this due to the advective and non-advective terms in this equation, this process will be explained in detail.</p>
-<p>So, we begin by multiplying by test functions, <picture><source srcset="form_6941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\phi_i(S)\}_{i\in\mathbb{N}}$" src="form_6941.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_6942_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> Here, <picture><source srcset="form_7109_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n=\tau_n-\tau_{n-1}$" src="form_7109.png"/></picture> is the time step size. Given this time discretization, we can proceed to discretize space by multiplying with test functions and then integrating by parts. Because there are some interesting details in this due to the advective and non-advective terms in this equation, this process will be explained in detail.</p>
+<p>So, we begin by multiplying by test functions, <picture><source srcset="form_7110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\phi_i(S)\}_{i\in\mathbb{N}}$" src="form_7110.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_7111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     0=&amp;-\int_0^{S_\text{max}}\phi_i(S)\left[V^n(S)-V^{n-1}(S)\right]dS \\
     &amp;+k_n\int_0^{S_\text{max}}\phi_i(S)\left[\frac{\sigma^2S^2}{2} \
     \left[(1-\theta)\frac{d^2V^{n-1}(S)}{dS^2} + \
@@ -211,12 +211,12 @@
      + \theta\frac{dV^{n}(S)}{dS}\right]\right]dS  \\
     &amp;-k_n\int_0^{S_\text{max}}\phi_i(S)\left[r\left[(1-\theta)V^{n-1}(S)\
      + \theta V^n(S)\right]\right]dS
-\end{align*}" src="form_6942.png"/></picture>
+\end{align*}" src="form_7111.png"/></picture>
 </p>
-<p>As usual, (1) becomes <picture><source srcset="form_6943_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\textbf{M}V^n+\textbf{M}V^{n-1}$" src="form_6943.png"/></picture> and (4) becomes <picture><source srcset="form_6944_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n\left[-r(1-\theta)\textbf{M}V^{n-1} - \theta r\textbf{M}V^n\right]$" src="form_6944.png"/></picture>, where <picture><source srcset="form_6945_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{M}_{i,j}=\left(\phi_i(S),\phi_j(S)\right)$" src="form_6945.png"/></picture>, and where we have taken the liberty of denoting by <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> not only the function <picture><source srcset="form_6946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(S)$" src="form_6946.png"/></picture> but also the vector of nodal values after discretization.</p>
+<p>As usual, (1) becomes <picture><source srcset="form_7112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$-\textbf{M}V^n+\textbf{M}V^{n-1}$" src="form_7112.png"/></picture> and (4) becomes <picture><source srcset="form_7113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_n\left[-r(1-\theta)\textbf{M}V^{n-1} - \theta r\textbf{M}V^n\right]$" src="form_7113.png"/></picture>, where <picture><source srcset="form_7114_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{M}_{i,j}=\left(\phi_i(S),\phi_j(S)\right)$" src="form_7114.png"/></picture>, and where we have taken the liberty of denoting by <picture><source srcset="form_305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V$" src="form_305.png"/></picture> not only the function <picture><source srcset="form_7115_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V(S)$" src="form_7115.png"/></picture> but also the vector of nodal values after discretization.</p>
 <p>The interesting parts come from (2) and (3).</p>
 <p>For (2), we have:  </p><p class="formulaDsp">
-<picture><source srcset="form_6947_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     &amp;k_n\int_0^{S_\text{max}}\phi_i(S)\left[\frac{\sigma^2S^2}{2} \
      \left[(1-\theta)\frac{d^2V^{n-1}(S)}{dS^2} + \
      \theta \frac{d^2V^{n}(S)}{dS^2}\right]\right]dS \\
@@ -224,10 +224,10 @@
      \frac{d^2V^{n-1}(S)}{dS^2} \
     +k_n\theta\int_0^{S_\text{max}}\phi_i(S)\frac{\sigma^2S^2}{2} \
      \frac{d^2V^{n}(S)}{dS^2}
-\end{align*}" src="form_6947.png"/></picture>
+\end{align*}" src="form_7116.png"/></picture>
 </p>
 <p>There are two integrals here, that are more or less the same, with the differences being a slightly different coefficient in front of the integral, and a different time step for V. Therefore, we will outline this integral in the general case, and account for the differences at the end. So, consider the general integral, which we will solve using integration by parts:  </p><p class="formulaDsp">
-<picture><source srcset="form_6948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     &amp;\int_{0}^{S_\text{max}} \phi_i(S)\frac{\sigma^2S^2}{2}
         \frac{d^2V^n(S)}{dS^2}dS \\
     &amp;= \phi_i(S)\frac{1}{2}\sigma^2S^2\frac{dV^n(S)}{dS}\Bigg|_0^{S_{max}} - \
@@ -251,10 +251,10 @@
     &amp;= -\sigma^2\textbf{B}V^n - \frac{1}{2}\sigma^2\textbf{D}V^n, \quad\quad \
     \textbf{B}_{i,j} = \left(\phi_i(S)S, \frac{d\phi_j(S)}{dS}\right),\
     \textbf{D}_{i,j} = \left(\frac{d\phi_i(S)}{dS}S^2,\frac{d\phi_j(S)}{dS}\right)
-\end{align*}" src="form_6948.png"/></picture>
+\end{align*}" src="form_7117.png"/></picture>
 </p>
-<p>So, after adding in the constants and exchanging <picture><source srcset="form_3265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^n$" src="form_3265.png"/></picture> for <picture><source srcset="form_6949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^{n-1}$" src="form_6949.png"/></picture> where applicable, we arrive at the following for (2):  </p><p class="formulaDsp">
-<picture><source srcset="form_6950_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>So, after adding in the constants and exchanging <picture><source srcset="form_3405_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^n$" src="form_3405.png"/></picture> for <picture><source srcset="form_7118_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^{n-1}$" src="form_7118.png"/></picture> where applicable, we arrive at the following for (2):  </p><p class="formulaDsp">
+<picture><source srcset="form_7119_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     &amp;k_n\int_0^{S_\text{max}}\phi_i(S)\left[\frac{\sigma^2S^2}{2}
         \left[(1-\theta)\
     \frac{d^2V^{n-1}(S)}{dS^2} + \
@@ -263,19 +263,19 @@
      -(1-\theta)\frac{1}{2}\sigma^2\textbf{D}V^{n-1} \
     -\theta\sigma^2\textbf{B}V^{n}
      -\theta\frac{1}{2}\sigma^2\textbf{D}V^{n}\right]
-\end{align*}" src="form_6950.png"/></picture>
+\end{align*}" src="form_7119.png"/></picture>
 </p>
-<p> But, because the matrix <picture><source srcset="form_6951_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{B}$" src="form_6951.png"/></picture> involves an advective term, we will choose <picture><source srcset="form_3202_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=0$" src="form_3202.png"/></picture> there &ndash; in other words, we use an explicit Euler method to treat advection. Conversely, since the matrix <picture><source srcset="form_6952_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{D}$" src="form_6952.png"/></picture> involves the diffusive term, we will choose <picture><source srcset="form_3647_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=1/2$" src="form_3647.png"/></picture> there &ndash; i.e., we treat diffusion using the second order Crank-Nicolson method.</p>
+<p> But, because the matrix <picture><source srcset="form_7120_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{B}$" src="form_7120.png"/></picture> involves an advective term, we will choose <picture><source srcset="form_3365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=0$" src="form_3365.png"/></picture> there &ndash; in other words, we use an explicit Euler method to treat advection. Conversely, since the matrix <picture><source srcset="form_7121_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{D}$" src="form_7121.png"/></picture> involves the diffusive term, we will choose <picture><source srcset="form_3647_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=1/2$" src="form_3647.png"/></picture> there &ndash; i.e., we treat diffusion using the second order Crank-Nicolson method.</p>
 <p>So, we arrive at the following:  </p><p class="formulaDsp">
-<picture><source srcset="form_6953_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7122_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     k_n\left[-\frac{1}{4}\sigma^2\textbf{D}V^{n-1} \
     -\frac{1}{4}\sigma^2\textbf{D}V^n \
     - \sigma^2\textbf{B}V^{n-1}\right]
-\end{align*}" src="form_6953.png"/></picture>
+\end{align*}" src="form_7122.png"/></picture>
 </p>
 <p>Now, to handle (3). For this, we will again proceed by considering the general case like above.</p>
 <p class="formulaDsp">
-<picture><source srcset="form_6954_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     &amp;\int_{0}^{S_\text{max}} \phi_i(S)rS\frac{dV^n}{dS}dS \\
     &amp;= \phi_i(S)rSV^n\Bigg|_0^{S_\text{max}} - \int_0^{S_\text{max}}
         \left[r\phi_i(S) \
@@ -289,25 +289,25 @@
     &amp;= -r\textbf{M}V^n -r\textbf{A}V^n, \quad\quad\
     \textbf{M}_{i,j} = \left(\phi_i(S), \phi_j(S)\right),\
     \textbf{A}_{i,j} = \left(S\frac{d\phi_i(S)}{dS}, \phi_j(S)\right)
-\end{align*}" src="form_6954.png"/></picture>
+\end{align*}" src="form_7123.png"/></picture>
 </p>
-<p>So, again after adding in the constants and exchanging <picture><source srcset="form_3265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^n$" src="form_3265.png"/></picture> for <picture><source srcset="form_6949_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^{n-1}$" src="form_6949.png"/></picture> where applicable, we arrive at the following for (3):  </p><p class="formulaDsp">
-<picture><source srcset="form_6955_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>So, again after adding in the constants and exchanging <picture><source srcset="form_3405_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^n$" src="form_3405.png"/></picture> for <picture><source srcset="form_7118_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V^{n-1}$" src="form_7118.png"/></picture> where applicable, we arrive at the following for (3):  </p><p class="formulaDsp">
+<picture><source srcset="form_7124_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     &amp;k_n\int_0^{S_\text{max}}\phi_i(S)\left[rS\left[(1-\theta)
         \frac{dV^{n-1}(S)}{dS} +\
      \theta\frac{dV^{n}(S)}{dS}\right]\right]dS \\
     &amp;= k_n\left[-(1-\theta)r\textbf{M}V^{n-1} -(1-\theta)r\textbf{A}V^{n-1}\
     -\theta r\textbf{M}V^n -\theta r\textbf{A}V^n\right]
-\end{align*}" src="form_6955.png"/></picture>
+\end{align*}" src="form_7124.png"/></picture>
 </p>
-<p> Just as before, we will use <picture><source srcset="form_3202_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=0$" src="form_3202.png"/></picture> for the matrix <picture><source srcset="form_6956_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{A}$" src="form_6956.png"/></picture> and <picture><source srcset="form_3491_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=\frac{1}{2}$" src="form_3491.png"/></picture> for the matrix <picture><source srcset="form_6957_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{M}$" src="form_6957.png"/></picture>. So, we arrive at the following for (3):  </p><p class="formulaDsp">
-<picture><source srcset="form_6958_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> Just as before, we will use <picture><source srcset="form_3365_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=0$" src="form_3365.png"/></picture> for the matrix <picture><source srcset="form_7125_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{A}$" src="form_7125.png"/></picture> and <picture><source srcset="form_3499_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\theta=\frac{1}{2}$" src="form_3499.png"/></picture> for the matrix <picture><source srcset="form_7126_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\textbf{M}$" src="form_7126.png"/></picture>. So, we arrive at the following for (3):  </p><p class="formulaDsp">
+<picture><source srcset="form_7127_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     k_n\left[-\frac{1}{2}r\textbf{M}V^{n-1} - \frac{1}{2}r\textbf{M}V^n \
     -r\textbf{A}V^{n-1}\right]
-\end{align*}" src="form_6958.png"/></picture>
+\end{align*}" src="form_7127.png"/></picture>
 </p>
 <p>Now, putting everything together, we obtain the following discrete form for the Black-Scholes Equation:  </p><p class="formulaDsp">
-<picture><source srcset="form_6959_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7128_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
     0&amp;= \\
     &amp;-\textbf{M}V^n+\textbf{M}V^{n-1} \\
     &amp; +k_n\left[-\frac{1}{4}\sigma^2\textbf{D}V^{n-1} \
@@ -320,61 +320,61 @@
/usr/share/doc/packages/dealii/doxygen/deal.II/step_79.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_79.html	2024-03-17 21:57:49.887274098 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_79.html	2024-03-17 21:57:49.891274122 +0000
@@ -140,199 +140,199 @@
   <li> <a href="#href_anchor" class=bold>The plain program</a>
 </ol> </td> </tr> </table>
  <a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
-<p>Topology Optimization of Elastic Media is a technique used to optimize a structure that is bearing some load. Ideally, we would like to minimize the maximum stress placed on a structure by selecting a region <picture><source srcset="form_1117_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E$" src="form_1117.png"/></picture> where material is placed. In other words,  </p><p class="formulaDsp">
-<picture><source srcset="form_7349_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Topology Optimization of Elastic Media is a technique used to optimize a structure that is bearing some load. Ideally, we would like to minimize the maximum stress placed on a structure by selecting a region <picture><source srcset="form_1123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$E$" src="form_1123.png"/></picture> where material is placed. In other words,  </p><p class="formulaDsp">
+<picture><source srcset="form_7143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \text{minimize}\| \boldsymbol{\sigma} (\mathbf{u}) \|_\infty
-\]" src="form_7349.png"/></picture>
+\]" src="form_7143.png"/></picture>
 </p>
   <p class="formulaDsp">
-<picture><source srcset="form_7350_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \text{subject to } |E|\leq V_{\max},
-\]" src="form_7350.png"/></picture>
+\]" src="form_7144.png"/></picture>
 </p>
   <p class="formulaDsp">
-<picture><source srcset="form_7351_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \text{and } \nabla \cdot \boldsymbol{\sigma} + \mathbf{F} = \mathbf{0}.
-\]" src="form_7351.png"/></picture>
+\]" src="form_7145.png"/></picture>
 </p>
-<p>Here, <picture><source srcset="form_7352_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\sigma} = \mathbf{C} : \boldsymbol{\varepsilon}(\mathbf{u})$" src="form_7352.png"/></picture> is the stress within the body that is caused by the external forces <picture><source srcset="form_224_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F$" src="form_224.png"/></picture>, where we have for simplicity assumed that the material is linear-elastic and so <picture><source srcset="form_1837_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1837.png"/></picture> is the stress-strain tensor and <picture><source srcset="form_7353_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\varepsilon}(\mathbf{u})=\frac{1}{2} (\nabla \mathbf{u} + (\nabla\mathbf{u})^T)$" src="form_7353.png"/></picture> is the small-deformation strain as a function of the displacement <picture><source srcset="form_2520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2520.png"/></picture> &ndash; see <a class="el" href="step_8.html">step-8</a> and <a class="el" href="step_17.html">step-17</a> for more on linear elasticity. In the formulation above, <picture><source srcset="form_7354_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_\text{max}$" src="form_7354.png"/></picture> is the maximal amount of material we are willing to provide to build the object. The last of the constraints is the partial differential equation that relates stress <picture><source srcset="form_793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\sigma}$" src="form_793.png"/></picture> and forces <picture><source srcset="form_224_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F$" src="form_224.png"/></picture> and is simply the steady-state force balance.</p>
+<p>Here, <picture><source srcset="form_7146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\sigma} = \mathbf{C} : \boldsymbol{\varepsilon}(\mathbf{u})$" src="form_7146.png"/></picture> is the stress within the body that is caused by the external forces <picture><source srcset="form_198_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F$" src="form_198.png"/></picture>, where we have for simplicity assumed that the material is linear-elastic and so <picture><source srcset="form_1807_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}$" src="form_1807.png"/></picture> is the stress-strain tensor and <picture><source srcset="form_7147_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\varepsilon}(\mathbf{u})=\frac{1}{2} (\nabla \mathbf{u} + (\nabla\mathbf{u})^T)$" src="form_7147.png"/></picture> is the small-deformation strain as a function of the displacement <picture><source srcset="form_2515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2515.png"/></picture> &ndash; see <a class="el" href="step_8.html">step-8</a> and <a class="el" href="step_17.html">step-17</a> for more on linear elasticity. In the formulation above, <picture><source srcset="form_7148_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$V_\text{max}$" src="form_7148.png"/></picture> is the maximal amount of material we are willing to provide to build the object. The last of the constraints is the partial differential equation that relates stress <picture><source srcset="form_793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\sigma}$" src="form_793.png"/></picture> and forces <picture><source srcset="form_198_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf F$" src="form_198.png"/></picture> and is simply the steady-state force balance.</p>
 <p>That said, the infinity norm above creates a problem: As a function of location of material, this objective function is necessarily not differentiable, making prospects of optimization rather bleak. So instead, a common approach in topology optimization is to find an approximate solution by optimizing a related problem: We would like to minimize the strain energy. This is a measure of the potential energy stored in an object due to its deformation, but also works as a measure of total deformation over the structure.</p>
 <p class="formulaDsp">
-<picture><source srcset="form_7355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \text{minimize  } \int_E \frac{1}{2}\boldsymbol{\sigma} : \boldsymbol{\varepsilon} dV
-\]" src="form_7355.png"/></picture>
+\]" src="form_7149.png"/></picture>
 </p>
   <p class="formulaDsp">
-<picture><source srcset="form_7356_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \text{subject to } \|E\| \leq V_{\max}
-\]" src="form_7356.png"/></picture>
+\]" src="form_7150.png"/></picture>
 </p>
   <p class="formulaDsp">
-<picture><source srcset="form_7357_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7151_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \text{and } \nabla \cdot \boldsymbol{\sigma} + \mathbf{F} = \mathbf{0}
-\]" src="form_7357.png"/></picture>
+\]" src="form_7151.png"/></picture>
 </p>
 <p>The value of the objective function is calculated using a finite element method, where the solution is the displacements. This is placed inside of a nonlinear solver loop that solves for a vector denoting placement of material.</p>
 <p><a class="anchor" id="SolidIsotropicMaterialwithPenalization"></a></p><h3>Solid Isotropic Material with Penalization</h3>
-<p>In actual practice, we can only build objects in which the material is either present, or not present, at any given point &ndash; i.e., we would have an indicator function <picture><source srcset="form_7358_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho_E(\mathbf{x})\in \{0,1\}$" src="form_7358.png"/></picture> that describes the material-filled region and that we want to find through the optimization problem. In this case, the optimization problem becomes combinatorial, and very expensive to solve. Instead, we use an approach called Solid Isotropic Material with Penalization, or SIMP. <b>[Bendse2004]</b></p>
-<p>The SIMP method is based on an idea of allowing the material to exist in a location with a density <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture> between 0 and 1. A density of 0 suggests the material is not there, and it is not a part of the structure, while a density of 1 suggests the material is present. Values between 0 and 1 do not reflect a design we can create in the real-world, but allow us to turn the combinatorial problem into a continuous one. One then looks at density values <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture>, with the constraint that <picture><source srcset="form_7359_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0 &lt; \rho_{\min} \leq \rho \leq 1$" src="form_7359.png"/></picture>. The minimum value <picture><source srcset="form_7360_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho_{\min}$" src="form_7360.png"/></picture>, typically chosen to be around <picture><source srcset="form_2885_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-3}$" src="form_2885.png"/></picture>, avoids the possibility of having an infinite strain energy, but is small enough to provide accurate results.</p>
-<p>The straightforward application of the effect of this "density" on the elasticity of the media would be to simply multiply the stiffness tensor <picture><source srcset="form_7361_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}_0$" src="form_7361.png"/></picture> of the medium by the given density, that is, <picture><source srcset="form_7362_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = \rho \mathbf{C}_0$" src="form_7362.png"/></picture>. However, this approach often gives optimal solutions where density values are far from both 0 and 1. As one wants to find a real-world solution, meaning the material either is present or it is not, a penalty is applied to these in-between values. A simple and effective way to do this is to multiply the stiffness tensor by the density raised to some integer power penalty parameter <picture><source srcset="form_93_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_93.png"/></picture>, so that <picture><source srcset="form_7364_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = \rho^p \mathbf{C}_0$" src="form_7364.png"/></picture>. This makes density values farther away from 0 or 1 less effective. It has been shown that using <picture><source srcset="form_5695_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p=3$" src="form_5695.png"/></picture> is sufficiently high to create 'black-and-white' solutions: that is, one gets optimal solutions in which material is either present or not present at all points.</p>
+<p>In actual practice, we can only build objects in which the material is either present, or not present, at any given point &ndash; i.e., we would have an indicator function <picture><source srcset="form_7152_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho_E(\mathbf{x})\in \{0,1\}$" src="form_7152.png"/></picture> that describes the material-filled region and that we want to find through the optimization problem. In this case, the optimization problem becomes combinatorial, and very expensive to solve. Instead, we use an approach called Solid Isotropic Material with Penalization, or SIMP. <b>[Bendse2004]</b></p>
+<p>The SIMP method is based on an idea of allowing the material to exist in a location with a density <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture> between 0 and 1. A density of 0 suggests the material is not there, and it is not a part of the structure, while a density of 1 suggests the material is present. Values between 0 and 1 do not reflect a design we can create in the real-world, but allow us to turn the combinatorial problem into a continuous one. One then looks at density values <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture>, with the constraint that <picture><source srcset="form_7153_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0 &lt; \rho_{\min} \leq \rho \leq 1$" src="form_7153.png"/></picture>. The minimum value <picture><source srcset="form_7154_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho_{\min}$" src="form_7154.png"/></picture>, typically chosen to be around <picture><source srcset="form_2926_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$10^{-3}$" src="form_2926.png"/></picture>, avoids the possibility of having an infinite strain energy, but is small enough to provide accurate results.</p>
+<p>The straightforward application of the effect of this "density" on the elasticity of the media would be to simply multiply the stiffness tensor <picture><source srcset="form_7155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C}_0$" src="form_7155.png"/></picture> of the medium by the given density, that is, <picture><source srcset="form_7156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = \rho \mathbf{C}_0$" src="form_7156.png"/></picture>. However, this approach often gives optimal solutions where density values are far from both 0 and 1. As one wants to find a real-world solution, meaning the material either is present or it is not, a penalty is applied to these in-between values. A simple and effective way to do this is to multiply the stiffness tensor by the density raised to some integer power penalty parameter <picture><source srcset="form_200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p$" src="form_200.png"/></picture>, so that <picture><source srcset="form_7157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{C} = \rho^p \mathbf{C}_0$" src="form_7157.png"/></picture>. This makes density values farther away from 0 or 1 less effective. It has been shown that using <picture><source srcset="form_5595_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$p=3$" src="form_5595.png"/></picture> is sufficiently high to create 'black-and-white' solutions: that is, one gets optimal solutions in which material is either present or not present at all points.</p>
 <p>More material should always provide a structure with a lower strain energy, and so the inequality constraint can be viewed as an equality where the total volume used is the maximum volume.</p>
 <p>Using this density idea also allows us to reframe the volume constraint on the optimization problem. Use of SIMP then turns the optimization problem into the following:</p>
 <p class="formulaDsp">
-<picture><source srcset="form_7366_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \text{minimize  } \int_\Omega \frac{1}{2}\boldsymbol{\sigma}(\rho) : \boldsymbol{\varepsilon}(\rho) d\Omega
-\]" src="form_7366.png"/></picture>
+\]" src="form_7158.png"/></picture>
 </p>
   <p class="formulaDsp">
-<picture><source srcset="form_7367_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \text{subject to } \int_\Omega \rho(x) d\Omega= V_{\max},
-\]" src="form_7367.png"/></picture>
+\]" src="form_7159.png"/></picture>
 </p>
   <p class="formulaDsp">
-<picture><source srcset="form_7368_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   0&lt;\rho_{\min}\leq \rho(x) \leq 1,
-\]" src="form_7368.png"/></picture>
+\]" src="form_7160.png"/></picture>
 </p>
   <p class="formulaDsp">
-<picture><source srcset="form_7369_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 
   \nabla \cdot \boldsymbol{\sigma}(\rho) + \mathbf{F} = 0 \quad \text{on } \Omega
-\]" src="form_7369.png"/></picture>
+\]" src="form_7161.png"/></picture>
 </p>
-<p> The final constraint, the balance of linear momentum (which we will refer to as the elasticity equation), gives a method for finding <picture><source srcset="form_793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\sigma}$" src="form_793.png"/></picture> and <picture><source srcset="form_792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\varepsilon}$" src="form_792.png"/></picture> given the density <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture>.</p>
+<p> The final constraint, the balance of linear momentum (which we will refer to as the elasticity equation), gives a method for finding <picture><source srcset="form_793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\sigma}$" src="form_793.png"/></picture> and <picture><source srcset="form_792_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\varepsilon}$" src="form_792.png"/></picture> given the density <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture>.</p>
 <p><a class="anchor" id="ElasticityEquation"></a></p><h3>Elasticity Equation</h3>
 <p>The elasticity equation in the time independent limit reads  </p><p class="formulaDsp">
-<picture><source srcset="form_7370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \nabla \cdot \boldsymbol{\sigma} + \mathbf{F} = \mathbf{0} .
-\]" src="form_7370.png"/></picture>
+\]" src="form_7162.png"/></picture>
 </p>
 <p> In the situations we will care about, we will assume that the medium has a linear material response and in that case, we have that  </p><p class="formulaDsp">
-<picture><source srcset="form_7371_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \boldsymbol{\sigma} = \mathbf{C} : \boldsymbol{\varepsilon} = \rho^p \mathbf{C}_0 : \boldsymbol{\varepsilon}(\mathbf{u})
    = \rho^p \mathbf{C}_0 : \left[\frac{1}{2} (\nabla \mathbf{u} + (\nabla \mathbf{u})^T) \right] .
-\]" src="form_7371.png"/></picture>
+\]" src="form_7163.png"/></picture>
 </p>
-<p> In everything we will do below, we will always consider the displacement field <picture><source srcset="form_2520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2520.png"/></picture> as the only solution variable, rather than considering <picture><source srcset="form_2520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2520.png"/></picture> and <picture><source srcset="form_793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\sigma}$" src="form_793.png"/></picture> as solution variables (as is done in mixed formulations).</p>
+<p> In everything we will do below, we will always consider the displacement field <picture><source srcset="form_2515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2515.png"/></picture> as the only solution variable, rather than considering <picture><source srcset="form_2515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{u}$" src="form_2515.png"/></picture> and <picture><source srcset="form_793_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{\sigma}$" src="form_793.png"/></picture> as solution variables (as is done in mixed formulations).</p>
 <p>Furthermore, we will make the assumption that the material is linear isotropic, in which case the stress-strain tensor can be expressed in terms of the Lam&eacute; parameters <picture><source srcset="form_322_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda,\mu$" src="form_322.png"/></picture> such that  </p><p class="formulaDsp">
-<picture><source srcset="form_7372_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align}
+<picture><source srcset="form_7164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align}
   \boldsymbol{\sigma} &amp;= \rho^p (\lambda \text{tr}(\boldsymbol{\varepsilon}) \mathbf{I} + 2 \mu \boldsymbol{\varepsilon}) , \\
   \sigma_{i,j} &amp;= \rho^p (\lambda \varepsilon_{k,k} \delta_{i,j} + 2 \mu \varepsilon_{i,j}) .
-\end{align}" src="form_7372.png"/></picture>
+\end{align}" src="form_7164.png"/></picture>
 </p>
 <p> See <a class="el" href="step_8.html">step-8</a> for how this transformation works.</p>
 <p>Integrating the objective function by parts gives  </p><p class="formulaDsp">
-<picture><source srcset="form_7373_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \int_\Omega \boldsymbol{\sigma}(\rho) : (\nabla \mathbf{u} + (\nabla \mathbf{u}))^T  d\Omega+
   \int_\Omega (\nabla \cdot \boldsymbol{\sigma}(\rho)) \cdot \mathbf{u}  d\Omega=
   \int_{\partial \Omega} \mathbf{t} \cdot \mathbf{u} d\partial\Omega ,
-\]" src="form_7373.png"/></picture>
+\]" src="form_7165.png"/></picture>
 </p>
 <p> into which the linear elasticity equation can then be substituted, giving  </p><p class="formulaDsp">
-<picture><source srcset="form_7374_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \int_\Omega \boldsymbol{\sigma}(\rho) : (\nabla \mathbf{u} + (\nabla \mathbf{u})^T) d\Omega =
   \int_\Omega \mathbf{F}\cdot \mathbf{u} d\Omega+
   \int_{\partial \Omega} \mathbf{t} \cdot \mathbf{u} d\partial\Omega .
-\]" src="form_7374.png"/></picture>
+\]" src="form_7166.png"/></picture>
 </p>
 <p> Because we are assuming no body forces, this simplifies further to  </p><p class="formulaDsp">
-<picture><source srcset="form_7375_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7167_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \int_\Omega \boldsymbol{\sigma}(\rho) : (\nabla \mathbf{u} + (\nabla \mathbf{u})^T) d\Omega
   = \int_{\partial \Omega} \mathbf{t} \cdot \mathbf{u} d\partial\Omega,
-\]" src="form_7375.png"/></picture>
+\]" src="form_7167.png"/></picture>
 </p>
 <p> which is the final form of the governing equation that we'll be considering from this point forward.</p>
 <p><a class="anchor" id="Makingthesolutionmeshindependent"></a></p><h3>Making the solution mesh-independent</h3>
 <p>Typically, the solutions to topology optimization problems are mesh-dependent, and as such the problem is ill-posed. This is because fractal structures are often formed as the mesh is refined further. As the mesh gains resolution, the optimal solution typically gains smaller and smaller structures. There are a few competing workarounds to this issue, but the most popular for first order optimization is the sensitivity filter, while second order optimization methods tend to prefer use of a density filter.</p>
-<p>As the filters affect the gradient and Hessian of the strain energy (i.e., the objective function), the choice of filter has an effect on the solution of the problem. The density filter as part of a second order method works by introducing an unfiltered density, which we refer to as <picture><source srcset="form_7376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varrho$" src="form_7376.png"/></picture>, and then requiring that the density be a convolution of the unfiltered density:  </p><p class="formulaDsp">
-<picture><source srcset="form_7377_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>As the filters affect the gradient and Hessian of the strain energy (i.e., the objective function), the choice of filter has an effect on the solution of the problem. The density filter as part of a second order method works by introducing an unfiltered density, which we refer to as <picture><source srcset="form_7168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varrho$" src="form_7168.png"/></picture>, and then requiring that the density be a convolution of the unfiltered density:  </p><p class="formulaDsp">
+<picture><source srcset="form_7169_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \rho = H(\varrho).
-\]" src="form_7377.png"/></picture>
+\]" src="form_7169.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_1769_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H$" src="form_1769.png"/></picture> is an operator so that <picture><source srcset="form_7378_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho(\mathbf{x})$" src="form_7378.png"/></picture> is some kind of average of the values of <picture><source srcset="form_7376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varrho$" src="form_7376.png"/></picture> in the area around <picture><source srcset="form_247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}$" src="form_247.png"/></picture> &ndash; i.e., it is a smoothed version of <picture><source srcset="form_7376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varrho$" src="form_7376.png"/></picture>.</p>
+<p> Here, <picture><source srcset="form_1768_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H$" src="form_1768.png"/></picture> is an operator so that <picture><source srcset="form_7170_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho(\mathbf{x})$" src="form_7170.png"/></picture> is some kind of average of the values of <picture><source srcset="form_7168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varrho$" src="form_7168.png"/></picture> in the area around <picture><source srcset="form_247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}$" src="form_247.png"/></picture> &ndash; i.e., it is a smoothed version of <picture><source srcset="form_7168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varrho$" src="form_7168.png"/></picture>.</p>
 <p>This prevents checkerboarding; the radius of the filter allows the user to define an effective minimal beam width for the optimal structures we seek to find.</p>
 <div style="text-align:center;"> <img src="https://www.dealii.org/images/steps/developer/step-79.checkerboard.png" alt="Checkerboarding occurring in an MBB Beam" class="inline"/> </div><p><a class="anchor" id="CompleteProblemFormulation"></a></p><h3>Complete Problem Formulation</h3>
 <p>The minimization problem is now  </p><p class="formulaDsp">
-<picture><source srcset="form_7379_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7171_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \min_{\rho,\varrho,\mathbf{u}} \int_{\partial\Omega} \mathbf{u} \cdot \mathbf{t} d\partial\Omega
-\]" src="form_7379.png"/></picture>
+\]" src="form_7171.png"/></picture>
 </p>
   <p class="formulaDsp">
-<picture><source srcset="form_7380_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7172_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \text{subject to   } \rho = H(\varrho)
-\]" src="form_7380.png"/></picture>
+\]" src="form_7172.png"/></picture>
 </p>
   <p class="formulaDsp">
-<picture><source srcset="form_7381_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7173_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \int_\Omega \rho^p \left(\frac{\mu}{2}\left(\boldsymbol{\varepsilon}(\mathbf{v}):
   \boldsymbol{\varepsilon}(\mathbf{u})) \right) + \lambda \left( \nabla \cdot \mathbf{u} \nabla
   \cdot \mathbf{v} \right)  \right) d\Omega = \int_{\partial \Omega} \mathbf{v} \cdot
   \mathbf{t} d\partial\Omega
-\]" src="form_7381.png"/></picture>
+\]" src="form_7173.png"/></picture>
 </p>
   <p class="formulaDsp">
-<picture><source srcset="form_7382_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \int_\Omega \rho d\Omega= V
-\]" src="form_7382.png"/></picture>
+\]" src="form_7174.png"/></picture>
 </p>
   <p class="formulaDsp">
-<picture><source srcset="form_7383_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   0\leq \varrho \leq 1
-\]" src="form_7383.png"/></picture>
+\]" src="form_7175.png"/></picture>
 </p>
-<p>The inequality constraints are dealt with by first introducing slack variables, and second using log barriers to ensure that we obtain an interior-point method. The penalty parameter is going to be <picture><source srcset="form_191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\alpha$" src="form_191.png"/></picture>, and the following slack variables are </p><ol>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_8.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_8.html	2024-03-17 21:57:49.943274444 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_8.html	2024-03-17 21:57:49.943274444 +0000
@@ -127,51 +127,51 @@
 <dl class="section note"><dt>Note</dt><dd>The material presented here is also discussed in <a href="http://www.math.colostate.edu/~bangerth/videos.676.19.html">video lecture 19</a>. (All video lectures are also available <a href="http://www.math.colostate.edu/~bangerth/videos.html">here</a>.)</dd></dl>
 <p>In this tutorial program we will want to solve the <a href="https://en.wikipedia.org/wiki/Linear_elasticity">elastic equations</a>. They are an extension to Laplace's equation with a vector-valued solution that describes the displacement in each space direction of a rigid body which is subject to a force. Of course, the force is also vector-valued, meaning that in each point it has a direction and an absolute value.</p>
 <p>One can write the elasticity equations in a number of ways. The one that shows the symmetry with the Laplace equation in the most obvious way is to write it as  </p><p class="formulaDsp">
-<picture><source srcset="form_7143_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7239_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   -
   \text{div}\,
   ({\mathbf C} \nabla \mathbf{u})
   =
   \mathbf f,
-\]" src="form_7143.png"/></picture>
+\]" src="form_7239.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> is the vector-valued displacement at each point, <picture><source srcset="form_1554_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf f$" src="form_1554.png"/></picture> the force, and <picture><source srcset="form_7144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf C}$" src="form_7144.png"/></picture> is a rank-4 tensor (i.e., it has four indices) that encodes the stress-strain relationship &ndash; in essence, it represents the <a href="https://en.wikipedia.org/wiki/Hooke%27s_law">"spring constant"</a> in Hookes law that relates the displacement to the forces. <picture><source srcset="form_7144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf C}$" src="form_7144.png"/></picture> will, in many cases, depend on <picture><source srcset="form_216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_216.png"/></picture> if the body whose deformation we want to simulate is composed of different materials.</p>
+<p> where <picture><source srcset="form_320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf u$" src="form_320.png"/></picture> is the vector-valued displacement at each point, <picture><source srcset="form_1552_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf f$" src="form_1552.png"/></picture> the force, and <picture><source srcset="form_7240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf C}$" src="form_7240.png"/></picture> is a rank-4 tensor (i.e., it has four indices) that encodes the stress-strain relationship &ndash; in essence, it represents the <a href="https://en.wikipedia.org/wiki/Hooke%27s_law">"spring constant"</a> in Hookes law that relates the displacement to the forces. <picture><source srcset="form_7240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf C}$" src="form_7240.png"/></picture> will, in many cases, depend on <picture><source srcset="form_190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x$" src="form_190.png"/></picture> if the body whose deformation we want to simulate is composed of different materials.</p>
 <p>While the form of the equations above is correct, it is not the way they are usually derived. In truth, the gradient of the displacement <picture><source srcset="form_325_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\mathbf u$" src="form_325.png"/></picture> (a matrix) has no physical meaning whereas its symmetrized version,  </p><p class="formulaDsp">
-<picture><source srcset="form_7145_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7241_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \varepsilon(\mathbf u)_{kl} =\frac{1}{2}(\partial_k u_l + \partial_l u_k),
-\]" src="form_7145.png"/></picture>
+\]" src="form_7241.png"/></picture>
 </p>
-<p> does and is typically called the "strain". (Here and in the following, <picture><source srcset="form_7146_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_k=\frac{\partial}{\partial x_k}$" src="form_7146.png"/></picture>. We will also use the <a href="https://en.wikipedia.org/wiki/Einstein_notation">Einstein summation convention</a> that whenever the same index appears twice in an equation, summation over this index is implied; we will, however, not distinguish between upper and lower indices.) With this definition of the strain, the elasticity equations then read as  </p><p class="formulaDsp">
-<picture><source srcset="form_7147_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> does and is typically called the "strain". (Here and in the following, <picture><source srcset="form_7242_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_k=\frac{\partial}{\partial x_k}$" src="form_7242.png"/></picture>. We will also use the <a href="https://en.wikipedia.org/wiki/Einstein_notation">Einstein summation convention</a> that whenever the same index appears twice in an equation, summation over this index is implied; we will, however, not distinguish between upper and lower indices.) With this definition of the strain, the elasticity equations then read as  </p><p class="formulaDsp">
+<picture><source srcset="form_7243_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   -
   \text{div}\,
   ({\mathbf C} \varepsilon(\mathbf u))
   =
   \mathbf f,
-\]" src="form_7147.png"/></picture>
+\]" src="form_7243.png"/></picture>
 </p>
-<p> which you can think of as the more natural generalization of the Laplace equation to vector-valued problems. (The form shown first is equivalent to this form because the tensor <picture><source srcset="form_7144_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf C}$" src="form_7144.png"/></picture> has certain symmetries, namely that <picture><source srcset="form_7148_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C_{ijkl}=C_{ijlk}$" src="form_7148.png"/></picture>, and consequently <picture><source srcset="form_7149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf C} \varepsilon(\mathbf u)_{kl}
-= {\mathbf C} \nabla\mathbf u$" src="form_7149.png"/></picture>.)</p>
+<p> which you can think of as the more natural generalization of the Laplace equation to vector-valued problems. (The form shown first is equivalent to this form because the tensor <picture><source srcset="form_7240_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf C}$" src="form_7240.png"/></picture> has certain symmetries, namely that <picture><source srcset="form_7244_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C_{ijkl}=C_{ijlk}$" src="form_7244.png"/></picture>, and consequently <picture><source srcset="form_7245_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf C} \varepsilon(\mathbf u)_{kl}
+= {\mathbf C} \nabla\mathbf u$" src="form_7245.png"/></picture>.)</p>
 <p>One can of course alternatively write these equations in component form:  </p><p class="formulaDsp">
-<picture><source srcset="form_7150_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7246_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   -
   \partial_j (c_{ijkl} \varepsilon_{kl})
   =
   f_i,
   \qquad
   i=1\ldots d.
-\]" src="form_7150.png"/></picture>
+\]" src="form_7246.png"/></picture>
 </p>
-<p>In many cases, one knows that the material under consideration is isotropic, in which case by introduction of the two coefficients <picture><source srcset="form_1034_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_1034.png"/></picture> and <picture><source srcset="form_3066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_3066.png"/></picture> the coefficient tensor reduces to  </p><p class="formulaDsp">
-<picture><source srcset="form_7151_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>In many cases, one knows that the material under consideration is isotropic, in which case by introduction of the two coefficients <picture><source srcset="form_988_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda$" src="form_988.png"/></picture> and <picture><source srcset="form_2994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_2994.png"/></picture> the coefficient tensor reduces to  </p><p class="formulaDsp">
+<picture><source srcset="form_7247_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   c_{ijkl}
   =
   \lambda \delta_{ij} \delta_{kl} +
   \mu (\delta_{ik} \delta_{jl} + \delta_{il} \delta_{jk}).
-\]" src="form_7151.png"/></picture>
+\]" src="form_7247.png"/></picture>
 </p>
 <p>The elastic equations can then be rewritten in much simpler a form:  </p><p class="formulaDsp">
-<picture><source srcset="form_7152_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7248_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
    -
    \nabla \lambda (\nabla\cdot {\mathbf u})
    -
@@ -180,10 +180,10 @@
    \nabla\cdot \mu (\nabla {\mathbf u})^T
    =
    {\mathbf f},
-\]" src="form_7152.png"/></picture>
+\]" src="form_7248.png"/></picture>
 </p>
 <p> and the respective bilinear form is then  </p><p class="formulaDsp">
-<picture><source srcset="form_7153_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   a({\mathbf u}, {\mathbf v}) =
   \left(
     \lambda \nabla\cdot {\mathbf u}, \nabla\cdot {\mathbf v}
@@ -198,10 +198,10 @@
   \left(
     \mu \partial_k u_l, \partial_l v_k
   \right)_\Omega,
-\]" src="form_7153.png"/></picture>
+\]" src="form_7249.png"/></picture>
 </p>
 <p> or also writing the first term a sum over components:  </p><p class="formulaDsp">
-<picture><source srcset="form_7154_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7250_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   a({\mathbf u}, {\mathbf v}) =
   \sum_{k,l}
   \left(
@@ -217,18 +217,18 @@
   \left(
     \mu \partial_k u_l, \partial_l v_k
   \right)_\Omega.
-\]" src="form_7154.png"/></picture>
+\]" src="form_7250.png"/></picture>
 </p>
-<dl class="section note"><dt>Note</dt><dd>As written, the equations above are generally considered to be the right description for the displacement of three-dimensional objects if the displacement is small and we can assume that <a href="http://en.wikipedia.org/wiki/Hookes_law">Hooke's law</a> is valid. In that case, the indices <picture><source srcset="form_7155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i,j,k,l$" src="form_7155.png"/></picture> above all run over the set <picture><source srcset="form_7156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{1,2,3\}$" src="form_7156.png"/></picture> (or, in the C++ source, over <picture><source srcset="form_7157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{0,1,2\}$" src="form_7157.png"/></picture>). However, as is, the program runs in 2d, and while the equations above also make mathematical sense in that case, they would only describe a truly two-dimensional solid. In particular, they are not the appropriate description of an <picture><source srcset="form_2818_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x-y$" src="form_2818.png"/></picture> cross-section of a body infinite in the <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> direction; this is in contrast to many other two-dimensional equations that can be obtained by assuming that the body has infinite extent in <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture>-direction and that the solution function does not depend on the <picture><source srcset="form_31_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_31.png"/></picture> coordinate. On the other hand, there are equations for two-dimensional models of elasticity; see for example the Wikipedia article on <a href="http://en.wikipedia.org/wiki/Infinitesimal_strain_theory#href_anchor">plane strain</a>, <a href="http://en.wikipedia.org/wiki/Antiplane_shear">antiplane shear</a> and <a href="http://en.wikipedia.org/wiki/Plane_stress#href_anchor">plan stress</a>.</dd></dl>
+<dl class="section note"><dt>Note</dt><dd>As written, the equations above are generally considered to be the right description for the displacement of three-dimensional objects if the displacement is small and we can assume that <a href="http://en.wikipedia.org/wiki/Hookes_law">Hooke's law</a> is valid. In that case, the indices <picture><source srcset="form_7251_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i,j,k,l$" src="form_7251.png"/></picture> above all run over the set <picture><source srcset="form_7252_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{1,2,3\}$" src="form_7252.png"/></picture> (or, in the C++ source, over <picture><source srcset="form_7253_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{0,1,2\}$" src="form_7253.png"/></picture>). However, as is, the program runs in 2d, and while the equations above also make mathematical sense in that case, they would only describe a truly two-dimensional solid. In particular, they are not the appropriate description of an <picture><source srcset="form_2859_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x-y$" src="form_2859.png"/></picture> cross-section of a body infinite in the <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> direction; this is in contrast to many other two-dimensional equations that can be obtained by assuming that the body has infinite extent in <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture>-direction and that the solution function does not depend on the <picture><source srcset="form_44_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$z$" src="form_44.png"/></picture> coordinate. On the other hand, there are equations for two-dimensional models of elasticity; see for example the Wikipedia article on <a href="http://en.wikipedia.org/wiki/Infinitesimal_strain_theory#href_anchor">plane strain</a>, <a href="http://en.wikipedia.org/wiki/Antiplane_shear">antiplane shear</a> and <a href="http://en.wikipedia.org/wiki/Plane_stress#href_anchor">plan stress</a>.</dd></dl>
 <p>But let's get back to the original problem. How do we assemble the matrix for such an equation? A very long answer with a number of different alternatives is given in the documentation of the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> module. Historically, the solution shown below was the only one available in the early years of the library. It turns out to also be the fastest. On the other hand, if a few per cent of compute time do not matter, there are simpler and probably more intuitive ways to assemble the linear system than the one discussed below but that weren't available until several years after this tutorial program was first written; if you are interested in them, take a look at the <a class="el" href="group__vector__valued.html">Handling vector valued problems</a> module.</p>
-<p>Let us go back to the question of how to assemble the linear system. The first thing we need is some knowledge about how the shape functions work in the case of vector-valued finite elements. Basically, this comes down to the following: let <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> be the number of shape functions for the scalar finite element of which we build the vector element (for example, we will use bilinear functions for each component of the vector-valued finite element, so the scalar finite element is the <code><a class="el" href="classFE__Q.html">FE_Q(1)</a></code> element which we have used in previous examples already, and <picture><source srcset="form_613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=4$" src="form_613.png"/></picture> in two space dimensions). Further, let <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> be the number of shape functions for the vector element; in two space dimensions, we need <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> shape functions for each component of the vector, so <picture><source srcset="form_7158_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N=2n$" src="form_7158.png"/></picture>. Then, the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>th shape function of the vector element has the form  </p><p class="formulaDsp">
-<picture><source srcset="form_7159_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Let us go back to the question of how to assemble the linear system. The first thing we need is some knowledge about how the shape functions work in the case of vector-valued finite elements. Basically, this comes down to the following: let <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> be the number of shape functions for the scalar finite element of which we build the vector element (for example, we will use bilinear functions for each component of the vector-valued finite element, so the scalar finite element is the <code><a class="el" href="classFE__Q.html">FE_Q(1)</a></code> element which we have used in previous examples already, and <picture><source srcset="form_613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n=4$" src="form_613.png"/></picture> in two space dimensions). Further, let <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> be the number of shape functions for the vector element; in two space dimensions, we need <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> shape functions for each component of the vector, so <picture><source srcset="form_7254_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N=2n$" src="form_7254.png"/></picture>. Then, the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>th shape function of the vector element has the form  </p><p class="formulaDsp">
+<picture><source srcset="form_7255_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \Phi_i({\mathbf x}) = \varphi_{\text{base}(i)}({\mathbf x})\ {\mathbf e}_{\text{comp}(i)},
-\]" src="form_7159.png"/></picture>
+\]" src="form_7255.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_7160_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_l$" src="form_7160.png"/></picture> is the <picture><source srcset="form_1712_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l$" src="form_1712.png"/></picture>th unit vector, <picture><source srcset="form_7161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{comp}(i)$" src="form_7161.png"/></picture> is the function that tells us which component of <picture><source srcset="form_2332_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_i$" src="form_2332.png"/></picture> is the one that is nonzero (for each vector shape function, only one component is nonzero, and all others are zero). <picture><source srcset="form_7162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_{\text{base}(i)}(x)$" src="form_7162.png"/></picture> describes the space dependence of the shape function, which is taken to be the <picture><source srcset="form_7163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{base}(i)$" src="form_7163.png"/></picture>-th shape function of the scalar element. Of course, while <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture> is in the range <picture><source srcset="form_7164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0,\ldots,N-1$" src="form_7164.png"/></picture>, the functions <picture><source srcset="form_7161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{comp}(i)$" src="form_7161.png"/></picture> and <picture><source srcset="form_7163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{base}(i)$" src="form_7163.png"/></picture> have the ranges <picture><source srcset="form_7165_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0,1$" src="form_7165.png"/></picture> (in 2D) and <picture><source srcset="form_7166_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0,\ldots,n-1$" src="form_7166.png"/></picture>, respectively.</p>
+<p> where <picture><source srcset="form_7256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_l$" src="form_7256.png"/></picture> is the <picture><source srcset="form_1631_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l$" src="form_1631.png"/></picture>th unit vector, <picture><source srcset="form_7257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{comp}(i)$" src="form_7257.png"/></picture> is the function that tells us which component of <picture><source srcset="form_2397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_i$" src="form_2397.png"/></picture> is the one that is nonzero (for each vector shape function, only one component is nonzero, and all others are zero). <picture><source srcset="form_7258_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_{\text{base}(i)}(x)$" src="form_7258.png"/></picture> describes the space dependence of the shape function, which is taken to be the <picture><source srcset="form_7259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{base}(i)$" src="form_7259.png"/></picture>-th shape function of the scalar element. Of course, while <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture> is in the range <picture><source srcset="form_7260_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0,\ldots,N-1$" src="form_7260.png"/></picture>, the functions <picture><source srcset="form_7257_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{comp}(i)$" src="form_7257.png"/></picture> and <picture><source srcset="form_7259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{base}(i)$" src="form_7259.png"/></picture> have the ranges <picture><source srcset="form_7261_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0,1$" src="form_7261.png"/></picture> (in 2D) and <picture><source srcset="form_7262_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0,\ldots,n-1$" src="form_7262.png"/></picture>, respectively.</p>
 <p>For example (though this sequence of shape functions is not guaranteed, and you should not rely on it), the following layout could be used by the library:  </p><p class="formulaDsp">
-<picture><source srcset="form_7167_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<picture><source srcset="form_7263_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \Phi_0({\mathbf x}) &amp;=&amp;
   \left(\begin{array}{c}
     \varphi_0({\mathbf x}) \\ 0
@@ -249,44 +249,44 @@
     0 \\ \varphi_1({\mathbf x})
   \end{array}\right),
   \ldots
-\end{eqnarray*}" src="form_7167.png"/></picture>
+\end{eqnarray*}" src="form_7263.png"/></picture>
 </p>
 <p> where here  </p><p class="formulaDsp">
-<picture><source srcset="form_7168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \text{comp}(0)=0, \quad  \text{comp}(1)=1, \quad  \text{comp}(2)=0, \quad  \text{comp}(3)=1, \quad  \ldots
-\]" src="form_7168.png"/></picture>
+\]" src="form_7264.png"/></picture>
 </p>
   <p class="formulaDsp">
-<picture><source srcset="form_7169_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7265_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \text{base}(0)=0, \quad  \text{base}(1)=0, \quad  \text{base}(2)=1, \quad  \text{base}(3)=1, \quad  \ldots
-\]" src="form_7169.png"/></picture>
+\]" src="form_7265.png"/></picture>
 </p>
-<p>In all but very rare cases, you will not need to know which shape function <picture><source srcset="form_7170_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_{\text{base}(i)}$" src="form_7170.png"/></picture> of the scalar element belongs to a shape function <picture><source srcset="form_2332_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_i$" src="form_2332.png"/></picture> of the vector element. Let us therefore define  </p><p class="formulaDsp">
-<picture><source srcset="form_7171_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>In all but very rare cases, you will not need to know which shape function <picture><source srcset="form_7266_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_{\text{base}(i)}$" src="form_7266.png"/></picture> of the scalar element belongs to a shape function <picture><source srcset="form_2397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Phi_i$" src="form_2397.png"/></picture> of the vector element. Let us therefore define  </p><p class="formulaDsp">
+<picture><source srcset="form_7267_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \phi_i = \varphi_{\text{base}(i)}
-\]" src="form_7171.png"/></picture>
+\]" src="form_7267.png"/></picture>
 </p>
 <p> by which we can write the vector shape function as  </p><p class="formulaDsp">
-<picture><source srcset="form_7172_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7268_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \Phi_i({\mathbf x}) = \phi_{i}({\mathbf x})\ {\mathbf e}_{\text{comp}(i)}.
-\]" src="form_7172.png"/></picture>
+\]" src="form_7268.png"/></picture>
 </p>
-<p> You can now safely forget about the function <picture><source srcset="form_7163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{base}(i)$" src="form_7163.png"/></picture>, at least for the rest of this example program.</p>
+<p> You can now safely forget about the function <picture><source srcset="form_7259_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\text{base}(i)$" src="form_7259.png"/></picture>, at least for the rest of this example program.</p>
 <p>Now using this vector shape functions, we can write the discrete finite element solution as  </p><p class="formulaDsp">
-<picture><source srcset="form_7173_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7269_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   {\mathbf u}_h({\mathbf x}) =
   \sum_i \Phi_i({\mathbf x})\ U_i
-\]" src="form_7173.png"/></picture>
+\]" src="form_7269.png"/></picture>
 </p>
-<p> with scalar coefficients <picture><source srcset="form_1650_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i$" src="form_1650.png"/></picture>. If we define an analog function <picture><source srcset="form_7174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}_h$" src="form_7174.png"/></picture> as test function, we can write the discrete problem as follows: Find coefficients <picture><source srcset="form_1650_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i$" src="form_1650.png"/></picture> such that  </p><p class="formulaDsp">
-<picture><source srcset="form_7175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> with scalar coefficients <picture><source srcset="form_1653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i$" src="form_1653.png"/></picture>. If we define an analog function <picture><source srcset="form_7270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}_h$" src="form_7270.png"/></picture> as test function, we can write the discrete problem as follows: Find coefficients <picture><source srcset="form_1653_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_i$" src="form_1653.png"/></picture> such that  </p><p class="formulaDsp">
+<picture><source srcset="form_7271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   a({\mathbf u}_h, {\mathbf v}_h) = ({\mathbf f}, {\mathbf v}_h)
   \qquad
   \forall {\mathbf v}_h.
-\]" src="form_7175.png"/></picture>
+\]" src="form_7271.png"/></picture>
 </p>
-<p>If we insert the definition of the bilinear form and the representation of <picture><source srcset="form_7176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u}_h$" src="form_7176.png"/></picture> and <picture><source srcset="form_7174_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}_h$" src="form_7174.png"/></picture> into this formula:  </p><p class="formulaDsp">
-<picture><source srcset="form_7177_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
+<p>If we insert the definition of the bilinear form and the representation of <picture><source srcset="form_7272_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf u}_h$" src="form_7272.png"/></picture> and <picture><source srcset="form_7270_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf v}_h$" src="form_7270.png"/></picture> into this formula:  </p><p class="formulaDsp">
+<picture><source srcset="form_7273_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \sum_{i,j}
     U_i V_j
   \sum_{k,l}
@@ -311,11 +311,11 @@
     f_l,
     (\Phi_j)_l
   \right)_\Omega.
-\end{eqnarray*}" src="form_7177.png"/></picture>
+\end{eqnarray*}" src="form_7273.png"/></picture>
 </p>
-<p> We note that here and in the following, the indices <picture><source srcset="form_7178_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k,l$" src="form_7178.png"/></picture> run over spatial directions, i.e. <picture><source srcset="form_7179_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0\le k,l &lt; d$" src="form_7179.png"/></picture>, and that indices <picture><source srcset="form_795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i,j$" src="form_795.png"/></picture> run over degrees of freedom.</p>
+<p> We note that here and in the following, the indices <picture><source srcset="form_7274_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k,l$" src="form_7274.png"/></picture> run over spatial directions, i.e. <picture><source srcset="form_7275_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0\le k,l &lt; d$" src="form_7275.png"/></picture>, and that indices <picture><source srcset="form_795_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i,j$" src="form_795.png"/></picture> run over degrees of freedom.</p>
 <p>The local <a class="el" href="DEALGlossary.html#href_anchor">stiffness matrix</a> on cell <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> therefore has the following entries:  </p><p class="formulaDsp">
-<picture><source srcset="form_7180_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7276_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   A^K_{ij}
   =
   \sum_{k,l}
/usr/share/doc/packages/dealii/doxygen/deal.II/step_81.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_81.html	2024-03-17 21:57:50.023274938 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_81.html	2024-03-17 21:57:50.027274962 +0000
@@ -147,8 +147,8 @@
 <p><a class="anchor" id="TimeHarmonicMaxwellsEquationswithinterfaceconditions"></a></p><h3>Time-Harmonic Maxwell's Equations with interface conditions</h3>
 <p>We start the discussion with a short derivation of the governing equations and some literature references.</p>
 <p><a class="anchor" id="DerivationoftimeharmonicMaxwellsequations"></a></p><h4>Derivation of time-harmonic Maxwell's equations</h4>
-<p>In two ( <picture><source srcset="form_6688_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=2$" src="form_6688.png"/></picture>) or three ( <picture><source srcset="form_4164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=3$" src="form_4164.png"/></picture>) spatial dimensions, the time evolution of an electromagnetic wave <picture><source srcset="form_7189_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{E},\mathbf{H})$" src="form_7189.png"/></picture> that consists of an electric field component <picture><source srcset="form_7190_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{E}(t,\mathbf{x})\;:\;\mathbb{R}\times\mathbb{R}^d\to\mathbb{R}^d$" src="form_7190.png"/></picture> and a magnetic field component <picture><source srcset="form_7191_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}(t,\mathbf{x})\;:\;\mathbb{R}\times\mathbb{R}^d\to\mathbb{R}^d$" src="form_7191.png"/></picture> is described by <a href="https://en.wikipedia.org/wiki/Maxwell%27s_equations">Maxwell's equations</a> <b>[Schwartz1972]</b>, <b>[Monk2003]</b> :  </p><p class="formulaDsp">
-<picture><source srcset="form_7192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>In two ( <picture><source srcset="form_6640_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=2$" src="form_6640.png"/></picture>) or three ( <picture><source srcset="form_4271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=3$" src="form_4271.png"/></picture>) spatial dimensions, the time evolution of an electromagnetic wave <picture><source srcset="form_7285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(\mathbf{E},\mathbf{H})$" src="form_7285.png"/></picture> that consists of an electric field component <picture><source srcset="form_7286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{E}(t,\mathbf{x})\;:\;\mathbb{R}\times\mathbb{R}^d\to\mathbb{R}^d$" src="form_7286.png"/></picture> and a magnetic field component <picture><source srcset="form_7287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}(t,\mathbf{x})\;:\;\mathbb{R}\times\mathbb{R}^d\to\mathbb{R}^d$" src="form_7287.png"/></picture> is described by <a href="https://en.wikipedia.org/wiki/Maxwell%27s_equations">Maxwell's equations</a> <b>[Schwartz1972]</b>, <b>[Monk2003]</b> :  </p><p class="formulaDsp">
+<picture><source srcset="form_7288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \frac{\partial}{\partial t} \mathbf{H} + \nabla \times \mathbf{E} &amp;= -\mathbf{M}_a,
   \\
   \nabla \cdot \mathbf{H} &amp;= \rho_m,
@@ -156,23 +156,23 @@
   \frac{\partial}{\partial t} (\varepsilon\mathbf{E}) - \nabla\times(\mu^{-1}\mathbf{H}) &amp;= - \mathbf{J}_a,
   \\
   \nabla\cdot(\varepsilon\mathbf{E}) &amp;= \rho.
-\end{align*}" src="form_7192.png"/></picture>
+\end{align*}" src="form_7288.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_7193_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\times$" src="form_7193.png"/></picture> is the curl operator, <picture><source srcset="form_7194_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\cdot$" src="form_7194.png"/></picture> is the divergence operator, <picture><source srcset="form_6256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon$" src="form_6256.png"/></picture> is the <a href="https://en.wikipedia.org/wiki/Permittivity">electric permittivity</a>, <picture><source srcset="form_3066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_3066.png"/></picture> is the <a href="https://en.wikipedia.org/wiki/Permeability">magnetic permeability</a>, <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture> is the electric charge density, and <picture><source srcset="form_7195_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho_m$" src="form_7195.png"/></picture> is a corresponding (hypothetical) <a href="https://en.wikipedia.org/wiki/Magnetic_monopole">magnetic monopole</a> density. <picture><source srcset="form_7196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{J}_a$" src="form_7196.png"/></picture> and <picture><source srcset="form_7197_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{M}_a$" src="form_7197.png"/></picture> are the electric and magnetic flux densities which are related to their respective charge densities by the conservation equations <b>[Schwartz1972]</b>  </p><p class="formulaDsp">
-<picture><source srcset="form_7198_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> Here, <picture><source srcset="form_7289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\times$" src="form_7289.png"/></picture> is the curl operator, <picture><source srcset="form_7290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla\cdot$" src="form_7290.png"/></picture> is the divergence operator, <picture><source srcset="form_6249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon$" src="form_6249.png"/></picture> is the <a href="https://en.wikipedia.org/wiki/Permittivity">electric permittivity</a>, <picture><source srcset="form_2994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_2994.png"/></picture> is the <a href="https://en.wikipedia.org/wiki/Permeability">magnetic permeability</a>, <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture> is the electric charge density, and <picture><source srcset="form_7291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho_m$" src="form_7291.png"/></picture> is a corresponding (hypothetical) <a href="https://en.wikipedia.org/wiki/Magnetic_monopole">magnetic monopole</a> density. <picture><source srcset="form_7292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{J}_a$" src="form_7292.png"/></picture> and <picture><source srcset="form_7293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{M}_a$" src="form_7293.png"/></picture> are the electric and magnetic flux densities which are related to their respective charge densities by the conservation equations <b>[Schwartz1972]</b>  </p><p class="formulaDsp">
+<picture><source srcset="form_7294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \frac{\partial}{\partial t} \rho + \nabla\cdot\mathbf{J}_a = 0
 \text{ and }
 \frac{\partial}{\partial t} \rho_m + \nabla\cdot\mathbf{M}_a = 0.
-\]" src="form_7198.png"/></picture>
+\]" src="form_7294.png"/></picture>
 </p>
-<p>We now make the important assumption that the material parameters <picture><source srcset="form_6256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon$" src="form_6256.png"/></picture> and <picture><source srcset="form_3066_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_3066.png"/></picture> are time-independent and that the fields <picture><source srcset="form_2463_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{E}$" src="form_2463.png"/></picture> and <picture><source srcset="form_4176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}$" src="form_4176.png"/></picture>, the fluxes <picture><source srcset="form_7197_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{M}_a$" src="form_7197.png"/></picture> and <picture><source srcset="form_7196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{J}_a$" src="form_7196.png"/></picture>, as well as the densities <picture><source srcset="form_2946_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2946.png"/></picture> and <picture><source srcset="form_7195_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho_m$" src="form_7195.png"/></picture> are all <em>time-harmonic</em>, i.e., their time evolution is completely described by  </p><p class="formulaDsp">
-<picture><source srcset="form_7199_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>We now make the important assumption that the material parameters <picture><source srcset="form_6249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon$" src="form_6249.png"/></picture> and <picture><source srcset="form_2994_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu$" src="form_2994.png"/></picture> are time-independent and that the fields <picture><source srcset="form_2470_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{E}$" src="form_2470.png"/></picture> and <picture><source srcset="form_4279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}$" src="form_4279.png"/></picture>, the fluxes <picture><source srcset="form_7293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{M}_a$" src="form_7293.png"/></picture> and <picture><source srcset="form_7292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{J}_a$" src="form_7292.png"/></picture>, as well as the densities <picture><source srcset="form_2941_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho$" src="form_2941.png"/></picture> and <picture><source srcset="form_7291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\rho_m$" src="form_7291.png"/></picture> are all <em>time-harmonic</em>, i.e., their time evolution is completely described by  </p><p class="formulaDsp">
+<picture><source srcset="form_7295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf{F}(\mathbf{x},t) = \text{Re}\{e^{-i\omega
   t}\tilde{\mathbf{F}}(\mathbf{x})\},
-\]" src="form_7199.png"/></picture>
+\]" src="form_7295.png"/></picture>
 </p>
-<p> in which <picture><source srcset="form_3735_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega$" src="form_3735.png"/></picture> is the temporal angular frequency and <picture><source srcset="form_7200_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\mathbf{F}}(\mathbf{x})$" src="form_7200.png"/></picture> is a corresponding complex-valued vector field (or density). Inserting this ansatz into Maxwell's equations, substituting the charge conservation equations and some minor algebra then yields the so-called <em>time-harmonic</em> Maxwell's equations:  </p><p class="formulaDsp">
-<picture><source srcset="form_7201_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> in which <picture><source srcset="form_3839_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega$" src="form_3839.png"/></picture> is the temporal angular frequency and <picture><source srcset="form_7296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tilde{\mathbf{F}}(\mathbf{x})$" src="form_7296.png"/></picture> is a corresponding complex-valued vector field (or density). Inserting this ansatz into Maxwell's equations, substituting the charge conservation equations and some minor algebra then yields the so-called <em>time-harmonic</em> Maxwell's equations:  </p><p class="formulaDsp">
+<picture><source srcset="form_7297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   -i\omega \tilde{\mathbf{H}} + \nabla \times \tilde{\mathbf{E}} &amp;=
   -\tilde{\mathbf{M}}_a,
   \\
@@ -184,52 +184,52 @@
   \\
   \nabla\cdot(\varepsilon\tilde{\mathbf{E}}) &amp;=
   \frac{1}{i\omega}\nabla\cdot\tilde{\mathbf{J}}_a.
-\end{align*}" src="form_7201.png"/></picture>
+\end{align*}" src="form_7297.png"/></picture>
 </p>
-<p>For the sake of better readability we will now drop the tilde and simply write <picture><source srcset="form_7202_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{E}(\mathbf{x})$" src="form_7202.png"/></picture>, <picture><source srcset="form_7203_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}(\mathbf{x})$" src="form_7203.png"/></picture>, etc., when referring to the time-harmonic fields.</p>
+<p>For the sake of better readability we will now drop the tilde and simply write <picture><source srcset="form_7298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{E}(\mathbf{x})$" src="form_7298.png"/></picture>, <picture><source srcset="form_7299_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}(\mathbf{x})$" src="form_7299.png"/></picture>, etc., when referring to the time-harmonic fields.</p>
 <p><a class="anchor" id="Jumpconditionsonlowerdimensionalinterfaces"></a></p><h4>Jump conditions on lower dimensional interfaces</h4>
-<p>Graphene is a two-dimensional carbon allotrope with a <em>single</em> atom layer that is arranged in a honeycomb lattice <b>[Geim2004]</b>. Due to its atomic thickness it is an example of a so-called 2D material: Compared to the other spatial dimensions (where graphene samples can reach up to several centimeters) the atomistic thickness of graphene typically ranges around 2.5 ångstrom ( <picture><source srcset="form_7204_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2.5\times10^{-10}\text{m}$" src="form_7204.png"/></picture>). We will thus model graphene as a lower-dimensional interface <picture><source srcset="form_7205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma$" src="form_7205.png"/></picture> embedded into the computational domain <picture><source srcset="form_7206_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega\subset\mathbb{R}^d$" src="form_7206.png"/></picture>. More precisely, <picture><source srcset="form_7205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma$" src="form_7205.png"/></picture> is a two-dimensional sheet in three spatial dimensions, or a one-dimensional line in two spatial dimensions. The special electronic structure of graphene gives rise to a current density on the lower-dimensional interface that is modeled with an effective surface conductivity <picture><source srcset="form_7207_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^\Sigma$" src="form_7207.png"/></picture> obeying <a href="https://en.wikipedia.org/wiki/Ohm%27s_law">Ohm's Law</a>:  </p><p class="formulaDsp">
-<picture><source srcset="form_7208_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Graphene is a two-dimensional carbon allotrope with a <em>single</em> atom layer that is arranged in a honeycomb lattice <b>[Geim2004]</b>. Due to its atomic thickness it is an example of a so-called 2D material: Compared to the other spatial dimensions (where graphene samples can reach up to several centimeters) the atomistic thickness of graphene typically ranges around 2.5 ångstrom ( <picture><source srcset="form_7300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2.5\times10^{-10}\text{m}$" src="form_7300.png"/></picture>). We will thus model graphene as a lower-dimensional interface <picture><source srcset="form_7301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma$" src="form_7301.png"/></picture> embedded into the computational domain <picture><source srcset="form_7302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega\subset\mathbb{R}^d$" src="form_7302.png"/></picture>. More precisely, <picture><source srcset="form_7301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma$" src="form_7301.png"/></picture> is a two-dimensional sheet in three spatial dimensions, or a one-dimensional line in two spatial dimensions. The special electronic structure of graphene gives rise to a current density on the lower-dimensional interface that is modeled with an effective surface conductivity <picture><source srcset="form_7303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^\Sigma$" src="form_7303.png"/></picture> obeying <a href="https://en.wikipedia.org/wiki/Ohm%27s_law">Ohm's Law</a>:  </p><p class="formulaDsp">
+<picture><source srcset="form_7304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf{J}^\Sigma=\sigma^\Sigma\,\mathbf{E}_T
-\]" src="form_7208.png"/></picture>
+\]" src="form_7304.png"/></picture>
 </p>
-<p> in which <picture><source srcset="form_7209_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{J}^\Sigma$" src="form_7209.png"/></picture> is the surface current density, <picture><source srcset="form_7210_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{E}_T$" src="form_7210.png"/></picture> denotes the tangential part of the electric field <picture><source srcset="form_2463_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{E}$" src="form_2463.png"/></picture>, and <picture><source srcset="form_7207_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^\Sigma$" src="form_7207.png"/></picture> is an appropriately chosen surface conductivity that will be discussed in more detail below. The surface current density gives rise to a jump condition on <picture><source srcset="form_7205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma$" src="form_7205.png"/></picture> in the tangential component of the magnetic field. This is best seen by visualizing <a href="https://en.wikipedia.org/wiki/Amp%C3%A8re%27s_circuital_law">Ampère's law</a>:</p>
+<p> in which <picture><source srcset="form_7305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{J}^\Sigma$" src="form_7305.png"/></picture> is the surface current density, <picture><source srcset="form_7306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{E}_T$" src="form_7306.png"/></picture> denotes the tangential part of the electric field <picture><source srcset="form_2470_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{E}$" src="form_2470.png"/></picture>, and <picture><source srcset="form_7303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sigma^\Sigma$" src="form_7303.png"/></picture> is an appropriately chosen surface conductivity that will be discussed in more detail below. The surface current density gives rise to a jump condition on <picture><source srcset="form_7301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma$" src="form_7301.png"/></picture> in the tangential component of the magnetic field. This is best seen by visualizing <a href="https://en.wikipedia.org/wiki/Amp%C3%A8re%27s_circuital_law">Ampère's law</a>:</p>
 <p> 
 <p align="center">
   <img src="https://www.dealii.org/images/steps/developer/step-81-cartoon.png" alt="Visualization of Ohm's law and Ampère's law leading to a jump condition over the interface" height="200">
 </p>
 </p>
-<p>and then taking the limit of the upper and lower part of the line integral approaching the sheet. In contrast, the tangential part of the electric field is continuous. By fixing a unit normal <picture><source srcset="form_7211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\nu}$" src="form_7211.png"/></picture> on the hypersurface <picture><source srcset="form_7205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma$" src="form_7205.png"/></picture> both jump conditions are  </p><p class="formulaDsp">
-<picture><source srcset="form_7212_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p>and then taking the limit of the upper and lower part of the line integral approaching the sheet. In contrast, the tangential part of the electric field is continuous. By fixing a unit normal <picture><source srcset="form_7307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{\nu}$" src="form_7307.png"/></picture> on the hypersurface <picture><source srcset="form_7301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma$" src="form_7301.png"/></picture> both jump conditions are  </p><p class="formulaDsp">
+<picture><source srcset="form_7308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 \mathbf{\nu} \times \left[(\mu^{-1}\mathbf{H})^+ - (\mu^{-1}\mathbf{H})^-\right]|_{\Sigma}
 &amp;= \sigma^{\Sigma}\left[(\mathbf{\nu}\times \mathbf{E}\times \mathbf{\nu})\right]|_{\Sigma},
 \\
 \mathbf{\nu} \times \left[\mathbf{E}^+ - \mathbf{E}^-\right]|_{\Sigma} &amp;= 0.
-\end{align*}" src="form_7212.png"/></picture>
+\end{align*}" src="form_7308.png"/></picture>
 </p>
-<p> The notation <picture><source srcset="form_7213_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{F}^\pm$" src="form_7213.png"/></picture> indicates the limit values of the field when approaching the interface from above or below the interface: <picture><source srcset="form_7214_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{F}^\pm(\mathbf{x})=\lim_{\delta\to0,\delta&gt;0}\mathbf{F}(\mathbf{x}\pm\delta\mathbf{\nu})$" src="form_7214.png"/></picture>.</p>
+<p> The notation <picture><source srcset="form_7309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{F}^\pm$" src="form_7309.png"/></picture> indicates the limit values of the field when approaching the interface from above or below the interface: <picture><source srcset="form_7310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{F}^\pm(\mathbf{x})=\lim_{\delta\to0,\delta&gt;0}\mathbf{F}(\mathbf{x}\pm\delta\mathbf{\nu})$" src="form_7310.png"/></picture>.</p>
 <p><a class="anchor" id="Rescaling"></a></p><h4>Rescaling </h4>
 <p>We will be using a rescaled version of the Maxwell's equations described above. The rescaling has the following key differences: </p><ol>
 <li>
-Every length is rescaled by the free-space wavelength <picture><source srcset="form_7215_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\pi k^{-1}
-\dealcoloneq 2\pi(\omega\sqrt{\varepsilon_0\mu_0})^{-1}$" src="form_7215.png"/></picture>, in which <picture><source srcset="form_7216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon_0$" src="form_7216.png"/></picture> and <picture><source srcset="form_7217_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu_0$" src="form_7217.png"/></picture> denote the vacuum dielectric permittivity and magnetic permeability, respectively. </li>
+Every length is rescaled by the free-space wavelength <picture><source srcset="form_7311_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\pi k^{-1}
+\dealcoloneq 2\pi(\omega\sqrt{\varepsilon_0\mu_0})^{-1}$" src="form_7311.png"/></picture>, in which <picture><source srcset="form_7312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon_0$" src="form_7312.png"/></picture> and <picture><source srcset="form_7313_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu_0$" src="form_7313.png"/></picture> denote the vacuum dielectric permittivity and magnetic permeability, respectively. </li>
 <li>
-<picture><source srcset="form_2463_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{E}$" src="form_2463.png"/></picture>, <picture><source srcset="form_4176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}$" src="form_4176.png"/></picture>, <picture><source srcset="form_7196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{J}_a$" src="form_7196.png"/></picture>, <picture><source srcset="form_7197_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{M}_a$" src="form_7197.png"/></picture> are all rescaled by typical electric current strength <picture><source srcset="form_7218_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_0$" src="form_7218.png"/></picture>, i.e., the strength of the prescribed dipole source at location <picture><source srcset="form_1010_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_1010.png"/></picture> in the <picture><source srcset="form_655_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_i$" src="form_655.png"/></picture> direction in Cartesian coordinates (here, <picture><source srcset="form_180_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta$" src="form_180.png"/></picture> is the Dirac delta operator).  <p class="formulaDsp">
-<picture><source srcset="form_7219_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_2470_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{E}$" src="form_2470.png"/></picture>, <picture><source srcset="form_4279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}$" src="form_4279.png"/></picture>, <picture><source srcset="form_7292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{J}_a$" src="form_7292.png"/></picture>, <picture><source srcset="form_7293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{M}_a$" src="form_7293.png"/></picture> are all rescaled by typical electric current strength <picture><source srcset="form_7314_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_0$" src="form_7314.png"/></picture>, i.e., the strength of the prescribed dipole source at location <picture><source srcset="form_964_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a$" src="form_964.png"/></picture> in the <picture><source srcset="form_655_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e_i$" src="form_655.png"/></picture> direction in Cartesian coordinates (here, <picture><source srcset="form_154_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta$" src="form_154.png"/></picture> is the Dirac delta operator).  <p class="formulaDsp">
+<picture><source srcset="form_7315_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbf{J}_a = J_0 \mathbf{e}_i\delta(x-a)
-\]" src="form_7219.png"/></picture>
+\]" src="form_7315.png"/></picture>
 </p>
   </li>
 </ol>
-<p>Accordingly, our electric permittivity and magnetic permeability are rescaled by <picture><source srcset="form_7216_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon_0$" src="form_7216.png"/></picture> and <picture><source srcset="form_7217_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu_0$" src="form_7217.png"/></picture> as  </p><p class="formulaDsp">
-<picture><source srcset="form_7220_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Accordingly, our electric permittivity and magnetic permeability are rescaled by <picture><source srcset="form_7312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon_0$" src="form_7312.png"/></picture> and <picture><source srcset="form_7313_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu_0$" src="form_7313.png"/></picture> as  </p><p class="formulaDsp">
+<picture><source srcset="form_7316_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mu_r = \frac{1}{\mu_0}\mu
 \text{ and }
 \varepsilon_r = \frac{1}{\varepsilon_0}\varepsilon.
-\]" src="form_7220.png"/></picture>
+\]" src="form_7316.png"/></picture>
 </p>
-<p>We use the free-space wave number <picture><source srcset="form_7221_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_0 = \omega\sqrt{\varepsilon_0\mu_0}$" src="form_7221.png"/></picture> and the dipole strength, <picture><source srcset="form_7218_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_0$" src="form_7218.png"/></picture> to arrive at the following rescaling of the vector fields and coordinates:  </p><p class="formulaDsp">
-<picture><source srcset="form_7222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>We use the free-space wave number <picture><source srcset="form_7317_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k_0 = \omega\sqrt{\varepsilon_0\mu_0}$" src="form_7317.png"/></picture> and the dipole strength, <picture><source srcset="form_7314_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J_0$" src="form_7314.png"/></picture> to arrive at the following rescaling of the vector fields and coordinates:  </p><p class="formulaDsp">
+<picture><source srcset="form_7318_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \begin{align*}
 \hat{x} = k_0x, &amp;\qquad
 \hat{\nabla} = \frac{1}{k_0}\nabla,\\
@@ -238,15 +238,15 @@
 \hat{\mathbf{J}}_a = \frac{1}{J_0}\mathbf{J}_a,&amp;\qquad
 \hat{\mathbf{M}}_a = \frac{k_0}{\omega\mu_0 J_0}\mathbf{M}_a.
 \end{align*}
-\]" src="form_7222.png"/></picture>
+\]" src="form_7318.png"/></picture>
 </p>
 <p>Finally, the interface conductivity is rescaled as  </p><p class="formulaDsp">
-<picture><source srcset="form_7223_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7319_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \sigma^{\Sigma}_r = \sqrt{\frac{\mu_0}{\varepsilon_0}}\sigma^{\Sigma}.
-\]" src="form_7223.png"/></picture>
+\]" src="form_7319.png"/></picture>
 </p>
 <p>Accordingly, our rescaled equations are  </p><p class="formulaDsp">
-<picture><source srcset="form_7224_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   -i\mu_r \hat{\mathbf{H}} + \hat{\nabla} \times \hat{\mathbf{E}}
   &amp;= -\hat{\mathbf{M}}_a,
   \\
@@ -258,19 +258,19 @@
   \\
   \nabla\cdot(\varepsilon\mathbf{E}) &amp;= \frac{1}{i\omega}\hat{\nabla}
   \cdot\hat{\mathbf{J}}_a.
-\end{align*}" src="form_7224.png"/></picture>
+\end{align*}" src="form_7320.png"/></picture>
 </p>
 <p>We will omit the hat in further discussion for ease of notation.</p>
 <p><a class="anchor" id="VariationalStatement"></a></p><h4>Variational Statement</h4>
-<p>Let <picture><source srcset="form_7225_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega \subset \mathbb{R}^n$" src="form_7225.png"/></picture>, <picture><source srcset="form_7226_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(n = 2,3)$" src="form_7226.png"/></picture> be a simply connected and bounded domain with Lipschitz-continuous and piecewise smooth boundary, <picture><source srcset="form_3116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3116.png"/></picture>. Let <picture><source srcset="form_7205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma$" src="form_7205.png"/></picture> be an oriented, Lipschitz-continuous, piecewise smooth hypersurface. Fix a normal field <picture><source srcset="form_3078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3078.png"/></picture> on <picture><source srcset="form_7205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma$" src="form_7205.png"/></picture> and let <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture> denote the outer normal vector on <picture><source srcset="form_3116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3116.png"/></picture>.</p>
-<p>In order to arrive at the variational form, we will substitute for <picture><source srcset="form_4176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}$" src="form_4176.png"/></picture> in the first equation and obtain  </p><p class="formulaDsp">
-<picture><source srcset="form_7227_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Let <picture><source srcset="form_7321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega \subset \mathbb{R}^n$" src="form_7321.png"/></picture>, <picture><source srcset="form_7322_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(n = 2,3)$" src="form_7322.png"/></picture> be a simply connected and bounded domain with Lipschitz-continuous and piecewise smooth boundary, <picture><source srcset="form_3192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3192.png"/></picture>. Let <picture><source srcset="form_7301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma$" src="form_7301.png"/></picture> be an oriented, Lipschitz-continuous, piecewise smooth hypersurface. Fix a normal field <picture><source srcset="form_3006_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nu$" src="form_3006.png"/></picture> on <picture><source srcset="form_7301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma$" src="form_7301.png"/></picture> and let <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture> denote the outer normal vector on <picture><source srcset="form_3192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3192.png"/></picture>.</p>
+<p>In order to arrive at the variational form, we will substitute for <picture><source srcset="form_4279_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{H}$" src="form_4279.png"/></picture> in the first equation and obtain  </p><p class="formulaDsp">
+<picture><source srcset="form_7323_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \nabla \times (\mu_r^{-1}\nabla\times\mathbf{E}) - \varepsilon_r \mathbf{E}
 = i\mathbf{J}_a - \nabla\times (\mu_r^{-1}\mathbf{M}_a).
-\]" src="form_7227.png"/></picture>
+\]" src="form_7323.png"/></picture>
 </p>
-<p>Now, consider a smooth test function <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_149.png"/></picture> with complex conjugate <picture><source srcset="form_7228_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{\varphi}$" src="form_7228.png"/></picture>. Multiply both sides of the above equation by <picture><source srcset="form_7228_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{\varphi}$" src="form_7228.png"/></picture> and integrate by parts in <picture><source srcset="form_7229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega\backslash\Sigma$" src="form_7229.png"/></picture>.  </p><p class="formulaDsp">
-<picture><source srcset="form_7230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>Now, consider a smooth test function <picture><source srcset="form_123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi$" src="form_123.png"/></picture> with complex conjugate <picture><source srcset="form_7324_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{\varphi}$" src="form_7324.png"/></picture>. Multiply both sides of the above equation by <picture><source srcset="form_7324_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\bar{\varphi}$" src="form_7324.png"/></picture> and integrate by parts in <picture><source srcset="form_7325_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega\backslash\Sigma$" src="form_7325.png"/></picture>.  </p><p class="formulaDsp">
+<picture><source srcset="form_7326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_\Omega (\mu_r^{-1}\nabla\times\mathbf{E})\cdot (\nabla\times\bar{\varphi})\;\text{d}x
 - \int_\Omega \varepsilon_r\mathbf{E} \cdot \bar{\varphi}\;\text{d}x
 - \int_\Sigma [\nu \times (\mu_r^{-1}\nabla\times\mathbf{E} +
@@ -279,32 +279,32 @@
 \mu^{-1}\mathbf{M}_a)) \cdot \bar{\varphi}_T\;\text{d}o_x =
 i\int_\Omega \mathbf{J}_a \cdot \bar{\varphi}\;\text{d}x
 - \int_\Omega \mu_r^{-1}\mathbf{M}_a \cdot (\nabla \times \bar{\varphi})\;\text{d}x.
-\]" src="form_7230.png"/></picture>
+\]" src="form_7326.png"/></picture>
 </p>
-<p>We use the subscript <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture> to denote the tangential part of the given vector and <picture><source srcset="form_7231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\cdot]_{\Sigma}$" src="form_7231.png"/></picture> to denote a jump over <picture><source srcset="form_7205_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma$" src="form_7205.png"/></picture>, i.e.,  </p><p class="formulaDsp">
-<picture><source srcset="form_7232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>We use the subscript <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture> to denote the tangential part of the given vector and <picture><source srcset="form_7327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\cdot]_{\Sigma}$" src="form_7327.png"/></picture> to denote a jump over <picture><source srcset="form_7301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Sigma$" src="form_7301.png"/></picture>, i.e.,  </p><p class="formulaDsp">
+<picture><source srcset="form_7328_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbf{F}_T = (\mathbf{\nu}\times \mathbf{F})\times\mathbf{\nu}
   \text{ and }
   [\mathbf{F}]_{\Sigma}(\mathbf{x}) = \lim\limits_{s\searrow 0}(\mathbf{F}(\mathbf{x}+s\mathbf{\nu})-\mathbf{F}(\mathbf{x}-s\mathbf{\nu}))
-\]" src="form_7232.png"/></picture>
+\]" src="form_7328.png"/></picture>
 </p>
-<p> for <picture><source srcset="form_7233_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}\in \Sigma$" src="form_7233.png"/></picture>.</p>
-<p>For the computational domain <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, we introduce the absorbing boundary condition at <picture><source srcset="form_3116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3116.png"/></picture>, which is obtained by using a first-order approximation of the Silver-Müller radiation condition, truncated at <picture><source srcset="form_3116_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3116.png"/></picture> <b>[Monk2003]</b>.  </p><p class="formulaDsp">
-<picture><source srcset="form_7234_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> for <picture><source srcset="form_7329_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{x}\in \Sigma$" src="form_7329.png"/></picture>.</p>
+<p>For the computational domain <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, we introduce the absorbing boundary condition at <picture><source srcset="form_3192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3192.png"/></picture>, which is obtained by using a first-order approximation of the Silver-Müller radiation condition, truncated at <picture><source srcset="form_3192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial\Omega$" src="form_3192.png"/></picture> <b>[Monk2003]</b>.  </p><p class="formulaDsp">
+<picture><source srcset="form_7330_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \nu\times\mathbf{H}+\sqrt{\mu_r^{-1}\varepsilon_r}\mathbf{E}=0\qquad x\in\partial\Omega
-\]" src="form_7234.png"/></picture>
+\]" src="form_7330.png"/></picture>
 </p>
-<p> We assume that <picture><source srcset="form_7235_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu_r^{-1}$" src="form_7235.png"/></picture> and <picture><source srcset="form_6256_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon$" src="form_6256.png"/></picture> have well-defined square roots. In our numerical computation, we combine the above absorbing boundary condition with a PML.</p>
+<p> We assume that <picture><source srcset="form_7331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mu_r^{-1}$" src="form_7331.png"/></picture> and <picture><source srcset="form_6249_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varepsilon$" src="form_6249.png"/></picture> have well-defined square roots. In our numerical computation, we combine the above absorbing boundary condition with a PML.</p>
 <p>The jump condition can be expressed as a weak discontinuity as follows:  </p><p class="formulaDsp">
-<picture><source srcset="form_7236_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7332_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 [\nu \times (\mu_r^{-1}\nabla\times\mathbf{E} + \mu^{-1}\mathbf{M}_a)]_{\Sigma}
 = i\sigma_r^{\Sigma}\mathbf{E}_T,\qquad \text{on }\Sigma\\
/usr/share/doc/packages/dealii/doxygen/deal.II/step_82.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_82.html	2024-03-17 21:57:50.123275555 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_82.html	2024-03-17 21:57:50.127275580 +0000
@@ -150,31 +150,31 @@
 <p><a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p><a class="anchor" id="ProblemStatement"></a></p><h3>Problem Statement</h3>
 <p>In this example, we consider the <em>local discontinuous Galerkin</em> (LDG) method for approximating the solution to the bi-Laplacian problem,  </p><p class="formulaDsp">
-<picture><source srcset="form_7447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7381_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
 \Delta^2 u &amp; = f \quad \mbox{in } \Omega, \\
 \nabla u &amp; = \mathbf{0} \quad \mbox{on } \partial\Omega, \\
 u &amp; = 0 \quad \mbox{on } \partial\Omega,
-\end{align*}" src="form_7447.png"/></picture>
+\end{align*}" src="form_7381.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_7206_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega\subset\mathbb{R}^d$" src="form_7206.png"/></picture> <picture><source srcset="form_7448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(d=2,3)$" src="form_7448.png"/></picture> is an open bounded Lipschitz domain and <picture><source srcset="form_7449_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\in L^2(\Omega)$" src="form_7449.png"/></picture>. This is the same problem we have already considered in <a class="el" href="step_47.html">step-47</a>, but we will take here a different approach towards solving it: Rather than using continuous finite elements and the interior penalty method, we consider discontinuous finite elements and the local discontinuous Galerkin method defined using lifting operators.</p>
-<p>The weak formulation of this problem reads as follows: find <picture><source srcset="form_7450_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in H_0^2(\Omega)$" src="form_7450.png"/></picture> such that  </p><p class="formulaDsp">
-<picture><source srcset="form_7451_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_7302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega\subset\mathbb{R}^d$" src="form_7302.png"/></picture> <picture><source srcset="form_7382_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(d=2,3)$" src="form_7382.png"/></picture> is an open bounded Lipschitz domain and <picture><source srcset="form_7383_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f\in L^2(\Omega)$" src="form_7383.png"/></picture>. This is the same problem we have already considered in <a class="el" href="step_47.html">step-47</a>, but we will take here a different approach towards solving it: Rather than using continuous finite elements and the interior penalty method, we consider discontinuous finite elements and the local discontinuous Galerkin method defined using lifting operators.</p>
+<p>The weak formulation of this problem reads as follows: find <picture><source srcset="form_7384_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u\in H_0^2(\Omega)$" src="form_7384.png"/></picture> such that  </p><p class="formulaDsp">
+<picture><source srcset="form_7385_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_{\Omega}D^2u:D^2v = \int_{\Omega}fv \qquad \forall \, v\in H_0^2(\Omega),
-\]" src="form_7451.png"/></picture>
+\]" src="form_7385.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_7452_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D^2v$" src="form_7452.png"/></picture> denotes the Hessian of <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> and <picture><source srcset="form_7453_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_0^2(\Omega)\dealcoloneq\{v\in H^2(\Omega): \,\, v=0 \mbox{ and } \nabla v=\mathbf{0} \,\, \mbox{ on } \partial\Omega\}$" src="form_7453.png"/></picture>. Using so-called lifting operators as well as the Nitsche approach to impose the homogeneous Dirichlet boundary conditions, the LDG approximation of this problem consists of replacing the Hessians by discrete Hessians (see below) and adding penalty terms involving properly scaled jump terms. In particular, the versatility of the method described below is of particular interest for nonlinear problems or problems with intricate weak formulations for which the design of discrete algorithms is challenging.</p>
+<p> where <picture><source srcset="form_7386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D^2v$" src="form_7386.png"/></picture> denotes the Hessian of <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> and <picture><source srcset="form_7387_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_0^2(\Omega)\dealcoloneq\{v\in H^2(\Omega): \,\, v=0 \mbox{ and } \nabla v=\mathbf{0} \,\, \mbox{ on } \partial\Omega\}$" src="form_7387.png"/></picture>. Using so-called lifting operators as well as the Nitsche approach to impose the homogeneous Dirichlet boundary conditions, the LDG approximation of this problem consists of replacing the Hessians by discrete Hessians (see below) and adding penalty terms involving properly scaled jump terms. In particular, the versatility of the method described below is of particular interest for nonlinear problems or problems with intricate weak formulations for which the design of discrete algorithms is challenging.</p>
 <p><a class="anchor" id="Discretization"></a></p><h3>Discretization</h3>
 <p><a class="anchor" id="Finiteelementspaces"></a></p><h4>Finite element spaces</h4>
-<p>For <picture><source srcset="form_7454_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h&gt;0$" src="form_7454.png"/></picture>, let <picture><source srcset="form_4024_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{T}_h$" src="form_4024.png"/></picture> be a partition of <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> into quadrilateral (hexahedral if <picture><source srcset="form_4164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=3$" src="form_4164.png"/></picture>) elements <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> of diameter <picture><source srcset="form_7455_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_{K}\leq h$" src="form_7455.png"/></picture> and let <picture><source srcset="form_7456_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{E}_h=\mathcal{E}_h^0\cup\mathcal{E}_h^b$" src="form_7456.png"/></picture> denote the set of (interior and boundary) faces. We restrict the discussion to conforming subdivisions to avoid technicalities already addressed in previous tutorials. The diameter of <picture><source srcset="form_7457_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e \in \mathcal{E}_h$" src="form_7457.png"/></picture> is denoted <picture><source srcset="form_7458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_e$" src="form_7458.png"/></picture>. For any integer <picture><source srcset="form_6409_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k\ge 2$" src="form_6409.png"/></picture>, we introduce the (discontinuous) finite element space  </p><p class="formulaDsp">
-<picture><source srcset="form_7459_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>For <picture><source srcset="form_7388_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h&gt;0$" src="form_7388.png"/></picture>, let <picture><source srcset="form_4457_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{T}_h$" src="form_4457.png"/></picture> be a partition of <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> into quadrilateral (hexahedral if <picture><source srcset="form_4271_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=3$" src="form_4271.png"/></picture>) elements <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> of diameter <picture><source srcset="form_7389_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_{K}\leq h$" src="form_7389.png"/></picture> and let <picture><source srcset="form_7390_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{E}_h=\mathcal{E}_h^0\cup\mathcal{E}_h^b$" src="form_7390.png"/></picture> denote the set of (interior and boundary) faces. We restrict the discussion to conforming subdivisions to avoid technicalities already addressed in previous tutorials. The diameter of <picture><source srcset="form_7391_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e \in \mathcal{E}_h$" src="form_7391.png"/></picture> is denoted <picture><source srcset="form_7392_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_e$" src="form_7392.png"/></picture>. For any integer <picture><source srcset="form_6726_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$k\ge 2$" src="form_6726.png"/></picture>, we introduce the (discontinuous) finite element space  </p><p class="formulaDsp">
+<picture><source srcset="form_7393_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \mathbb{V}_h\dealcoloneq\left\{v_h\in L^2(\Omega): \,\, v_h|_K\circ F_{K}\in\mathbb{Q}_k \quad \forall \, K \in\mathcal{T}_h \right\},
-\]" src="form_7459.png"/></picture>
+\]" src="form_7393.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_6069_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_{K}$" src="form_6069.png"/></picture> is the map from the reference element <picture><source srcset="form_140_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{K}$" src="form_140.png"/></picture> (unit square/cube) to the physical element <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. For <picture><source srcset="form_7460_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h\in\mathbb{V}_h$" src="form_7460.png"/></picture>, the piecewise differential operators are denoted with a subscript <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>, for instance <picture><source srcset="form_7461_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_h v_h|_K=\nabla(v_h|_K)$" src="form_7461.png"/></picture> and <picture><source srcset="form_7462_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_h^2 v_h=\nabla_h\nabla_h v_h$" src="form_7462.png"/></picture>. For <picture><source srcset="form_7463_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e\in\mathcal{E}_h$" src="form_7463.png"/></picture>, we assign a normal <picture><source srcset="form_7464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}_e$" src="form_7464.png"/></picture>. The choice of normal is irrelevant except that when <picture><source srcset="form_2237_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e$" src="form_2237.png"/></picture> is a boundary face, <picture><source srcset="form_7464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}_e$" src="form_7464.png"/></picture> is the normal pointing outward <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>.</p>
+<p> where <picture><source srcset="form_6069_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F_{K}$" src="form_6069.png"/></picture> is the map from the reference element <picture><source srcset="form_114_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\hat{K}$" src="form_114.png"/></picture> (unit square/cube) to the physical element <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. For <picture><source srcset="form_7394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h\in\mathbb{V}_h$" src="form_7394.png"/></picture>, the piecewise differential operators are denoted with a subscript <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>, for instance <picture><source srcset="form_7395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla_h v_h|_K=\nabla(v_h|_K)$" src="form_7395.png"/></picture> and <picture><source srcset="form_7396_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D_h^2 v_h=\nabla_h\nabla_h v_h$" src="form_7396.png"/></picture>. For <picture><source srcset="form_7397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e\in\mathcal{E}_h$" src="form_7397.png"/></picture>, we assign a normal <picture><source srcset="form_7398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}_e$" src="form_7398.png"/></picture>. The choice of normal is irrelevant except that when <picture><source srcset="form_2286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e$" src="form_2286.png"/></picture> is a boundary face, <picture><source srcset="form_7398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}_e$" src="form_7398.png"/></picture> is the normal pointing outward <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>.</p>
 <p><a class="anchor" id="Jumpsaveragesanddiscretereconstructionofdifferentialoperators"></a></p><h4>Jumps, averages, and discrete reconstruction of differential operators</h4>
 <p>The piecewise differential operators do not have enough information to be accurate approximations of their continuous counterparts. They are missing inter-element information.</p>
 <p>This leads to the introductions of jump and average operators:  </p><p class="formulaDsp">
-<picture><source srcset="form_7465_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7399_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \jump{v_h}|_e \dealcoloneq
 \left\{\begin{array}{ll}
 v_h|_{K_1}-v_h|_{K_2} &amp; e\in\mathcal{E}_h^0 \\
@@ -184,154 +184,154 @@
 \frac{1}{2}(v_h|_{K_1}+v_h|_{K_2}) &amp; e\in\mathcal{E}_h^0 \\
 v_h|_{K_1} &amp; e\in\mathcal{E}_h^b,
 \end{array}\right.
-\]" src="form_7465.png"/></picture>
+\]" src="form_7399.png"/></picture>
 </p>
-<p> respectively, where <picture><source srcset="form_7466_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_1$" src="form_7466.png"/></picture> and <picture><source srcset="form_7467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_2$" src="form_7467.png"/></picture> are the two elements adjacent to <picture><source srcset="form_2237_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e$" src="form_2237.png"/></picture> so that <picture><source srcset="form_7464_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}_e$" src="form_7464.png"/></picture> points from <picture><source srcset="form_7466_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_1$" src="form_7466.png"/></picture> to <picture><source srcset="form_7467_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_2$" src="form_7467.png"/></picture> (with obvious modification when <picture><source srcset="form_2237_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e$" src="form_2237.png"/></picture> is a boundary edge). These are the same operators that we have previously used not only in <a class="el" href="step_47.html">step-47</a>, but also in other tutorials related to discontinuous Galerkin methods (e.g., <a class="el" href="step_12.html">step-12</a>).</p>
-<p>With these notations, we are now in position to define the discrete/reconstructed Hessian <picture><source srcset="form_7468_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h(v_h)\in\left[L^2(\Omega)\right]^{d\times d}$" src="form_7468.png"/></picture> of <picture><source srcset="form_7460_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h\in\mathbb{V}_h$" src="form_7460.png"/></picture>; that is, something that will take the role of <picture><source srcset="form_7469_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D^2 v$" src="form_7469.png"/></picture> in the definition of the weak formulation above when moving from the continuous to the discrete formulation. We first consider two <em>local lifting operators</em> <picture><source srcset="form_7470_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r_e:[L^2(e)]^d\rightarrow[\mathbb{V}_h]^{d\times d}$" src="form_7470.png"/></picture> and <picture><source srcset="form_7471_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_e:L^2(e)\rightarrow[\mathbb{V}_h]^{d\times d}$" src="form_7471.png"/></picture> defined for <picture><source srcset="form_7463_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e\in\mathcal{E}_h$" src="form_7463.png"/></picture> by, respectively,  </p><p class="formulaDsp">
-<picture><source srcset="form_7472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> respectively, where <picture><source srcset="form_7400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_1$" src="form_7400.png"/></picture> and <picture><source srcset="form_7401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_2$" src="form_7401.png"/></picture> are the two elements adjacent to <picture><source srcset="form_2286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e$" src="form_2286.png"/></picture> so that <picture><source srcset="form_7398_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}_e$" src="form_7398.png"/></picture> points from <picture><source srcset="form_7400_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_1$" src="form_7400.png"/></picture> to <picture><source srcset="form_7401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_2$" src="form_7401.png"/></picture> (with obvious modification when <picture><source srcset="form_2286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e$" src="form_2286.png"/></picture> is a boundary edge). These are the same operators that we have previously used not only in <a class="el" href="step_47.html">step-47</a>, but also in other tutorials related to discontinuous Galerkin methods (e.g., <a class="el" href="step_12.html">step-12</a>).</p>
+<p>With these notations, we are now in position to define the discrete/reconstructed Hessian <picture><source srcset="form_7402_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h(v_h)\in\left[L^2(\Omega)\right]^{d\times d}$" src="form_7402.png"/></picture> of <picture><source srcset="form_7394_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h\in\mathbb{V}_h$" src="form_7394.png"/></picture>; that is, something that will take the role of <picture><source srcset="form_7403_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D^2 v$" src="form_7403.png"/></picture> in the definition of the weak formulation above when moving from the continuous to the discrete formulation. We first consider two <em>local lifting operators</em> <picture><source srcset="form_7404_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r_e:[L^2(e)]^d\rightarrow[\mathbb{V}_h]^{d\times d}$" src="form_7404.png"/></picture> and <picture><source srcset="form_7405_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_e:L^2(e)\rightarrow[\mathbb{V}_h]^{d\times d}$" src="form_7405.png"/></picture> defined for <picture><source srcset="form_7397_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e\in\mathcal{E}_h$" src="form_7397.png"/></picture> by, respectively,  </p><p class="formulaDsp">
+<picture><source srcset="form_7406_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 r_e\left(\boldsymbol{\phi}\right) \in [\mathbb{V}_h]^{d\times d}: \,
 \int_{\Omega} \tau_h : r_e\left(\boldsymbol{\phi}\right) = \int_e\average{\tau_h}\mathbf{n}_e\cdot\boldsymbol{\phi} \qquad \forall \, \tau_h\in [\mathbb{V}_h]^{d\times d}
-\]" src="form_7472.png"/></picture>
+\]" src="form_7406.png"/></picture>
 </p>
 <p> and  </p><p class="formulaDsp">
-<picture><source srcset="form_7473_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7407_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 b_e(\phi) \in [\mathbb{V}_h]^{d\times d}: \,
 \int_{\Omega} \tau_h : b_e(\phi) = \int_e\average{{\rm div}\, \tau_h}\cdot\mathbf{n}_e\phi \qquad \forall \, \tau_h\in [\mathbb{V}_h]^{d\times d}.
-\]" src="form_7473.png"/></picture>
+\]" src="form_7407.png"/></picture>
 </p>
-<p> We have <picture><source srcset="form_7474_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\rm supp}\,(r_e\left(\boldsymbol{\phi}\right))={\rm supp}\,(b_e(\phi))=\omega_e$" src="form_7474.png"/></picture>, where <picture><source srcset="form_7475_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega_e$" src="form_7475.png"/></picture> denotes the patch of (one or two) elements having <picture><source srcset="form_2237_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e$" src="form_2237.png"/></picture> as part of their boundaries.</p>
-<p>The discrete Hessian operator <picture><source srcset="form_7476_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h:\mathbb{V}_h\rightarrow\left[L^2(\Omega)\right]^{2\times 2}$" src="form_7476.png"/></picture> is then given by  </p><p class="formulaDsp">
-<picture><source srcset="form_7477_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> We have <picture><source srcset="form_7408_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\rm supp}\,(r_e\left(\boldsymbol{\phi}\right))={\rm supp}\,(b_e(\phi))=\omega_e$" src="form_7408.png"/></picture>, where <picture><source srcset="form_7409_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega_e$" src="form_7409.png"/></picture> denotes the patch of (one or two) elements having <picture><source srcset="form_2286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e$" src="form_2286.png"/></picture> as part of their boundaries.</p>
+<p>The discrete Hessian operator <picture><source srcset="form_7410_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h:\mathbb{V}_h\rightarrow\left[L^2(\Omega)\right]^{2\times 2}$" src="form_7410.png"/></picture> is then given by  </p><p class="formulaDsp">
+<picture><source srcset="form_7411_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 H_h(v_h) \dealcoloneq D_h^2 v_h -R_h(\jump{\nabla_h v_h})+B_h(\jump{v_h}) \dealcoloneq D_h^2 v_h - \sum_{e\in\mathcal{E}_h}r_e\left(\jump{\nabla_h v_h}\right)+\sum_{e\in\mathcal{E}_h}b_e\left(\jump{v_h}\right).
-\]" src="form_7477.png"/></picture>
+\]" src="form_7411.png"/></picture>
 </p>
 <dl class="section note"><dt>Note</dt><dd>In general, the polynomial degree of the finite element space for the two lifting terms do not need to be the same as the one used for the approximate solution. A different polynomial degree for each lifting term can also be considered.</dd></dl>
 <p>Note that other differential operators (e.g., gradient or divergence) can be reconstructed in a similar fashion, see for instance <b>[DiPietro2011]</b>.</p>
 <p><a class="anchor" id="Motivationfortheliftingoperators"></a></p><h4>Motivation for the lifting operators</h4>
-<p>The discrete Hessian <picture><source srcset="form_7478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h$" src="form_7478.png"/></picture> is designed such that it weakly converges to the continuous Hessian <picture><source srcset="form_7479_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D^2$" src="form_7479.png"/></picture>, see the note in the next section for a precise statement. As already mentioned above, the broken Hessian is not a suitable candidate as it contains no information about inter-element jumps. We provide here an informal discussion motivating the definition of the two lifting operators and we refer to <b>[Pryer2014]</b> and <b>[Bonito2021]</b> for more details (although the definitions are slightly different unless the mesh is affine). The goal is then to construct a discrete operator <picture><source srcset="form_7478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h$" src="form_7478.png"/></picture> such that for all <picture><source srcset="form_7480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau\in [C_0^{\infty}(\Omega)]^{d\times d}$" src="form_7480.png"/></picture> we have  </p><p class="formulaDsp">
-<picture><source srcset="form_7481_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>The discrete Hessian <picture><source srcset="form_7412_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h$" src="form_7412.png"/></picture> is designed such that it weakly converges to the continuous Hessian <picture><source srcset="form_7413_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D^2$" src="form_7413.png"/></picture>, see the note in the next section for a precise statement. As already mentioned above, the broken Hessian is not a suitable candidate as it contains no information about inter-element jumps. We provide here an informal discussion motivating the definition of the two lifting operators and we refer to <b>[Pryer2014]</b> and <b>[Bonito2021]</b> for more details (although the definitions are slightly different unless the mesh is affine). The goal is then to construct a discrete operator <picture><source srcset="form_7412_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h$" src="form_7412.png"/></picture> such that for all <picture><source srcset="form_7414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau\in [C_0^{\infty}(\Omega)]^{d\times d}$" src="form_7414.png"/></picture> we have  </p><p class="formulaDsp">
+<picture><source srcset="form_7415_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_{\Omega}H_h(v_h):\tau\longrightarrow \int_{\Omega}D^2v:\tau \qquad \mbox{as } \,\, h\rightarrow 0
-\]" src="form_7481.png"/></picture>
+\]" src="form_7415.png"/></picture>
 </p>
-<p> for any sequence <picture><source srcset="form_7482_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{v_h\}_{h&gt;0}$" src="form_7482.png"/></picture> in <picture><source srcset="form_6595_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{V}_h$" src="form_6595.png"/></picture> such that <picture><source srcset="form_7483_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h\rightarrow v$" src="form_7483.png"/></picture> in <picture><source srcset="form_6582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2(\Omega)$" src="form_6582.png"/></picture> as <picture><source srcset="form_4264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h\rightarrow 0$" src="form_4264.png"/></picture> for some <picture><source srcset="form_7484_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v\in H^2(\Omega)$" src="form_7484.png"/></picture>. Let <picture><source srcset="form_7480_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau\in [C_0^{\infty}(\Omega)]^{d\times d}$" src="form_7480.png"/></picture>. Integrating by parts twice we get  </p><p class="formulaDsp">
-<picture><source srcset="form_7485_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> for any sequence <picture><source srcset="form_7416_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{v_h\}_{h&gt;0}$" src="form_7416.png"/></picture> in <picture><source srcset="form_6556_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{V}_h$" src="form_6556.png"/></picture> such that <picture><source srcset="form_7417_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h\rightarrow v$" src="form_7417.png"/></picture> in <picture><source srcset="form_6543_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2(\Omega)$" src="form_6543.png"/></picture> as <picture><source srcset="form_4340_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h\rightarrow 0$" src="form_4340.png"/></picture> for some <picture><source srcset="form_7418_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v\in H^2(\Omega)$" src="form_7418.png"/></picture>. Let <picture><source srcset="form_7414_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau\in [C_0^{\infty}(\Omega)]^{d\times d}$" src="form_7414.png"/></picture>. Integrating by parts twice we get  </p><p class="formulaDsp">
+<picture><source srcset="form_7419_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_{\Omega}D^2v:\tau = -\int_{\Omega}\nabla v\cdot \mbox{div}(\tau) = \int_{\Omega}v \mbox{ div}(\mbox{div}(\tau))
-\]" src="form_7485.png"/></picture>
+\]" src="form_7419.png"/></picture>
 </p>
 <p> while  </p><p class="formulaDsp">
-<picture><source srcset="form_7486_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_7420_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_{\Omega}v_h \mbox{ div}(\mbox{div}(\tau)) \longrightarrow \int_{\Omega}v \mbox{ div}(\mbox{div}(\tau)) \qquad \mbox{as } \,\, h\rightarrow 0.
-\]" src="form_7486.png"/></picture>
+\]" src="form_7420.png"/></picture>
 </p>
-<p> Now, we integrate two times by parts the left term, taking into account that <picture><source srcset="form_2788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2788.png"/></picture> is not necessarily continuous across interior faces. For any <picture><source srcset="form_7487_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\in\mathcal{T}_h$" src="form_7487.png"/></picture> we have  </p><p class="formulaDsp">
-<picture><source srcset="form_7488_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> Now, we integrate two times by parts the left term, taking into account that <picture><source srcset="form_2781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2781.png"/></picture> is not necessarily continuous across interior faces. For any <picture><source srcset="form_7421_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\in\mathcal{T}_h$" src="form_7421.png"/></picture> we have  </p><p class="formulaDsp">
+<picture><source srcset="form_7422_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_K v_h \mbox{ div}(\mbox{div}(\tau)) = -\int_K \nabla v_h\cdot \mbox{div}(\tau) + \int_{\partial K} v_h \mbox{ div}(\tau)\cdot \mathbf{n}_K =\int_K D^2v_h:\tau - \int_{\partial K}\nabla v_h\cdot (\tau\mathbf{n}_K) + \int_{\partial K} v_h \mbox{ div}(\tau)\cdot \mathbf{n}_K,
-\]" src="form_7488.png"/></picture>
+\]" src="form_7422.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_7489_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}_K$" src="form_7489.png"/></picture> denotes the outward unit normal to <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. Then, summing over the elements <picture><source srcset="form_7487_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\in\mathcal{T}_h$" src="form_7487.png"/></picture> and using that <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture> is smooth, we obtain  </p><p class="formulaDsp">
-<picture><source srcset="form_7490_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_7423_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf{n}_K$" src="form_7423.png"/></picture> denotes the outward unit normal to <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>. Then, summing over the elements <picture><source srcset="form_7421_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\in\mathcal{T}_h$" src="form_7421.png"/></picture> and using that <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture> is smooth, we obtain  </p><p class="formulaDsp">
+<picture><source srcset="form_7424_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 \int_{\Omega} v_h \mbox{ div}(\mbox{div}(\tau)) = \int_{\Omega} D_h^2v_h:\tau - \sum_{e\in\mathcal{E}_h}\int_e\jump{\nabla_h v_h}\cdot \average{\tau}\mathbf{n}_e + \sum_{e\in\mathcal{E}_h}\int_e v_h \average{\mbox{div}(\tau)}\cdot \mathbf{n}_e
-\]" src="form_7490.png"/></picture>
+\]" src="form_7424.png"/></picture>
 </p>
-<p> which reveals the motivation for the definition of the two lifting operators: if <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture> was an admissible test function, then the right-hand side would be equal to <picture><source srcset="form_7491_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{\Omega}H_h(v_h):\tau$" src="form_7491.png"/></picture> and we would have shown the desired (weak) convergence. Actually, if we add and subtract <picture><source srcset="form_4123_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau_h$" src="form_4123.png"/></picture>, the Lagrange interpolant of <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture> in <picture><source srcset="form_7492_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\mathbb{V}_h\cap H_0^1(\Omega)]^{d\times d}$" src="form_7492.png"/></picture>, we can show that the right-hand side is indeed equal to <picture><source srcset="form_7491_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{\Omega}H_h(v_h):\tau$" src="form_7491.png"/></picture> up to terms that tends to zero as <picture><source srcset="form_4264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h\rightarrow 0$" src="form_4264.png"/></picture> under appropriate assumptions on <picture><source srcset="form_2788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2788.png"/></picture>.</p>
-<p>It is worth mentioning that defining <picture><source srcset="form_7478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h$" src="form_7478.png"/></picture> without the lifting operators <picture><source srcset="form_7493_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r_e$" src="form_7493.png"/></picture> and <picture><source srcset="form_7494_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_e$" src="form_7494.png"/></picture> for <picture><source srcset="form_7495_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e\in\mathcal{E}_h^b$" src="form_7495.png"/></picture> would not affect the weak convergence property (the integrals over boundary faces are zero since <picture><source srcset="form_3020_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_3020.png"/></picture> is compactly supported in <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>). However, they are included in <picture><source srcset="form_7478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h$" src="form_7478.png"/></picture> to ensure that the solution of the discrete problem introduced in the next section satisfies the homogeneous Dirichlet boundary conditions in the limit <picture><source srcset="form_4264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h\rightarrow 0$" src="form_4264.png"/></picture>.</p>
+<p> which reveals the motivation for the definition of the two lifting operators: if <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture> was an admissible test function, then the right-hand side would be equal to <picture><source srcset="form_7425_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{\Omega}H_h(v_h):\tau$" src="form_7425.png"/></picture> and we would have shown the desired (weak) convergence. Actually, if we add and subtract <picture><source srcset="form_4012_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau_h$" src="form_4012.png"/></picture>, the Lagrange interpolant of <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture> in <picture><source srcset="form_7426_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[\mathbb{V}_h\cap H_0^1(\Omega)]^{d\times d}$" src="form_7426.png"/></picture>, we can show that the right-hand side is indeed equal to <picture><source srcset="form_7425_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\int_{\Omega}H_h(v_h):\tau$" src="form_7425.png"/></picture> up to terms that tends to zero as <picture><source srcset="form_4340_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h\rightarrow 0$" src="form_4340.png"/></picture> under appropriate assumptions on <picture><source srcset="form_2781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2781.png"/></picture>.</p>
+<p>It is worth mentioning that defining <picture><source srcset="form_7412_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h$" src="form_7412.png"/></picture> without the lifting operators <picture><source srcset="form_7427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r_e$" src="form_7427.png"/></picture> and <picture><source srcset="form_7428_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_e$" src="form_7428.png"/></picture> for <picture><source srcset="form_7429_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e\in\mathcal{E}_h^b$" src="form_7429.png"/></picture> would not affect the weak convergence property (the integrals over boundary faces are zero since <picture><source srcset="form_2948_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\tau$" src="form_2948.png"/></picture> is compactly supported in <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>). However, they are included in <picture><source srcset="form_7412_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h$" src="form_7412.png"/></picture> to ensure that the solution of the discrete problem introduced in the next section satisfies the homogeneous Dirichlet boundary conditions in the limit <picture><source srcset="form_4340_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h\rightarrow 0$" src="form_4340.png"/></picture>.</p>
 <p><a class="anchor" id="LDGapproximations"></a></p><h4>LDG approximations</h4>
-<p>The proposed LDG approximation of the bi-Laplacian problem reads: find <picture><source srcset="form_7496_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h\in\mathbb{V}_h$" src="form_7496.png"/></picture> such that  </p><p class="formulaDsp">
-<picture><source srcset="form_7497_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p>The proposed LDG approximation of the bi-Laplacian problem reads: find <picture><source srcset="form_7430_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h\in\mathbb{V}_h$" src="form_7430.png"/></picture> such that  </p><p class="formulaDsp">
+<picture><source srcset="form_7431_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 A_h(u_h,v_h)\dealcoloneq a_h(u_h,v_h)+j_h(u_h,v_h) = F_h(v_h) \qquad \forall \, v_h\in\mathbb{V}_h,
-\]" src="form_7497.png"/></picture>
+\]" src="form_7431.png"/></picture>
 </p>
 <p> where  </p><p class="formulaDsp">
-<picture><source srcset="form_7498_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7432_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
         a_h(u_h,v_h) &amp; \dealcoloneq \int_{\Omega}H_h(u_h):H_h(v_h), \\
         j_h(u_h,v_h) &amp; \dealcoloneq \gamma_1\sum_{e\in\mathcal{E}_h}h_e^{-1}\int_e\jump{\nabla_h u_h}\cdot\jump{\nabla_h v_h}+\gamma_0\sum_{e\in\mathcal{E}_h}h_e^{-3}\int_e\jump{u_h}\jump{v_h}, \\
         F_h(v_h) &amp; \dealcoloneq \int_{\Omega}fv_h.
-\end{align*}" src="form_7498.png"/></picture>
+\end{align*}" src="form_7432.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_7499_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma_0,\gamma_1&gt;0$" src="form_7499.png"/></picture> are penalty parameters.</p>
-<p>Let <picture><source srcset="form_7500_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi_i\}_{i=1}^{N_h}$" src="form_7500.png"/></picture> be the standard basis functions that generate <picture><source srcset="form_6595_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{V}_h$" src="form_6595.png"/></picture>. We can then express the solution as <picture><source srcset="form_7501_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h=\sum_{j=1}^{N_h}U_j\varphi_j$" src="form_7501.png"/></picture> and the problem reads: find <picture><source srcset="form_7502_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{U}=(U_j)_{j=1}^{N_h}\in\mathbb{R}^{N_h}$" src="form_7502.png"/></picture> such that  </p><p class="formulaDsp">
-<picture><source srcset="form_7503_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> Here, <picture><source srcset="form_7433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma_0,\gamma_1&gt;0$" src="form_7433.png"/></picture> are penalty parameters.</p>
+<p>Let <picture><source srcset="form_7434_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{\varphi_i\}_{i=1}^{N_h}$" src="form_7434.png"/></picture> be the standard basis functions that generate <picture><source srcset="form_6556_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{V}_h$" src="form_6556.png"/></picture>. We can then express the solution as <picture><source srcset="form_7435_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h=\sum_{j=1}^{N_h}U_j\varphi_j$" src="form_7435.png"/></picture> and the problem reads: find <picture><source srcset="form_7436_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{U}=(U_j)_{j=1}^{N_h}\in\mathbb{R}^{N_h}$" src="form_7436.png"/></picture> such that  </p><p class="formulaDsp">
+<picture><source srcset="form_7437_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 A\boldsymbol{U} = \boldsymbol{F},
-\]" src="form_7503.png"/></picture>
+\]" src="form_7437.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_7504_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A=(A_{ij})_{i,j=1}^{N_h}\in\mathbb{R}^{N_h\times N_h}$" src="form_7504.png"/></picture> and <picture><source srcset="form_7505_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{F}=(F_i)_{i=1}^{N_h}\in\mathbb{R}^{N_h}$" src="form_7505.png"/></picture> are defined by  </p><p class="formulaDsp">
-<picture><source srcset="form_7506_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<p> where <picture><source srcset="form_7438_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A=(A_{ij})_{i,j=1}^{N_h}\in\mathbb{R}^{N_h\times N_h}$" src="form_7438.png"/></picture> and <picture><source srcset="form_7439_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{F}=(F_i)_{i=1}^{N_h}\in\mathbb{R}^{N_h}$" src="form_7439.png"/></picture> are defined by  </p><p class="formulaDsp">
+<picture><source srcset="form_7440_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 A_{ij}\dealcoloneq A_h(\varphi_j,\varphi_i) \quad \text{and} \quad F_i\dealcoloneq F_h(\varphi_i), \qquad 1\leq i,j \leq N_h.
-\]" src="form_7506.png"/></picture>
+\]" src="form_7440.png"/></picture>
 </p>
-<dl class="section note"><dt>Note</dt><dd>The sparsity pattern associated with the above LDG method is slightly larger than that of, e.g., the symmetric interior penalty discontinuous Galerkin (SIPG) method. This is because the lifting operators in <picture><source srcset="form_7478_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h$" src="form_7478.png"/></picture> extend shape functions defined on one cell to the neighboring cell where it may overlap with the lifted shape functions from a neighbor of the neighbor. However, we have the following interesting properties: <ol>
+<dl class="section note"><dt>Note</dt><dd>The sparsity pattern associated with the above LDG method is slightly larger than that of, e.g., the symmetric interior penalty discontinuous Galerkin (SIPG) method. This is because the lifting operators in <picture><source srcset="form_7412_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h$" src="form_7412.png"/></picture> extend shape functions defined on one cell to the neighboring cell where it may overlap with the lifted shape functions from a neighbor of the neighbor. However, we have the following interesting properties: <ol>
 <li>
-The bilinear form <picture><source srcset="form_7507_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_h(\cdot,\cdot)$" src="form_7507.png"/></picture> is coercive with respect to the DG <picture><source srcset="form_2778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^2$" src="form_2778.png"/></picture> norm  <p class="formulaDsp">
-<picture><source srcset="form_7508_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+The bilinear form <picture><source srcset="form_7441_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_h(\cdot,\cdot)$" src="form_7441.png"/></picture> is coercive with respect to the DG <picture><source srcset="form_2802_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^2$" src="form_2802.png"/></picture> norm  <p class="formulaDsp">
+<picture><source srcset="form_7442_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \|v_h\|_{H_h^2(\Omega)}^2\dealcoloneq\|D_h^2v_h\|_{L^2(\Omega)}^2+\sum_{e\in\mathcal{E}_h}h_e^{-1}\|\jump{\nabla_h v_h}\|_{L^2(e)}^2+\sum_{e\in\mathcal{E}_h}h_e^{-3}\|\jump{v_h}\|_{L^2(e)}^2
-  \]" src="form_7508.png"/></picture>
+  \]" src="form_7442.png"/></picture>
 </p>
- for any choice of penalty parameters <picture><source srcset="form_7499_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma_0,\gamma_1&gt;0$" src="form_7499.png"/></picture>. In other words, the stability of the method is ensured for any positive parameters. This is in contrast with interior penalty methods for which they need to be large enough. (See also the discussions about penalty parameters in the <a class="el" href="step_39.html">step-39</a>, <a class="el" href="step_47.html">step-47</a>, and <a class="el" href="step_74.html">step-74</a> programs.) </li>
+ for any choice of penalty parameters <picture><source srcset="form_7433_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma_0,\gamma_1&gt;0$" src="form_7433.png"/></picture>. In other words, the stability of the method is ensured for any positive parameters. This is in contrast with interior penalty methods for which they need to be large enough. (See also the discussions about penalty parameters in the <a class="el" href="step_39.html">step-39</a>, <a class="el" href="step_47.html">step-47</a>, and <a class="el" href="step_74.html">step-74</a> programs.) </li>
 <li>
-If <picture><source srcset="form_7509_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{v_h\}_{h&gt;0}\subset \mathbb{V}_h$" src="form_7509.png"/></picture> is a sequence uniformly bounded in the <picture><source srcset="form_7510_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\cdot\|_{H_h^2(\Omega)}$" src="form_7510.png"/></picture> norm such that <picture><source srcset="form_7483_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h\rightarrow v$" src="form_7483.png"/></picture> in <picture><source srcset="form_6582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2(\Omega)$" src="form_6582.png"/></picture> as <picture><source srcset="form_4264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h\rightarrow 0$" src="form_4264.png"/></picture> for some <picture><source srcset="form_7484_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v\in H^2(\Omega)$" src="form_7484.png"/></picture>, then the discrete Hessian <picture><source srcset="form_7511_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h(v_h)$" src="form_7511.png"/></picture> weakly converges to <picture><source srcset="form_7452_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D^2v$" src="form_7452.png"/></picture> in <picture><source srcset="form_7512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L^2(\Omega)]^{2\times 2}$" src="form_7512.png"/></picture> as <picture><source srcset="form_4264_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h\rightarrow 0$" src="form_4264.png"/></picture>. Note that the uniform boundedness assumption implies that the limit <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> belongs to <picture><source srcset="form_7513_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_0^2(\Omega)$" src="form_7513.png"/></picture>. </li>
+If <picture><source srcset="form_7443_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{v_h\}_{h&gt;0}\subset \mathbb{V}_h$" src="form_7443.png"/></picture> is a sequence uniformly bounded in the <picture><source srcset="form_7444_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\cdot\|_{H_h^2(\Omega)}$" src="form_7444.png"/></picture> norm such that <picture><source srcset="form_7417_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h\rightarrow v$" src="form_7417.png"/></picture> in <picture><source srcset="form_6543_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$L^2(\Omega)$" src="form_6543.png"/></picture> as <picture><source srcset="form_4340_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h\rightarrow 0$" src="form_4340.png"/></picture> for some <picture><source srcset="form_7418_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v\in H^2(\Omega)$" src="form_7418.png"/></picture>, then the discrete Hessian <picture><source srcset="form_7445_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h(v_h)$" src="form_7445.png"/></picture> weakly converges to <picture><source srcset="form_7386_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$D^2v$" src="form_7386.png"/></picture> in <picture><source srcset="form_7446_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$[L^2(\Omega)]^{2\times 2}$" src="form_7446.png"/></picture> as <picture><source srcset="form_4340_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h\rightarrow 0$" src="form_4340.png"/></picture>. Note that the uniform boundedness assumption implies that the limit <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> belongs to <picture><source srcset="form_7447_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_0^2(\Omega)$" src="form_7447.png"/></picture>. </li>
 <li>
 The use of a reconstructed operator simplifies the design of the numerical algorithm. In particular, no integration by parts is needed to derive the discrete problem. This strategy of replacing differential operators by appropriate discrete counter-parts can be applied to nonlinear and more general problems, for instance variational problems without a readily accessible strong formulation. It has been used for instance in <b>[BGNY2020]</b> and <b>[BGNY2021]</b> in the context of large bending deformation of plates.  </li>
 </ol>
 </dd></dl>
-<p>As in <a class="el" href="step_47.html">step-47</a>, we could consider <picture><source srcset="form_1094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1094.png"/></picture> finite element approximations by replacing <code>FE_DGQ&lt;dim&gt;</code> by <code>FE_Q&lt;dim&gt;</code> (and include the appropriate header file <code>deal.II/fe/fe_q.h</code>) in the program below. In this case, the jump of the basis functions across any interior face is zero, and thus <picture><source srcset="form_7514_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_e\left(\jump{\varphi_i}\right)=\mathbf{0}$" src="form_7514.png"/></picture> for all <picture><source srcset="form_7515_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e\in\mathcal{E}_h^0$" src="form_7515.png"/></picture>, and could be dropped to save computational time. While an overkill for the bi-Laplacian problem, the flexibility of fully discontinuous methods combined with reconstructed differential operators is advantageous for nonlinear problems.</p>
+<p>As in <a class="el" href="step_47.html">step-47</a>, we could consider <picture><source srcset="form_1087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1087.png"/></picture> finite element approximations by replacing <code>FE_DGQ&lt;dim&gt;</code> by <code>FE_Q&lt;dim&gt;</code> (and include the appropriate header file <code>deal.II/fe/fe_q.h</code>) in the program below. In this case, the jump of the basis functions across any interior face is zero, and thus <picture><source srcset="form_7448_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_e\left(\jump{\varphi_i}\right)=\mathbf{0}$" src="form_7448.png"/></picture> for all <picture><source srcset="form_7449_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e\in\mathcal{E}_h^0$" src="form_7449.png"/></picture>, and could be dropped to save computational time. While an overkill for the bi-Laplacian problem, the flexibility of fully discontinuous methods combined with reconstructed differential operators is advantageous for nonlinear problems.</p>
 <p><a class="anchor" id="Implementation"></a></p><h3>Implementation</h3>
-<p>As customary, we assemble the matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> and the right-hand side <picture><source srcset="form_7516_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{F}$" src="form_7516.png"/></picture> by looping over the elements <picture><source srcset="form_7487_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\in\mathcal{T}_h$" src="form_7487.png"/></picture>. Since we are using discontinuous finite elements, the support of each <picture><source srcset="form_164_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_164.png"/></picture> is only one element <picture><source srcset="form_7487_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\in\mathcal{T}_h$" src="form_7487.png"/></picture>. However, due to the lifting operators, the support of <picture><source srcset="form_7517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h(\varphi_i)$" src="form_7517.png"/></picture> is <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> plus all the neighbors of <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> (recall that for <picture><source srcset="form_7518_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e\in \mathcal{E}_h$" src="form_7518.png"/></picture>, the support of the lifting operators <picture><source srcset="form_7493_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r_e$" src="form_7493.png"/></picture> and <picture><source srcset="form_7494_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_e$" src="form_7494.png"/></picture> is <picture><source srcset="form_7475_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega_e$" src="form_7475.png"/></picture>). Therefore, when integrating over a cell <picture><source srcset="form_3846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_c$" src="form_3846.png"/></picture>, we need to consider the following interactions (case <picture><source srcset="form_6688_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=2$" src="form_6688.png"/></picture>)</p>
+<p>As customary, we assemble the matrix <picture><source srcset="form_71_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A$" src="form_71.png"/></picture> and the right-hand side <picture><source srcset="form_7450_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\boldsymbol{F}$" src="form_7450.png"/></picture> by looping over the elements <picture><source srcset="form_7421_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\in\mathcal{T}_h$" src="form_7421.png"/></picture>. Since we are using discontinuous finite elements, the support of each <picture><source srcset="form_138_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i$" src="form_138.png"/></picture> is only one element <picture><source srcset="form_7421_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K\in\mathcal{T}_h$" src="form_7421.png"/></picture>. However, due to the lifting operators, the support of <picture><source srcset="form_7451_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H_h(\varphi_i)$" src="form_7451.png"/></picture> is <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> plus all the neighbors of <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> (recall that for <picture><source srcset="form_7452_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$e\in \mathcal{E}_h$" src="form_7452.png"/></picture>, the support of the lifting operators <picture><source srcset="form_7427_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$r_e$" src="form_7427.png"/></picture> and <picture><source srcset="form_7428_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b_e$" src="form_7428.png"/></picture> is <picture><source srcset="form_7409_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\omega_e$" src="form_7409.png"/></picture>). Therefore, when integrating over a cell <picture><source srcset="form_3801_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_c$" src="form_3801.png"/></picture>, we need to consider the following interactions (case <picture><source srcset="form_6640_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=2$" src="form_6640.png"/></picture>)</p>
 <table align="center">
 <tr>
 <td><img src="https://www.dealii.org/images/steps/developer/step-82.schema_cells.png" alt="" width="250px" height="250px" class="inline"/> </td><td>&#href_anchor"center">
 <tr>
-<td align="left">dofs <picture><source srcset="form_3846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_c$" src="form_3846.png"/></picture> <picture><source srcset="form_7519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\leftrightarrow$" src="form_7519.png"/></picture> dofs <picture><source srcset="form_3846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_c$" src="form_3846.png"/></picture> </td><td>&#160; </td><td align="left">(stored in <code>stiffness_matrix_cc</code>)  </td></tr>
+<td align="left">dofs <picture><source srcset="form_3801_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_c$" src="form_3801.png"/></picture> <picture><source srcset="form_7453_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\leftrightarrow$" src="form_7453.png"/></picture> dofs <picture><source srcset="form_3801_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_c$" src="form_3801.png"/></picture> </td><td>&#160; </td><td align="left">(stored in <code>stiffness_matrix_cc</code>)  </td></tr>
 <tr>
-<td align="left">dofs <picture><source srcset="form_3846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_c$" src="form_3846.png"/></picture> <picture><source srcset="form_7519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\leftrightarrow$" src="form_7519.png"/></picture> dofs <picture><source srcset="form_7520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{n_k}$" src="form_7520.png"/></picture> </td><td>&#160; </td><td align="left">(stored in <code>stiffness_matrix_cn</code> and <code>stiffness_matrix_nc</code>)  </td></tr>
+<td align="left">dofs <picture><source srcset="form_3801_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_c$" src="form_3801.png"/></picture> <picture><source srcset="form_7453_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\leftrightarrow$" src="form_7453.png"/></picture> dofs <picture><source srcset="form_7454_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{n_k}$" src="form_7454.png"/></picture> </td><td>&#160; </td><td align="left">(stored in <code>stiffness_matrix_cn</code> and <code>stiffness_matrix_nc</code>)  </td></tr>
 <tr>
-<td align="left">dofs <picture><source srcset="form_7520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{n_k}$" src="form_7520.png"/></picture> <picture><source srcset="form_7519_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\leftrightarrow$" src="form_7519.png"/></picture> dofs <picture><source srcset="form_7520_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K_{n_k}$" src="form_7520.png"/></picture> </td><td>&#160; </td><td align="left">(stored in <code>stiffness_matrix_nn</code>)  </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/step_85.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_85.html	2024-03-17 21:57:50.187275950 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_85.html	2024-03-17 21:57:50.195276000 +0000
@@ -128,66 +128,66 @@
 <p><a class="anchor" id="Intro"></a> <a class="anchor" id="Introduction"></a></p><h1>Introduction</h1>
 <p><a class="anchor" id="TheCutFiniteElementMethod"></a></p><h3>The Cut Finite Element Method</h3>
 <p>In this example, we show how to use the cut finite element method (CutFEM) in deal.II. For illustration, we want to solve the simplest possible problem, so we again consider Poisson's equation:  </p><p class="formulaDsp">
-<picture><source srcset="form_7285_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7537_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   -\Delta u &amp;= f \qquad &amp;&amp; \text{in }\, \Omega,
   \\
   u &amp;= u_D       \qquad &amp;&amp; \text{on }\, \Gamma = \partial \Omega,
-\end{align*}" src="form_7285.png"/></picture>
+\end{align*}" src="form_7537.png"/></picture>
 </p>
-<p> where we choose <picture><source srcset="form_7286_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x) = 4$" src="form_7286.png"/></picture> and <picture><source srcset="form_7287_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_D(x) = 1$" src="form_7287.png"/></picture>. CutFEM is an immersed method. In this context, "immersed" means that the mesh is unfitted to the geometry of the domain, <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>. Instead, <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> floats freely on top of a uniform background mesh, <picture><source srcset="form_7288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{T}^h$" src="form_7288.png"/></picture>. </p><div class="image">
+<p> where we choose <picture><source srcset="form_7538_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f(x) = 4$" src="form_7538.png"/></picture> and <picture><source srcset="form_7539_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_D(x) = 1$" src="form_7539.png"/></picture>. CutFEM is an immersed method. In this context, "immersed" means that the mesh is unfitted to the geometry of the domain, <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>. Instead, <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> floats freely on top of a uniform background mesh, <picture><source srcset="form_7540_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{T}^h$" src="form_7540.png"/></picture>. </p><div class="image">
 <object type="image/svg+xml" data="step-85-background-mesh.svg" style="pointer-events: none;"></object>
 </div>
-<p> Since we no longer use the mesh to describe the geometry of the domain, we need some other way to represent it. This can be done in several ways but here we assume that <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> is described by a level set function, <picture><source srcset="form_7289_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi : \mathbb{R}^{\text{dim}} \to \mathbb{R}$" src="form_7289.png"/></picture> such that  </p><p class="formulaDsp">
-<picture><source srcset="form_7290_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> Since we no longer use the mesh to describe the geometry of the domain, we need some other way to represent it. This can be done in several ways but here we assume that <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> is described by a level set function, <picture><source srcset="form_7541_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi : \mathbb{R}^{\text{dim}} \to \mathbb{R}$" src="form_7541.png"/></picture> such that  </p><p class="formulaDsp">
+<picture><source srcset="form_7542_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \Omega &amp;= \{x \in \mathbb{R}^{\text{dim}} : \psi(x) &lt; 0 \}, \\
   \Gamma &amp;= \{x \in \mathbb{R}^{\text{dim}} : \psi(x) = 0 \}.
-\end{align*}" src="form_7290.png"/></picture>
+\end{align*}" src="form_7542.png"/></picture>
 </p>
-<p> For simplicity, we choose <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> to be a unit disk, so that  </p><p class="formulaDsp">
-<picture><source srcset="form_7291_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<p> For simplicity, we choose <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> to be a unit disk, so that  </p><p class="formulaDsp">
+<picture><source srcset="form_7543_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   \psi(x) = \| x \| - 1.
-\end{equation*}" src="form_7291.png"/></picture>
+\end{equation*}" src="form_7543.png"/></picture>
 </p>
-<p> As can be seen from the figure below, the level set function is negative for points in <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, zero on the boundary, and positive everywhere else. </p><div class="image">
+<p> As can be seen from the figure below, the level set function is negative for points in <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, zero on the boundary, and positive everywhere else. </p><div class="image">
 <img src="step-85-level-set.png" alt=""/>
 </div>
-<p> To solve this problem, we want to distribute degrees of freedom over the smallest submesh, <picture><source srcset="form_7292_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{T}_\Omega^h$" src="form_7292.png"/></picture>, that completely covers the domain:  </p><p class="formulaDsp">
-<picture><source srcset="form_7293_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<p> To solve this problem, we want to distribute degrees of freedom over the smallest submesh, <picture><source srcset="form_7544_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{T}_\Omega^h$" src="form_7544.png"/></picture>, that completely covers the domain:  </p><p class="formulaDsp">
+<picture><source srcset="form_7545_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   \mathcal{T}_\Omega^h = \{ T \in \mathcal{T}^{h} : T \cap \Omega \neq \emptyset \}.
-\end{equation*}" src="form_7293.png"/></picture>
+\end{equation*}" src="form_7545.png"/></picture>
 </p>
 <p> This is usually referred to as the "active mesh". </p><div class="image">
 <object type="image/svg+xml" data="step-85-active-mesh.svg" style="pointer-events: none;"></object>
 </div>
-<p> The finite element space where we want to find our numerical solution, <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture>, is now  </p><p class="formulaDsp">
-<picture><source srcset="form_7294_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<p> The finite element space where we want to find our numerical solution, <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture>, is now  </p><p class="formulaDsp">
+<picture><source srcset="form_7546_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   V_\Omega^h = \{ v \in C(\mathcal{N}_\Omega^h) : v \in Q_p(T), \, T \in \mathcal{T}_\Omega^h \},
-\end{equation*}" src="form_7294.png"/></picture>
+\end{equation*}" src="form_7546.png"/></picture>
 </p>
 <p> where  </p><p class="formulaDsp">
-<picture><source srcset="form_7295_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<picture><source srcset="form_7547_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   \mathcal{N}_\Omega^h = \bigcup_{T \in \mathcal{T}_\Omega^h} \overline{T},
-\end{equation*}" src="form_7295.png"/></picture>
+\end{equation*}" src="form_7547.png"/></picture>
 </p>
-<p> and <picture><source srcset="form_7296_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\overline{T}$" src="form_7296.png"/></picture> denotes the closure of <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture>. The set <picture><source srcset="form_7297_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{N}_\Omega^h$" src="form_7297.png"/></picture> is sometimes referred to as the "fictitious domain". Since <picture><source srcset="form_7298_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega \subset \mathcal{N}_\Omega^h$" src="form_7298.png"/></picture>, we see that the numerical solution is defined over a slightly larger region than the analytical solution.</p>
-<p>In this type of immersed finite element method, the standard way to apply boundary conditions is using Nitsche's method. Multiplying the PDE with a test function, <picture><source srcset="form_7299_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h \in V_\Omega^h$" src="form_7299.png"/></picture>, and integrating by parts over <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>, as usual, gives us  </p><p class="formulaDsp">
-<picture><source srcset="form_7300_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<p> and <picture><source srcset="form_7548_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\overline{T}$" src="form_7548.png"/></picture> denotes the closure of <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture>. The set <picture><source srcset="form_7549_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{N}_\Omega^h$" src="form_7549.png"/></picture> is sometimes referred to as the "fictitious domain". Since <picture><source srcset="form_7550_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega \subset \mathcal{N}_\Omega^h$" src="form_7550.png"/></picture>, we see that the numerical solution is defined over a slightly larger region than the analytical solution.</p>
+<p>In this type of immersed finite element method, the standard way to apply boundary conditions is using Nitsche's method. Multiplying the PDE with a test function, <picture><source srcset="form_7551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h \in V_\Omega^h$" src="form_7551.png"/></picture>, and integrating by parts over <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>, as usual, gives us  </p><p class="formulaDsp">
+<picture><source srcset="form_7552_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   (\nabla u_h, \nabla v_h)_\Omega - (\partial_n u_h, v_h)_\Gamma = (f,v)_\Omega.
-\end{equation*}" src="form_7300.png"/></picture>
+\end{equation*}" src="form_7552.png"/></picture>
 </p>
-<p> Let <picture><source srcset="form_7301_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma_D &gt; 0$" src="form_7301.png"/></picture> be a scalar penalty parameter and let <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture> be some measure of the local cell size. We now note that the following terms are consistent with the Dirichlet boundary condition:  </p><p class="formulaDsp">
-<picture><source srcset="form_7302_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> Let <picture><source srcset="form_7553_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma_D &gt; 0$" src="form_7553.png"/></picture> be a scalar penalty parameter and let <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture> be some measure of the local cell size. We now note that the following terms are consistent with the Dirichlet boundary condition:  </p><p class="formulaDsp">
+<picture><source srcset="form_7554_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   -(u_h, \partial_n v_h)_\Gamma &amp;= -(u_D, \partial_n v_h)_\Gamma, \\
   \left (\frac{\gamma_D}{h} u_h, v_h \right )_\Gamma &amp;= \left (\frac{\gamma_D}{h}u_D, v_h \right )_\Gamma.
-\end{align*}" src="form_7302.png"/></picture>
+\end{align*}" src="form_7554.png"/></picture>
 </p>
-<p> Thus, we can add these to the weak formulation to enforce the boundary condition. This leads to the following weak formulation: Find <picture><source srcset="form_7303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h \in V_\Omega^h$" src="form_7303.png"/></picture> such that  </p><p class="formulaDsp">
-<picture><source srcset="form_7304_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<p> Thus, we can add these to the weak formulation to enforce the boundary condition. This leads to the following weak formulation: Find <picture><source srcset="form_7555_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h \in V_\Omega^h$" src="form_7555.png"/></picture> such that  </p><p class="formulaDsp">
+<picture><source srcset="form_7556_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   a_h(u_h, v_h) = L_h(v_h), \quad \forall v_h \in V_\Omega^h,
-\end{equation*}" src="form_7304.png"/></picture>
+\end{equation*}" src="form_7556.png"/></picture>
 </p>
 <p> where  </p><p class="formulaDsp">
-<picture><source srcset="form_7305_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<picture><source srcset="form_7557_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   a_h(u_h, v_h) &amp;=  (\nabla u_h, \nabla v_h)_\Omega
                   - (\partial_n u_h, v_h)_\Gamma
                   - (u_h, \partial_n v_h)_\Gamma
@@ -195,95 +195,95 @@
   \\
   L_h(v_h)      &amp;=  (f,v)_\Omega
                   + \left (u_D, \frac{\gamma_D}{h} v_h -\partial_n v_h \right )_\Gamma.
-\end{align*}" src="form_7305.png"/></picture>
+\end{align*}" src="form_7557.png"/></picture>
 </p>
-<p> In this formulation, there is one big difference, compared to a standard boundary-fitted finite element method. On each cell, we need to integrate over the part of the domain and the part of the boundary that falls within the cell. Thus, on each cell intersected by <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, we need special quadrature rules that only integrate over these parts of the cell, that is, over <picture><source srcset="form_7306_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T \cap \Omega$" src="form_7306.png"/></picture> and <picture><source srcset="form_7307_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T \cap \Gamma$" src="form_7307.png"/></picture>. </p><div class="image">
+<p> In this formulation, there is one big difference, compared to a standard boundary-fitted finite element method. On each cell, we need to integrate over the part of the domain and the part of the boundary that falls within the cell. Thus, on each cell intersected by <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>, we need special quadrature rules that only integrate over these parts of the cell, that is, over <picture><source srcset="form_7558_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T \cap \Omega$" src="form_7558.png"/></picture> and <picture><source srcset="form_7559_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T \cap \Gamma$" src="form_7559.png"/></picture>. </p><div class="image">
 <object type="image/svg+xml" data="immersed_quadratures.svg" style="pointer-events: none;"></object>
 </div>
-<p> Since <picture><source srcset="form_7308_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega \cap T$" src="form_7308.png"/></picture> is the part of the cell that lies inside the domain, we shall refer to the following regions  </p><p class="formulaDsp">
-<picture><source srcset="form_7309_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
+<p> Since <picture><source srcset="form_7560_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega \cap T$" src="form_7560.png"/></picture> is the part of the cell that lies inside the domain, we shall refer to the following regions  </p><p class="formulaDsp">
+<picture><source srcset="form_7561_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{align*}
   \{x \in T : \psi(x) &lt; 0 \}, \\
   \{x \in T : \psi(x) &gt; 0 \}, \\
   \{x \in T : \psi(x) = 0 \},
-\end{align*}" src="form_7309.png"/></picture>
+\end{align*}" src="form_7561.png"/></picture>
 </p>
-<p> as the "inside", "outside" and the "surface region" of the cell <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture>.</p>
-<p>The above finite element method that uses the bilinear form <picture><source srcset="form_7310_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_h(\cdot, \cdot)$" src="form_7310.png"/></picture> is sometimes referred to as the "naive weak formulation" because it suffers from the so-called "small cut problem". Depending on how <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> is located relative to <picture><source srcset="form_4024_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{T}_h$" src="form_4024.png"/></picture>, a cut between a cell, <picture><source srcset="form_7311_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T \in \mathcal{T}_h$" src="form_7311.png"/></picture>, and <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> can become arbitrarily small: <picture><source srcset="form_7312_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\Omega \cap T | \rightarrow 0$" src="form_7312.png"/></picture>. For Neumann boundary conditions, the consequence is that the <a class="el" href="DEALGlossary.html#href_anchor">stiffness matrix</a> can become arbitrarily ill-conditioned as the cut-size approaches zero. For a Dirichlet condition, the situation is even worse. For any finite choice of Nitsche constant, <picture><source srcset="form_7313_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma_D$" src="form_7313.png"/></picture>, the bilinear form <picture><source srcset="form_7314_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_h(\cdot,\cdot)$" src="form_7314.png"/></picture> loses coercivity as the size of a cell cut approaches zero. This makes the above weak formulation essentially useless because as we refine we typically can not control how the cells intersect <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>. One way to avoid this problem is to add a so-called ghost penalty term, <picture><source srcset="form_4784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_h$" src="form_4784.png"/></picture>, to the weak formulation (see e.g. <b>[burman_hansbo_2012]</b> and <b>[cutfem_2015]</b>). This leads to the stabilized cut finite element method, which reads: Find <picture><source srcset="form_7303_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h \in V_\Omega^h$" src="form_7303.png"/></picture> such that  </p><p class="formulaDsp">
-<picture><source srcset="form_7315_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<p> as the "inside", "outside" and the "surface region" of the cell <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture>.</p>
+<p>The above finite element method that uses the bilinear form <picture><source srcset="form_7562_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_h(\cdot, \cdot)$" src="form_7562.png"/></picture> is sometimes referred to as the "naive weak formulation" because it suffers from the so-called "small cut problem". Depending on how <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> is located relative to <picture><source srcset="form_4457_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{T}_h$" src="form_4457.png"/></picture>, a cut between a cell, <picture><source srcset="form_7563_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T \in \mathcal{T}_h$" src="form_7563.png"/></picture>, and <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> can become arbitrarily small: <picture><source srcset="form_7564_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\Omega \cap T | \rightarrow 0$" src="form_7564.png"/></picture>. For Neumann boundary conditions, the consequence is that the <a class="el" href="DEALGlossary.html#href_anchor">stiffness matrix</a> can become arbitrarily ill-conditioned as the cut-size approaches zero. For a Dirichlet condition, the situation is even worse. For any finite choice of Nitsche constant, <picture><source srcset="form_7565_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma_D$" src="form_7565.png"/></picture>, the bilinear form <picture><source srcset="form_7566_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_h(\cdot,\cdot)$" src="form_7566.png"/></picture> loses coercivity as the size of a cell cut approaches zero. This makes the above weak formulation essentially useless because as we refine we typically can not control how the cells intersect <picture><source srcset="form_2211_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Gamma$" src="form_2211.png"/></picture>. One way to avoid this problem is to add a so-called ghost penalty term, <picture><source srcset="form_4784_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_h$" src="form_4784.png"/></picture>, to the weak formulation (see e.g. <b>[burman_hansbo_2012]</b> and <b>[cutfem_2015]</b>). This leads to the stabilized cut finite element method, which reads: Find <picture><source srcset="form_7555_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h \in V_\Omega^h$" src="form_7555.png"/></picture> such that  </p><p class="formulaDsp">
+<picture><source srcset="form_7567_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   A_h(u_h, v_h) = L_h(v_h), \quad \forall v_h \in V_\Omega^h,
-\end{equation*}" src="form_7315.png"/></picture>
+\end{equation*}" src="form_7567.png"/></picture>
 </p>
 <p> where  </p><p class="formulaDsp">
-<picture><source srcset="form_7316_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<picture><source srcset="form_7568_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   A_h(u_h,v_h) = a_h(u_h,v_h) + g_h(u_h, v_h).
-\end{equation*}" src="form_7316.png"/></picture>
+\end{equation*}" src="form_7568.png"/></picture>
 </p>
-<p> The point of this ghost penalty is that it makes the numerical method essentially independent of how <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> relates to the background mesh. In particular, <picture><source srcset="form_7317_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_h$" src="form_7317.png"/></picture> can be shown to be continuous and coercive, with constants that do not depend on how <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture> intersects <picture><source srcset="form_7288_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{T}^h$" src="form_7288.png"/></picture>. To define the ghost penalty, let <picture><source srcset="form_7318_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{T}_\Gamma^h$" src="form_7318.png"/></picture> be the set of intersected cells:  </p><p class="formulaDsp">
-<picture><source srcset="form_7319_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<p> The point of this ghost penalty is that it makes the numerical method essentially independent of how <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> relates to the background mesh. In particular, <picture><source srcset="form_7569_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$A_h$" src="form_7569.png"/></picture> can be shown to be continuous and coercive, with constants that do not depend on how <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture> intersects <picture><source srcset="form_7540_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{T}^h$" src="form_7540.png"/></picture>. To define the ghost penalty, let <picture><source srcset="form_7570_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{T}_\Gamma^h$" src="form_7570.png"/></picture> be the set of intersected cells:  </p><p class="formulaDsp">
+<picture><source srcset="form_7571_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   \mathcal{T}_{\Gamma}^h = \{ T \in \mathcal{T}_{\Omega}^{h} : T \cap \Gamma \neq \emptyset \},
-\end{equation*}" src="form_7319.png"/></picture>
+\end{equation*}" src="form_7571.png"/></picture>
 </p>
-<p> and let <picture><source srcset="form_7320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}_h$" src="form_7320.png"/></picture> denote the interior faces of the intersected cells in the active mesh:  </p><p class="formulaDsp">
-<picture><source srcset="form_7321_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<p> and let <picture><source srcset="form_7572_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}_h$" src="form_7572.png"/></picture> denote the interior faces of the intersected cells in the active mesh:  </p><p class="formulaDsp">
+<picture><source srcset="form_7573_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   \mathcal{F}_h = \{ F = \overline{T}_+ \cap \overline{T}_- : \,
                      T_+ \in \mathcal{T}_{\Gamma}^h, \,
                      T_- \in \mathcal{T}_{\Omega}^h
                   \}.
-\end{equation*}" src="form_7321.png"/></picture>
+\end{equation*}" src="form_7573.png"/></picture>
 </p>
  <div class="image">
 <object type="image/svg+xml" data="step-85-ghost-faces.svg" style="pointer-events: none;"></object>
 </div>
 <p> The ghost penalty acts on these faces and reads  </p><p class="formulaDsp">
-<picture><source srcset="form_7322_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<picture><source srcset="form_7574_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   g_h(u_h,v_h) = \gamma_A \sum_{F \in \mathcal{F}_h} g_F(u_h, v_h),
-\end{equation*}" src="form_7322.png"/></picture>
+\end{equation*}" src="form_7574.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_7323_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_F$" src="form_7323.png"/></picture> is the face-wise ghost penalty:  </p><p class="formulaDsp">
-<picture><source srcset="form_7324_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<p> where <picture><source srcset="form_7575_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_F$" src="form_7575.png"/></picture> is the face-wise ghost penalty:  </p><p class="formulaDsp">
+<picture><source srcset="form_7576_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   g_F(u_h, v_h) = \gamma_A \sum_{k=0}^p \left(\frac{h_F^{2k-1}}{k!^2}[\partial_n^k u_h], [\partial_n^k v_h] \right)_F.
-\end{equation*}" src="form_7324.png"/></picture>
+\end{equation*}" src="form_7576.png"/></picture>
 </p>
-<p> Here, <picture><source srcset="form_7325_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma_A$" src="form_7325.png"/></picture> is a penalty parameter and <picture><source srcset="form_2192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_F$" src="form_2192.png"/></picture> is some measure of the face size. We see that <picture><source srcset="form_7323_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_F$" src="form_7323.png"/></picture> penalizes the jumps in the face-normal derivatives, <picture><source srcset="form_7326_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_n^k$" src="form_7326.png"/></picture>, over <picture><source srcset="form_7327_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F = \overline{T}_+ \cap \overline{T}_-$" src="form_7327.png"/></picture>. Since we include all normal derivatives up to the polynomial degree, we weakly force the piecewise polynomial to behave as a single polynomial over <picture><source srcset="form_7328_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\overline{T}_+ \cup \overline{T}_-$" src="form_7328.png"/></picture>. Hand-wavingly speaking, this is the reason why we obtain a cut-independent method when we enforce <picture><source srcset="form_7329_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_F(u_h, v_h) = 0$" src="form_7329.png"/></picture> over the faces in <picture><source srcset="form_7320_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}_h$" src="form_7320.png"/></picture>. Here, we shall use a continuous space of <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture>-elements, so the ghost penalty is reduced to  </p><p class="formulaDsp">
-<picture><source srcset="form_7330_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<p> Here, <picture><source srcset="form_7577_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\gamma_A$" src="form_7577.png"/></picture> is a penalty parameter and <picture><source srcset="form_2192_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h_F$" src="form_2192.png"/></picture> is some measure of the face size. We see that <picture><source srcset="form_7575_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_F$" src="form_7575.png"/></picture> penalizes the jumps in the face-normal derivatives, <picture><source srcset="form_7578_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial_n^k$" src="form_7578.png"/></picture>, over <picture><source srcset="form_7579_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$F = \overline{T}_+ \cap \overline{T}_-$" src="form_7579.png"/></picture>. Since we include all normal derivatives up to the polynomial degree, we weakly force the piecewise polynomial to behave as a single polynomial over <picture><source srcset="form_7580_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\overline{T}_+ \cup \overline{T}_-$" src="form_7580.png"/></picture>. Hand-wavingly speaking, this is the reason why we obtain a cut-independent method when we enforce <picture><source srcset="form_7581_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$g_F(u_h, v_h) = 0$" src="form_7581.png"/></picture> over the faces in <picture><source srcset="form_7572_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{F}_h$" src="form_7572.png"/></picture>. Here, we shall use a continuous space of <picture><source srcset="form_68_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Q_1$" src="form_68.png"/></picture>-elements, so the ghost penalty is reduced to  </p><p class="formulaDsp">
+<picture><source srcset="form_7582_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   g_h(u_h,v_h) = \gamma_A \sum_{F \in \mathcal{F}_h} (h_F [\partial_n u_h], [\partial_n v_h])_F.
-\end{equation*}" src="form_7330.png"/></picture>
+\end{equation*}" src="form_7582.png"/></picture>
 </p>
 <p><a class="anchor" id="DiscreteLevelSetFunction"></a></p><h3>Discrete Level Set <a class="el" href="classFunction.html">Function</a></h3>
-<p>A typical use case of a level set method is a problem where the domain is advected in a velocity field, such that the domain deforms with time. For such a problem, one would typically solve for an approximation of the level set function, <picture><source srcset="form_7331_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_h \in V^h$" src="form_7331.png"/></picture>, in a separate finite element space over the whole background mesh:  </p><p class="formulaDsp">
-<picture><source srcset="form_7332_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<p>A typical use case of a level set method is a problem where the domain is advected in a velocity field, such that the domain deforms with time. For such a problem, one would typically solve for an approximation of the level set function, <picture><source srcset="form_7583_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi_h \in V^h$" src="form_7583.png"/></picture>, in a separate finite element space over the whole background mesh:  </p><p class="formulaDsp">
+<picture><source srcset="form_7584_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   V^h = \{ v \in C(\mathcal{N}^h) : v \in Q_p(T), \, T \in \mathcal{T}^h \},
-\end{equation*}" src="form_7332.png"/></picture>
+\end{equation*}" src="form_7584.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_7333_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{N}^h = \bigcup_{T \in \mathcal{T}^h} \overline{T}$" src="form_7333.png"/></picture>. Even if we solve a much simpler problem with a stationary domain in this tutorial, we shall, just to illustrate, still use a discrete level set function for the Poisson problem. Technically, this is a so-called "variational crime" because we are actually not using the bilinear form <picture><source srcset="form_7334_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_h$" src="form_7334.png"/></picture> but instead  </p><p class="formulaDsp">
-<picture><source srcset="form_7335_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
+<p> where <picture><source srcset="form_7585_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathcal{N}^h = \bigcup_{T \in \mathcal{T}^h} \overline{T}$" src="form_7585.png"/></picture>. Even if we solve a much simpler problem with a stationary domain in this tutorial, we shall, just to illustrate, still use a discrete level set function for the Poisson problem. Technically, this is a so-called "variational crime" because we are actually not using the bilinear form <picture><source srcset="form_7586_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_h$" src="form_7586.png"/></picture> but instead  </p><p class="formulaDsp">
+<picture><source srcset="form_7587_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{equation*}
   a_h^\star(u_h, v_h) = (\nabla u_h, \nabla v_h)_{\Omega_h}
                       - (\partial_n u_h, v_h)_{\Gamma_h} + \ldots
-\end{equation*}" src="form_7335.png"/></picture>
+\end{equation*}" src="form_7587.png"/></picture>
 </p>
-<p> This is an approximation of <picture><source srcset="form_7334_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$a_h$" src="form_7334.png"/></picture> since we integrate over the approximations of the geometry that we get via the discrete level set function:  </p><p class="formulaDsp">
/usr/share/doc/packages/dealii/doxygen/deal.II/step_9.html differs (HTML document, UTF-8 Unicode text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/step_9.html	2024-03-17 21:57:50.275276494 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/step_9.html	2024-03-17 21:57:50.275276494 +0000
@@ -137,7 +137,7 @@
   \beta \cdot \nabla u = f,
 \]" src="form_7604.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> is a vector field that describes the advection direction and speed (which may be dependent on the space variables if <picture><source srcset="form_2774_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta=\beta(\mathbf x)$" src="form_2774.png"/></picture>), <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture> is a source function, and <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> is the solution. The physical process that this equation describes is that of a given flow field <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture>, with which another substance is transported, the density or concentration of which is given by <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture>. The equation does not contain diffusion of this second species within its carrier substance, but there are source terms.</p>
+<p> where <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> is a vector field that describes the advection direction and speed (which may be dependent on the space variables if <picture><source srcset="form_2800_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta=\beta(\mathbf x)$" src="form_2800.png"/></picture>), <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture> is a source function, and <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> is the solution. The physical process that this equation describes is that of a given flow field <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture>, with which another substance is transported, the density or concentration of which is given by <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture>. The equation does not contain diffusion of this second species within its carrier substance, but there are source terms.</p>
 <p>It is obvious that at the inflow, the above equation needs to be augmented by boundary conditions:  </p><p class="formulaDsp">
 <picture><source srcset="form_7605_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   u = g \qquad\qquad \mathrm{on}\ \partial\Omega_-,
@@ -150,12 +150,12 @@
   \{{\mathbf x}\in \partial\Omega: \beta\cdot{\mathbf n}({\mathbf x}) &lt; 0\},
 \]" src="form_7607.png"/></picture>
 </p>
-<p> and <picture><source srcset="form_7608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf n}({\mathbf x})$" src="form_7608.png"/></picture> being the outward normal to the domain at point <picture><source srcset="form_7609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf x}\in\partial\Omega$" src="form_7609.png"/></picture>. This definition is quite intuitive, since as <picture><source srcset="form_3188_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf n}$" src="form_3188.png"/></picture> points outward, the scalar product with <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> can only be negative if the transport direction <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> points inward, i.e. at the inflow boundary. The mathematical theory states that we must not pose any boundary condition on the outflow part of the boundary.</p>
+<p> and <picture><source srcset="form_7608_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf n}({\mathbf x})$" src="form_7608.png"/></picture> being the outward normal to the domain at point <picture><source srcset="form_7609_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf x}\in\partial\Omega$" src="form_7609.png"/></picture>. This definition is quite intuitive, since as <picture><source srcset="form_3092_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf n}$" src="form_3092.png"/></picture> points outward, the scalar product with <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> can only be negative if the transport direction <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> points inward, i.e. at the inflow boundary. The mathematical theory states that we must not pose any boundary condition on the outflow part of the boundary.</p>
 <p>Unfortunately, the equation stated above cannot be solved in a stable way using the standard finite element method. The problem is that solutions to this equation possess insufficient regularity perpendicular to the transport direction: while they are smooth along the streamlines defined by the "wind field" <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture>, they may be discontinuous perpendicular to this direction. This is easy to understand: what the equation <picture><source srcset="form_7610_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta \cdot
-\nabla u = f$" src="form_7610.png"/></picture> means is in essence that the <em>rate of change of <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> in direction <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> equals <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_15.png"/></picture></em>. But the equation has no implications for the derivatives in the perpendicular direction, and consequently if <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> is discontinuous at a point on the inflow boundary, then this discontinuity will simply be transported along the streamline of the wind field that starts at this boundary point. These discontinuities lead to numerical instabilities that make a stable solution by a standard continuous finite element discretization impossible.</p>
+\nabla u = f$" src="form_7610.png"/></picture> means is in essence that the <em>rate of change of <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> in direction <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture> equals <picture><source srcset="form_12_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$f$" src="form_12.png"/></picture></em>. But the equation has no implications for the derivatives in the perpendicular direction, and consequently if <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> is discontinuous at a point on the inflow boundary, then this discontinuity will simply be transported along the streamline of the wind field that starts at this boundary point. These discontinuities lead to numerical instabilities that make a stable solution by a standard continuous finite element discretization impossible.</p>
 <p>A standard approach to address this difficulty is the <em>"streamline-upwind
-Petrov-Galerkin"</em> (SUPG) method, sometimes also called the streamline diffusion method. A good explanation of the method can be found in <b>[elman2005]</b> . Formally, this method replaces the step in which we derive the weak form of the differential equation from the strong form: Instead of multiplying the equation by a test function <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> and integrating over the domain, we instead multiply by <picture><source srcset="form_7611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v + \delta \beta\cdot\nabla v$" src="form_7611.png"/></picture>, where <picture><source srcset="form_180_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta$" src="form_180.png"/></picture> is a parameter that is chosen in the range of the (local) mesh width <picture><source srcset="form_1230_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1230.png"/></picture>; good results are usually obtained by setting <picture><source srcset="form_7612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta=0.1h$" src="form_7612.png"/></picture>. (Why this is called "streamline diffusion" will be explained below; for the moment, let us simply take for granted that this is how we derive a stable discrete formulation.) The value for <picture><source srcset="form_180_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta$" src="form_180.png"/></picture> here is small enough that we do not introduce excessive diffusion, but large enough that the resulting problem is well-posed.</p>
-<p>Using the test functions as defined above, an initial weak form of the problem would ask for finding a function <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> so that for all test functions <picture><source srcset="form_2788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2788.png"/></picture> we have  </p><p class="formulaDsp">
+Petrov-Galerkin"</em> (SUPG) method, sometimes also called the streamline diffusion method. A good explanation of the method can be found in <b>[elman2005]</b> . Formally, this method replaces the step in which we derive the weak form of the differential equation from the strong form: Instead of multiplying the equation by a test function <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> and integrating over the domain, we instead multiply by <picture><source srcset="form_7611_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v + \delta \beta\cdot\nabla v$" src="form_7611.png"/></picture>, where <picture><source srcset="form_154_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta$" src="form_154.png"/></picture> is a parameter that is chosen in the range of the (local) mesh width <picture><source srcset="form_1229_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$h$" src="form_1229.png"/></picture>; good results are usually obtained by setting <picture><source srcset="form_7612_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta=0.1h$" src="form_7612.png"/></picture>. (Why this is called "streamline diffusion" will be explained below; for the moment, let us simply take for granted that this is how we derive a stable discrete formulation.) The value for <picture><source srcset="form_154_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta$" src="form_154.png"/></picture> here is small enough that we do not introduce excessive diffusion, but large enough that the resulting problem is well-posed.</p>
+<p>Using the test functions as defined above, an initial weak form of the problem would ask for finding a function <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> so that for all test functions <picture><source srcset="form_2781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2781.png"/></picture> we have  </p><p class="formulaDsp">
 <picture><source srcset="form_7613_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (\beta \cdot \nabla u_h, v_h + \delta \beta\cdot\nabla v_h)_\Omega
   =
@@ -169,14 +169,14 @@
   (g, w_h)_{\partial\Omega_-}
 \]" src="form_7614.png"/></picture>
 </p>
-<p> for all test functions <picture><source srcset="form_3227_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_h$" src="form_3227.png"/></picture> that live on the boundary and that are from a suitable test space. It turns out that a suitable space of test functions happens to be <picture><source srcset="form_7615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta\cdot {\mathbf n}$" src="form_7615.png"/></picture> times the traces of the functions <picture><source srcset="form_2788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2788.png"/></picture> in the test space we already use for the differential equation in the domain. Thus, we require that for all test functions <picture><source srcset="form_2788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2788.png"/></picture> we have  </p><p class="formulaDsp">
+<p> for all test functions <picture><source srcset="form_3113_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$w_h$" src="form_3113.png"/></picture> that live on the boundary and that are from a suitable test space. It turns out that a suitable space of test functions happens to be <picture><source srcset="form_7615_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta\cdot {\mathbf n}$" src="form_7615.png"/></picture> times the traces of the functions <picture><source srcset="form_2781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2781.png"/></picture> in the test space we already use for the differential equation in the domain. Thus, we require that for all test functions <picture><source srcset="form_2781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2781.png"/></picture> we have  </p><p class="formulaDsp">
 <picture><source srcset="form_7616_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (u_h, \beta\cdot {\mathbf n} v_h)_{\partial\Omega_-}
   =
   (g, \beta\cdot {\mathbf n} v_h)_{\partial\Omega_-}.
 \]" src="form_7616.png"/></picture>
 </p>
-<p> Without attempting a justification (see again the literature on the finite element method in general, and the streamline diffusion method in particular), we can combine the equations for the differential equation and the boundary values in the following weak formulation of our stabilized problem: find a discrete function <picture><source srcset="form_1232_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1232.png"/></picture> such that for all discrete test functions <picture><source srcset="form_2788_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2788.png"/></picture> there holds  </p><p class="formulaDsp">
+<p> Without attempting a justification (see again the literature on the finite element method in general, and the streamline diffusion method in particular), we can combine the equations for the differential equation and the boundary values in the following weak formulation of our stabilized problem: find a discrete function <picture><source srcset="form_1231_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h$" src="form_1231.png"/></picture> such that for all discrete test functions <picture><source srcset="form_2781_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v_h$" src="form_2781.png"/></picture> there holds  </p><p class="formulaDsp">
 <picture><source srcset="form_7617_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   (\beta \cdot \nabla u_h, v_h + \delta \beta\cdot\nabla v_h)_\Omega
   -
@@ -196,7 +196,7 @@
   (\varphi_i, \beta\cdot {\mathbf n} \varphi_j)_{\partial\Omega_-},
 \]" src="form_7618.png"/></picture>
 </p>
-<p> with basis functions <picture><source srcset="form_203_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i,\varphi_j$" src="form_203.png"/></picture>. However, this is a pitfall that happens to every numerical analyst at least once (including the author): we have here expanded the solution <picture><source srcset="form_7619_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h = \sum_i U_i \varphi_i$" src="form_7619.png"/></picture>, but if we do so, we will have to solve the problem  </p><p class="formulaDsp">
+<p> with basis functions <picture><source srcset="form_177_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_i,\varphi_j$" src="form_177.png"/></picture>. However, this is a pitfall that happens to every numerical analyst at least once (including the author): we have here expanded the solution <picture><source srcset="form_7619_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h = \sum_i U_i \varphi_i$" src="form_7619.png"/></picture>, but if we do so, we will have to solve the problem  </p><p class="formulaDsp">
 <picture><source srcset="form_7620_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   U^T A = F^T,
 \]" src="form_7620.png"/></picture>
@@ -275,9 +275,9 @@
 </p>
 <p> In other words, the unusual choice of test function is equivalent to the addition of term to the strong form that corresponds to a second order (i.e., diffusion) differential operator in the direction of the wind field <picture><source srcset="form_721_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\beta$" src="form_721.png"/></picture>, i.e., in "streamline direction". A fuller account would also have to explore the effect of the test function on boundary values and why it is necessary to also use the same test function for the right hand side, but the discussion above might make clear where the name "streamline diffusion" for the method originates from.</p>
 <p><a class="anchor" id="WhyisthismethodalsocalledPetrovGalerkin"></a></p><h3>Why is this method also called "Petrov-Galerkin"?</h3>
-<p>A "Galerkin method" is one where one obtains the weak formulation by multiplying the equation by a test function <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> (and then integrating over <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>) where the functions <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> are from the same space as the solution <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> (though possibly with different boundary values). But this is not strictly necessary: One could also imagine choosing the test functions from a different set of functions, as long as that different set has "as many dimensions" as the original set of functions so that we end up with as many independent equations as there are degrees of freedom (where all of this needs to be appropriately defined in the infinite-dimensional case). Methods that make use of this possibility (i.e., choose the set of test functions differently than the set of solutions) are called "Petrov-Galerkin" methods. In the current case, the test functions all have the form <picture><source srcset="form_7633_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v+\beta\cdot\nabla v$" src="form_7633.png"/></picture> where <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> is from the set of solutions.</p>
+<p>A "Galerkin method" is one where one obtains the weak formulation by multiplying the equation by a test function <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> (and then integrating over <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>) where the functions <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> are from the same space as the solution <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> (though possibly with different boundary values). But this is not strictly necessary: One could also imagine choosing the test functions from a different set of functions, as long as that different set has "as many dimensions" as the original set of functions so that we end up with as many independent equations as there are degrees of freedom (where all of this needs to be appropriately defined in the infinite-dimensional case). Methods that make use of this possibility (i.e., choose the set of test functions differently than the set of solutions) are called "Petrov-Galerkin" methods. In the current case, the test functions all have the form <picture><source srcset="form_7633_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v+\beta\cdot\nabla v$" src="form_7633.png"/></picture> where <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> is from the set of solutions.</p>
 <p><a class="anchor" id="Whyisthismethodalsocalledstreamlineupwind"></a></p><h3>Why is this method also called "streamline-upwind"?</h3>
-<p><a href="https://en.wikipedia.org/wiki/Upwind_scheme">Upwind methods</a> have a long history in the derivation of stabilized schemes for advection equations. Generally, the idea is that instead of looking at a function "here", we look at it a small distance further "upstream" or "upwind", i.e., where the information "here" originally came from. This might suggest not considering <picture><source srcset="form_25_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)$" src="form_25.png"/></picture>, but something like <picture><source srcset="form_7634_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x - \delta \beta)$" src="form_7634.png"/></picture>. Or, equivalently upon integration, we could evaluate <picture><source srcset="form_25_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)$" src="form_25.png"/></picture> and instead consider <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> a bit downstream: <picture><source srcset="form_7635_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v(\mathbf x+\delta \beta)$" src="form_7635.png"/></picture>. This would be cumbersome for a variety of reasons: First, we would have to define what <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> should be if <picture><source srcset="form_7636_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x + \delta \beta$" src="form_7636.png"/></picture> happens to be outside <picture><source srcset="form_168_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_168.png"/></picture>; second, computing integrals numerically would be much more awkward since we no longer evaluate <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> and <picture><source srcset="form_925_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_925.png"/></picture> at the same quadrature points. But since we assume that <picture><source srcset="form_180_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta$" src="form_180.png"/></picture> is small, we can do a Taylor expansion:  </p><p class="formulaDsp">
+<p><a href="https://en.wikipedia.org/wiki/Upwind_scheme">Upwind methods</a> have a long history in the derivation of stabilized schemes for advection equations. Generally, the idea is that instead of looking at a function "here", we look at it a small distance further "upstream" or "upwind", i.e., where the information "here" originally came from. This might suggest not considering <picture><source srcset="form_40_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)$" src="form_40.png"/></picture>, but something like <picture><source srcset="form_7634_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x - \delta \beta)$" src="form_7634.png"/></picture>. Or, equivalently upon integration, we could evaluate <picture><source srcset="form_40_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(\mathbf x)$" src="form_40.png"/></picture> and instead consider <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> a bit downstream: <picture><source srcset="form_7635_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v(\mathbf x+\delta \beta)$" src="form_7635.png"/></picture>. This would be cumbersome for a variety of reasons: First, we would have to define what <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> should be if <picture><source srcset="form_7636_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf x + \delta \beta$" src="form_7636.png"/></picture> happens to be outside <picture><source srcset="form_142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\Omega$" src="form_142.png"/></picture>; second, computing integrals numerically would be much more awkward since we no longer evaluate <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> and <picture><source srcset="form_934_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$v$" src="form_934.png"/></picture> at the same quadrature points. But since we assume that <picture><source srcset="form_154_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\delta$" src="form_154.png"/></picture> is small, we can do a Taylor expansion:  </p><p class="formulaDsp">
 <picture><source srcset="form_7637_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   v(\mathbf x + \delta \beta)
   \approx
@@ -288,7 +288,7 @@
 <p><a class="anchor" id="Solvingthelinearsystemthatcorrespondstotheadvectionequation"></a></p><h3>Solving the linear system that corresponds to the advection equation</h3>
 <p>As the resulting matrix is no longer symmetric positive definite, we cannot use the usual Conjugate Gradient method (implemented in the <a class="el" href="classSolverCG.html">SolverCG</a> class) to solve the system. Instead, we use the GMRES (Generalized Minimum RESidual) method (implemented in <a class="el" href="classSolverGMRES.html">SolverGMRES</a>) that is suitable for problems of the kind we have here.</p>
 <p><a class="anchor" id="Thetestcase"></a></p><h3>The test case</h3>
-<p>For the problem which we will solve in this tutorial program, we use the following domain and functions (in <picture><source srcset="form_6688_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=2$" src="form_6688.png"/></picture> space dimensions):  </p><p class="formulaDsp">
+<p>For the problem which we will solve in this tutorial program, we use the following domain and functions (in <picture><source srcset="form_6640_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d=2$" src="form_6640.png"/></picture> space dimensions):  </p><p class="formulaDsp">
 <picture><source srcset="form_7638_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\begin{eqnarray*}
   \Omega &amp;=&amp; [-1,1]^d \\
   \beta({\mathbf x})
@@ -349,15 +349,15 @@
 \]" src="form_7645.png"/></picture>
 </p>
 <p> which itself is related to the error size in the energy norm.</p>
-<p>The problem with this error indicator in the present case is that it assumes that the exact solution possesses second derivatives. This is already questionable for solutions to Laplace's problem in some cases, although there most problems allow solutions in <picture><source srcset="form_2778_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^2$" src="form_2778.png"/></picture>. If solutions are only in <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture>, then the second derivatives would be singular in some parts (of lower dimension) of the domain and the error indicators would not reduce there under mesh refinement. Thus, the algorithm would continuously refine the cells around these parts, i.e. would refine into points or lines (in 2d).</p>
-<p>However, for the present case, solutions are usually not even in <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture> (and this missing regularity is not the exceptional case as for Laplace's equation), so the error indicator described above is not really applicable. We will thus develop an indicator that is based on a discrete approximation of the gradient. Although the gradient often does not exist, this is the only criterion available to us, at least as long as we use continuous elements as in the present example. To start with, we note that given two cells <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, <picture><source srcset="form_2155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K'$" src="form_2155.png"/></picture> of which the centers are connected by the vector <picture><source srcset="form_7646_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf y}_{KK'}$" src="form_7646.png"/></picture>, we can approximate the directional derivative of a function <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> as follows:  </p><p class="formulaDsp">
+<p>The problem with this error indicator in the present case is that it assumes that the exact solution possesses second derivatives. This is already questionable for solutions to Laplace's problem in some cases, although there most problems allow solutions in <picture><source srcset="form_2802_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^2$" src="form_2802.png"/></picture>. If solutions are only in <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture>, then the second derivatives would be singular in some parts (of lower dimension) of the domain and the error indicators would not reduce there under mesh refinement. Thus, the algorithm would continuously refine the cells around these parts, i.e. would refine into points or lines (in 2d).</p>
+<p>However, for the present case, solutions are usually not even in <picture><source srcset="form_69_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$H^1$" src="form_69.png"/></picture> (and this missing regularity is not the exceptional case as for Laplace's equation), so the error indicator described above is not really applicable. We will thus develop an indicator that is based on a discrete approximation of the gradient. Although the gradient often does not exist, this is the only criterion available to us, at least as long as we use continuous elements as in the present example. To start with, we note that given two cells <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, <picture><source srcset="form_2163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K'$" src="form_2163.png"/></picture> of which the centers are connected by the vector <picture><source srcset="form_7646_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf y}_{KK'}$" src="form_7646.png"/></picture>, we can approximate the directional derivative of a function <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> as follows:  </p><p class="formulaDsp">
 <picture><source srcset="form_7647_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \frac{{\mathbf y}_{KK'}^T}{|{\mathbf y}_{KK'}|} \nabla u
   \approx
   \frac{u(K') - u(K)}{|{\mathbf y}_{KK'}|},
 \]" src="form_7647.png"/></picture>
 </p>
-<p> where <picture><source srcset="form_7648_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(K)$" src="form_7648.png"/></picture> and <picture><source srcset="form_7649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(K')$" src="form_7649.png"/></picture> denote <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> evaluated at the centers of the respective cells. We now multiply the above approximation by <picture><source srcset="form_7650_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf y}_{KK'}/|{\mathbf y}_{KK'}|$" src="form_7650.png"/></picture> and sum over all neighbors <picture><source srcset="form_2155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K'$" src="form_2155.png"/></picture> of <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>:  </p><p class="formulaDsp">
+<p> where <picture><source srcset="form_7648_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(K)$" src="form_7648.png"/></picture> and <picture><source srcset="form_7649_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u(K')$" src="form_7649.png"/></picture> denote <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> evaluated at the centers of the respective cells. We now multiply the above approximation by <picture><source srcset="form_7650_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf y}_{KK'}/|{\mathbf y}_{KK'}|$" src="form_7650.png"/></picture> and sum over all neighbors <picture><source srcset="form_2163_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K'$" src="form_2163.png"/></picture> of <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>:  </p><p class="formulaDsp">
 <picture><source srcset="form_7651_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \underbrace{
     \left(\sum_{K'} \frac{{\mathbf y}_{KK'} {\mathbf y}_{KK'}^T}
@@ -369,7 +369,7 @@
   \frac{u(K') - u(K)}{|{\mathbf y}_{KK'}|}.
 \]" src="form_7651.png"/></picture>
 </p>
-<p> If the vectors <picture><source srcset="form_7646_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf y}_{KK'}$" src="form_7646.png"/></picture> connecting <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> with its neighbors span the whole space (i.e. roughly: <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> has neighbors in all directions), then the term in parentheses in the left hand side expression forms a regular matrix, which we can invert to obtain an approximation of the gradient of <picture><source srcset="form_370_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_370.png"/></picture> on <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>:  </p><p class="formulaDsp">
+<p> If the vectors <picture><source srcset="form_7646_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="${\mathbf y}_{KK'}$" src="form_7646.png"/></picture> connecting <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> with its neighbors span the whole space (i.e. roughly: <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture> has neighbors in all directions), then the term in parentheses in the left hand side expression forms a regular matrix, which we can invert to obtain an approximation of the gradient of <picture><source srcset="form_355_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u$" src="form_355.png"/></picture> on <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>:  </p><p class="formulaDsp">
 <picture><source srcset="form_7652_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \nabla u
   \approx
/usr/share/doc/packages/dealii/doxygen/deal.II/structCellData.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/structCellData.html	2024-03-17 21:57:50.311276716 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/structCellData.html	2024-03-17 21:57:50.315276741 +0000
@@ -127,7 +127,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> structdim&gt;<br />
-struct CellData&lt; structdim &gt;</div><p>The <a class="el" href="structCellData.html">CellData</a> class (and the related <a class="el" href="structSubCellData.html">SubCellData</a> class) is used to provide a comprehensive, but minimal, description of the cells when creating a triangulation via <a class="el" href="classTriangulation.html#href_anchor">Triangulation::create_triangulation()</a>. Specifically, each <a class="el" href="structCellData.html">CellData</a> object &ndash; describing one cell in a triangulation &ndash; has member variables for indices of the <picture><source srcset="form_1376_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^d$" src="form_1376.png"/></picture> vertices (the actual coordinates of the vertices are described in a separate vector passed to <a class="el" href="classTriangulation.html#href_anchor">Triangulation::create_triangulation()</a>, so the <a class="el" href="structCellData.html">CellData</a> object only needs to store indices into that vector), the material id of the cell that can be used in applications to describe which part of the domain a cell belongs to (see <a class="el" href="DEALGlossary.html#href_anchor">the glossary entry on material ids</a>), and a manifold id that is used to describe the geometry object that is responsible for this cell (see <a class="el" href="DEALGlossary.html#href_anchor">the glossary entry on manifold ids</a>) to describe the manifold this object belongs to.</p>
+struct CellData&lt; structdim &gt;</div><p>The <a class="el" href="structCellData.html">CellData</a> class (and the related <a class="el" href="structSubCellData.html">SubCellData</a> class) is used to provide a comprehensive, but minimal, description of the cells when creating a triangulation via <a class="el" href="classTriangulation.html#href_anchor">Triangulation::create_triangulation()</a>. Specifically, each <a class="el" href="structCellData.html">CellData</a> object &ndash; describing one cell in a triangulation &ndash; has member variables for indices of the <picture><source srcset="form_1377_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^d$" src="form_1377.png"/></picture> vertices (the actual coordinates of the vertices are described in a separate vector passed to <a class="el" href="classTriangulation.html#href_anchor">Triangulation::create_triangulation()</a>, so the <a class="el" href="structCellData.html">CellData</a> object only needs to store indices into that vector), the material id of the cell that can be used in applications to describe which part of the domain a cell belongs to (see <a class="el" href="DEALGlossary.html#href_anchor">the glossary entry on material ids</a>), and a manifold id that is used to describe the geometry object that is responsible for this cell (see <a class="el" href="DEALGlossary.html#href_anchor">the glossary entry on manifold ids</a>) to describe the manifold this object belongs to.</p>
 <p>This structure is also used to represent data for faces and edges when used as a member of the <a class="el" href="structSubCellData.html">SubCellData</a> class. In this case, the template argument <code>structdim</code> of an object will be less than the dimension <code>dim</code> of the triangulation. If this is so, then <a class="el" href="#href_anchor">vertices</a> array represents the indices of the vertices of one face or edge of one of the cells passed to <a class="el" href="classTriangulation.html#href_anchor">Triangulation::create_triangulation()</a>. Furthermore, for faces the material id has no meaning, and the <code>material_id</code> field is reused to store a <code>boundary_id</code> instead to designate which part of the boundary the face or edge belongs to (see <a class="el" href="DEALGlossary.html#href_anchor">the glossary entry on boundary ids</a>).</p>
 <p>An example showing how this class can be used is in the <code>create_coarse_grid()</code> function of <a class="el" href="step_14.html">step-14</a>. There are also many more use cases in the implementation of the functions of the <a class="el" href="namespaceGridGenerator.html">GridGenerator</a> namespace. </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/structColorEnriched_1_1Helper.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/structColorEnriched_1_1Helper.html	2024-03-17 21:57:50.347276939 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/structColorEnriched_1_1Helper.html	2024-03-17 21:57:50.351276963 +0000
@@ -141,7 +141,7 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> dim, <a class="el" href="classint.html">int</a> spacedim = dim&gt;<br />
 struct ColorEnriched::Helper&lt; dim, spacedim &gt;</div><p><a class="el" href="structColorEnriched_1_1Helper.html">ColorEnriched::Helper</a> class creates a collection of <a class="el" href="classFE__Enriched.html">FE_Enriched</a> finite elements (<a class="el" href="classhp_1_1FECollection.html">hp::FECollection</a>) to be used with <a class="el" href="classDoFHandler.html">DoFHandler</a> in a domain with multiple, possibly overlapping, sub-domains with individual enrichment functions. Note that the overlapping regions may have multiple enrichment functions associated with them. This is implemented using a general constructor of <a class="el" href="classFE__Enriched.html">FE_Enriched</a> object which allows different enrichment functions.</p>
-<p>Consider a domain with multiple enriched sub-domains which are disjoint i.e. not connected with each other. To ensure <picture><source srcset="form_1094_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1094.png"/></picture> continuity at the interface between the enriched sub-domain (characterized by a single enrichment function) and the non-enriched domain, we can use an <a class="el" href="classFE__Enriched.html">FE_Enriched</a> object in the enriched sub-domain and in the non-enriched domain a standard finite element (eg: <a class="el" href="classFE__Q.html">FE_Q</a>) wrapped into an <a class="el" href="classFE__Enriched.html">FE_Enriched</a> object (which internally uses a dominating <a class="el" href="classFE__Nothing.html">FE_Nothing</a> object). Refer to the documentation on <a class="el" href="classFE__Enriched.html">FE_Enriched</a> for more information on this. It is to be noted that an <a class="el" href="classFE__Enriched.html">FE_Enriched</a> object is constructed using a base FE (<a class="el" href="classFiniteElement.html">FiniteElement</a> objects) and one or more enriched FEs. <a class="el" href="classFE__Nothing.html">FE_Nothing</a> is a dummy enriched FE.</p>
+<p>Consider a domain with multiple enriched sub-domains which are disjoint i.e. not connected with each other. To ensure <picture><source srcset="form_1087_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C^0$" src="form_1087.png"/></picture> continuity at the interface between the enriched sub-domain (characterized by a single enrichment function) and the non-enriched domain, we can use an <a class="el" href="classFE__Enriched.html">FE_Enriched</a> object in the enriched sub-domain and in the non-enriched domain a standard finite element (eg: <a class="el" href="classFE__Q.html">FE_Q</a>) wrapped into an <a class="el" href="classFE__Enriched.html">FE_Enriched</a> object (which internally uses a dominating <a class="el" href="classFE__Nothing.html">FE_Nothing</a> object). Refer to the documentation on <a class="el" href="classFE__Enriched.html">FE_Enriched</a> for more information on this. It is to be noted that an <a class="el" href="classFE__Enriched.html">FE_Enriched</a> object is constructed using a base FE (<a class="el" href="classFiniteElement.html">FiniteElement</a> objects) and one or more enriched FEs. <a class="el" href="classFE__Nothing.html">FE_Nothing</a> is a dummy enriched FE.</p>
 <p>The situation becomes more complicated when two enriched sub-domains share an interface. When the number of enrichment functions are same for the sub-domains, <a class="el" href="classFE__Enriched.html">FE_Enriched</a> object of one sub-domain is constructed such that each enriched FE is paired (figuratively) with a <a class="el" href="classFE__Nothing.html">FE_Nothing</a> in the <a class="el" href="classFE__Enriched.html">FE_Enriched</a> object of the other sub-domain. For example, let the FEs fe_enr1 and fe_enr2, which will be used with enrichment functions, correspond to the two sub-domains. Then the <a class="el" href="classFE__Enriched.html">FE_Enriched</a> objects of the two sub-domains are built using [fe_base, fe_enr1, fe_nothing] and [fe_base, fe_nothing, fe_enr2] respectively. Note that the size of the vector of enriched FEs (used in <a class="el" href="classFE__Enriched.html">FE_Enriched</a> constructor) is equal to 2, the same as the number of enrichment functions. When the number of enrichment functions is not the same, additional enriched FEs are paired with <a class="el" href="classFE__Nothing.html">FE_Nothing</a>. This ensures that the enriched DOF's at the interface are set to zero by the <a class="el" href="group__constraints.html#href_anchor">DoFTools::make_hanging_node_constraints()</a> function. Using these two strategies, we construct the appropriate <a class="el" href="classFE__Enriched.html">FE_Enriched</a> using the general constructor. Note that this is done on a mesh without hanging nodes.</p>
 <p>Now consider a domain with multiple sub-domains which may share an interface with each other. As discussed previously, the number of enriched FEs in the <a class="el" href="classFE__Enriched.html">FE_Enriched</a> object of each sub-domain needs to be equal to the number of sub-domains. This is because we are not using the information of how the domains are connected and any sub-domain may share interface with any other sub-domain (not considering overlaps for now!). However, in general, a given sub-domain shares an interface only with a few sub-domains. This warrants the use of a graph coloring algorithm to reduce the size of the vector of enriched FEs (used in the <a class="el" href="classFE__Enriched.html">FE_Enriched</a> constructor). By giving the sub-domains that share no interface the same color, a single 'std::function' that returns different enrichment functions for each sub-domain can be constructed. Then the size of the vector of enriched FEs is equal to the number of different colors used for predicates (or sub-domains).</p>
 <dl class="section note"><dt>Note</dt><dd>The graph coloring function, <a class="el" href="namespaceSparsityTools.html#href_anchor">SparsityTools::color_sparsity_pattern</a>, used for assigning colors to the sub-domains needs MPI (use <a class="el" href="classUtilities_1_1MPI_1_1MPI__InitFinalize.html">Utilities::MPI::MPI_InitFinalize</a> to initialize MPI and the necessary Zoltan setup). The coloring function, based on Zoltan, is a parallel coloring algorithm but is used in serial by <a class="el" href="namespaceSparsityTools.html#href_anchor">SparsityTools::color_sparsity_pattern</a>.</dd></dl>
/usr/share/doc/packages/dealii/doxygen/deal.II/structDataPostprocessorInputs_1_1CommonInputs.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/structDataPostprocessorInputs_1_1CommonInputs.html	2024-03-17 21:57:50.383277161 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/structDataPostprocessorInputs_1_1CommonInputs.html	2024-03-17 21:57:50.387277185 +0000
@@ -149,7 +149,7 @@
 <p>In other words, just because we know the value of the <code>spacedim</code> template argument of the current class does not mean that the data type of the cell iterator that is currently being worked on is obvious.</p>
 <p>To make the cell iterator accessible nevertheless, this class uses an object of type boost::any to store the cell iterator. You can think of this as being a void pointer that can point to anything. To use what is being used therefore requires the user to know the data type of the thing being pointed to.</p>
 <p>To make this work, the <a class="el" href="classDataOut.html">DataOut</a> and related classes store in objects of the current type a representation of the cell. To get it back out, you would use the <a class="el" href="#href_anchor">get_cell()</a> function that requires you to say, as a template parameter, the dimension of the cell that is currently being processed. This is knowledge you typically have in an application: for example, if your application runs in <code>dim</code> space dimensions and you are currently using the <a class="el" href="classDataOut.html">DataOut</a> class, then the cells that are worked on have data type <code><a class="el" href="classDataOut.html#href_anchor">DataOut&lt;dim&gt;::cell_iterator</a></code>. Consequently, in a postprocessor, you can call <code>inputs.get_cell&lt;dim&gt; </code>. For technical reasons, however, C++ will typically require you to write this as <code>inputs.template get_cell&lt;dim&gt; </code> because the member function we call here requires that we explicitly provide the template argument.</p>
-<p>Let us consider a complete example of a postprocessor that computes the fluid norm of the stress <picture><source srcset="form_2181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\sigma\| = \|\eta \nabla u\|$" src="form_2181.png"/></picture> from the viscosity <picture><source srcset="form_2182_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2182.png"/></picture> and the gradient of the fluid velocity, <picture><source srcset="form_2177_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u$" src="form_2177.png"/></picture>, assuming that the viscosity is something that depends on the cell's material id. This can be done using a class we derive from <a class="el" href="classDataPostprocessorScalar.html">DataPostprocessorScalar</a> where we overload the <a class="el" href="classDataPostprocessor.html#href_anchor">DataPostprocessor::evaluate_vector_field()</a> function that receives the values and gradients of the velocity (plus of other solution variables such as the pressure, but let's ignore those for the moment). Then we could use code such as this: </p><div class="fragment"><div class="line"><span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
+<p>Let us consider a complete example of a postprocessor that computes the fluid norm of the stress <picture><source srcset="form_2161_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\sigma\| = \|\eta \nabla u\|$" src="form_2161.png"/></picture> from the viscosity <picture><source srcset="form_2162_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\eta$" src="form_2162.png"/></picture> and the gradient of the fluid velocity, <picture><source srcset="form_2157_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u$" src="form_2157.png"/></picture>, assuming that the viscosity is something that depends on the cell's material id. This can be done using a class we derive from <a class="el" href="classDataPostprocessorScalar.html">DataPostprocessorScalar</a> where we overload the <a class="el" href="classDataPostprocessor.html#href_anchor">DataPostprocessor::evaluate_vector_field()</a> function that receives the values and gradients of the velocity (plus of other solution variables such as the pressure, but let's ignore those for the moment). Then we could use code such as this: </p><div class="fragment"><div class="line"><span class="keyword">template</span> &lt;<span class="keywordtype">int</span> dim&gt;</div>
 <div class="line"><span class="keyword">class </span>ComputeStress : <span class="keyword">public</span> <a class="code hl_class" href="classDataPostprocessorScalar.html">DataPostprocessorScalar</a>&lt;dim&gt;</div>
 <div class="line">{</div>
 <div class="line">  <span class="keyword">public</span>:</div>
/usr/share/doc/packages/dealii/doxygen/deal.II/structDataPostprocessorInputs_1_1Vector.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/structDataPostprocessorInputs_1_1Vector.html	2024-03-17 21:57:50.423277408 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/structDataPostprocessorInputs_1_1Vector.html	2024-03-17 21:57:50.423277408 +0000
@@ -144,7 +144,7 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;<a class="el" href="classint.html">int</a> spacedim&gt;<br />
 struct DataPostprocessorInputs::Vector&lt; spacedim &gt;</div><p>A structure that is used to pass information to <a class="el" href="classDataPostprocessor.html#href_anchor">DataPostprocessor::evaluate_vector_field()</a>. It contains the values and (if requested) derivatives of a vector-valued solution variable at the evaluation points on a cell or face.</p>
-<p>This class is also used if the solution vector is complex-valued (whether it is scalar- or vector-valued is immaterial in that case) since in that case, the <a class="el" href="classDataOut.html">DataOut</a> and related classes take apart the real and imaginary parts of a solution vector. In practice, that means that if a solution vector has <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> vector components (i.e., there are <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> functions that form the solution of the PDE you are dealing with; <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> is not the size of the solution vector), then if the solution is real-valued the <code>solution_values</code> variable below will be an array with as many entries as there are evaluation points on a cell, and each entry is a vector of length <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> representing the <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> solution functions evaluated at a point. On the other hand, if the solution is complex-valued (i.e., the vector passed to <a class="el" href="classDataOut.html#href_anchor">DataOut::build_patches()</a> has complex-valued entries), then the <code>solution_values</code> member variable of this class will have <picture><source srcset="form_2176_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2N$" src="form_2176.png"/></picture> entries for each evaluation point. The first <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> of these entries represent the real parts of the solution, and the second <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture> entries correspond to the imaginary parts of the solution evaluated at the evaluation point. The same layout is used for the <code>solution_gradients</code> and <code>solution_hessians</code> fields: First the gradients/Hessians of the real components, then all the gradients/Hessians of the imaginary components. There is more information about the subject in the documentation of the <a class="el" href="classDataPostprocessor.html">DataPostprocessor</a> class itself. <a class="el" href="step_58.html">step-58</a> provides an example of how this class is used in a complex-valued situation.</p>
+<p>This class is also used if the solution vector is complex-valued (whether it is scalar- or vector-valued is immaterial in that case) since in that case, the <a class="el" href="classDataOut.html">DataOut</a> and related classes take apart the real and imaginary parts of a solution vector. In practice, that means that if a solution vector has <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> vector components (i.e., there are <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> functions that form the solution of the PDE you are dealing with; <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> is not the size of the solution vector), then if the solution is real-valued the <code>solution_values</code> variable below will be an array with as many entries as there are evaluation points on a cell, and each entry is a vector of length <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> representing the <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> solution functions evaluated at a point. On the other hand, if the solution is complex-valued (i.e., the vector passed to <a class="el" href="classDataOut.html#href_anchor">DataOut::build_patches()</a> has complex-valued entries), then the <code>solution_values</code> member variable of this class will have <picture><source srcset="form_2156_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2N$" src="form_2156.png"/></picture> entries for each evaluation point. The first <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> of these entries represent the real parts of the solution, and the second <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture> entries correspond to the imaginary parts of the solution evaluated at the evaluation point. The same layout is used for the <code>solution_gradients</code> and <code>solution_hessians</code> fields: First the gradients/Hessians of the real components, then all the gradients/Hessians of the imaginary components. There is more information about the subject in the documentation of the <a class="el" href="classDataPostprocessor.html">DataPostprocessor</a> class itself. <a class="el" href="step_58.html">step-58</a> provides an example of how this class is used in a complex-valued situation.</p>
 <p>Through the fields in the <a class="el" href="structDataPostprocessorInputs_1_1CommonInputs.html">CommonInputs</a> base class, this class also makes available access to the locations of evaluations points, normal vectors (if appropriate), and which cell data is currently being evaluated on (also if appropriate). </p>
 
 <p class="definition">Definition at line <a class="el" href="data__postprocessor_8h_source.html#href_anchor">401</a> of file <a class="el" href="data__postprocessor_8h_source.html">data_postprocessor.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/structGeometryInfo.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/structGeometryInfo.html	2024-03-17 21:57:50.579278371 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/structGeometryInfo.html	2024-03-17 21:57:50.587278421 +0000
@@ -1512,7 +1512,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the value of the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>-th <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-linear (i.e. (bi-,tri-)linear) shape function at location <picture><source srcset="form_551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi$" src="form_551.png"/></picture>. </p>
+<p>Compute the value of the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>-th <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-linear (i.e. (bi-,tri-)linear) shape function at location <picture><source srcset="form_551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi$" src="form_551.png"/></picture>. </p>
 
 </div>
 </div>
@@ -1540,7 +1540,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the gradient of the <picture><source srcset="form_10_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_10.png"/></picture>-th <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-linear (i.e. (bi-,tri-)linear) shape function at location <picture><source srcset="form_551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi$" src="form_551.png"/></picture>. </p>
+<p>Compute the gradient of the <picture><source srcset="form_7_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_7.png"/></picture>-th <picture><source srcset="form_472_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$d$" src="form_472.png"/></picture>-linear (i.e. (bi-,tri-)linear) shape function at location <picture><source srcset="form_551_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\xi$" src="form_551.png"/></picture>. </p>
 
 </div>
 </div>
/usr/share/doc/packages/dealii/doxygen/deal.II/structNonMatching_1_1AdditionalQGeneratorData.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/structNonMatching_1_1AdditionalQGeneratorData.html	2024-03-17 21:57:50.639278742 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/structNonMatching_1_1AdditionalQGeneratorData.html	2024-03-17 21:57:50.643278767 +0000
@@ -203,11 +203,11 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>For a level set function, <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_517.png"/></picture>, the implicit function theorem states that it is possible to write one of the coordinates <picture><source srcset="form_222_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_222.png"/></picture> as a function of the others if</p>
-<p><picture><source srcset="form_2074_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\frac{\partial \psi}{\partial x_i}| &gt; 0$" src="form_2074.png"/></picture>.</p>
+<p>For a level set function, <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_526.png"/></picture>, the implicit function theorem states that it is possible to write one of the coordinates <picture><source srcset="form_196_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x_i$" src="form_196.png"/></picture> as a function of the others if</p>
+<p><picture><source srcset="form_2071_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\frac{\partial \psi}{\partial x_i}| &gt; 0$" src="form_2071.png"/></picture>.</p>
 <p>In practice, the bound we have for the expression in the left-hand side may be near but not equal to zero due to roundoff errors.</p>
 <p>This constant is a safety margin, <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>, that states that the implicit function theorem can be used when</p>
-<p><picture><source srcset="form_2075_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\frac{\partial \psi}{\partial x_i}| &gt; C$" src="form_2075.png"/></picture></p>
+<p><picture><source srcset="form_2072_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\frac{\partial \psi}{\partial x_i}| &gt; C$" src="form_2072.png"/></picture></p>
 <p>Thus this constant must be non-negative. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">96</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
@@ -242,8 +242,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>A constant, <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>, controlling when a level set function, <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_517.png"/></picture>, is considered positive or negative definite:</p>
-<p><picture><source srcset="form_2076_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x) &gt;  C \Rightarrow \text{Positive definite}$" src="form_2076.png"/></picture>, <picture><source srcset="form_2077_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x) &lt; -C \Rightarrow \text{Negative definite}$" src="form_2077.png"/></picture>. </p>
+<p>A constant, <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture>, controlling when a level set function, <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_526.png"/></picture>, is considered positive or negative definite:</p>
+<p><picture><source srcset="form_2073_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x) &gt;  C \Rightarrow \text{Positive definite}$" src="form_2073.png"/></picture>, <picture><source srcset="form_2074_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi(x) &lt; -C \Rightarrow \text{Negative definite}$" src="form_2074.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">111</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
 
@@ -294,7 +294,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>This determines how a box is split when this is necessary. If true, the box is split in two, if set to false the box is split into its <picture><source srcset="form_2078_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^{dim}$" src="form_2078.png"/></picture> children. </p>
+<p>This determines how a box is split when this is necessary. If true, the box is split in two, if set to false the box is split into its <picture><source srcset="form_2075_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2^{dim}$" src="form_2075.png"/></picture> children. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">129</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/structNonMatching_1_1RegionUpdateFlags.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/structNonMatching_1_1RegionUpdateFlags.html	2024-03-17 21:57:50.659278865 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/structNonMatching_1_1RegionUpdateFlags.html	2024-03-17 21:57:50.663278890 +0000
@@ -116,14 +116,14 @@
 <tr class="separator:ae7aa2ec9522c4c6a3aade6bdac91d6e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Struct storing UpdateFlags for the 3 regions of a cell, <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, that is defined by the sign of a level set function, <picture><source srcset="form_517_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_517.png"/></picture>:  </p><p class="formulaDsp">
-<picture><source srcset="form_2069_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<div class="textblock"><p>Struct storing UpdateFlags for the 3 regions of a cell, <picture><source srcset="form_87_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$K$" src="form_87.png"/></picture>, that is defined by the sign of a level set function, <picture><source srcset="form_526_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\psi$" src="form_526.png"/></picture>:  </p><p class="formulaDsp">
+<picture><source srcset="form_2026_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
 N = \{x \in K : \psi(x) &lt; 0 \}, \\
 P = \{x \in K : \psi(x) &gt; 0 \}, \\
 S = \{x \in K : \psi(x) = 0 \}.
-\]" src="form_2069.png"/></picture>
+\]" src="form_2026.png"/></picture>
 </p>
-<p> As in the <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> class, we refer to <picture><source srcset="form_181_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_181.png"/></picture>, <picture><source srcset="form_175_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_175.png"/></picture> and <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> as the inside, outside, and surface region. <a class="el" href="structNonMatching_1_1RegionUpdateFlags.html">RegionUpdateFlags</a> is used to describe how the <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a> objects, which are created by <a class="el" href="classNonMatching_1_1FEValues.html">NonMatching::FEValues</a>, should be updated. </p>
+<p> As in the <a class="el" href="classNonMatching_1_1QuadratureGenerator.html">QuadratureGenerator</a> class, we refer to <picture><source srcset="form_155_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$N$" src="form_155.png"/></picture>, <picture><source srcset="form_149_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$P$" src="form_149.png"/></picture> and <picture><source srcset="form_458_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$S$" src="form_458.png"/></picture> as the inside, outside, and surface region. <a class="el" href="structNonMatching_1_1RegionUpdateFlags.html">RegionUpdateFlags</a> is used to describe how the <a class="el" href="classNonMatching_1_1FEValues.html">FEValues</a> objects, which are created by <a class="el" href="classNonMatching_1_1FEValues.html">NonMatching::FEValues</a>, should be updated. </p>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8h_source.html#href_anchor">58</a> of file <a class="el" href="non__matching_2fe__values_8h_source.html">fe_values.h</a>.</p>
 </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
@@ -159,7 +159,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Flags for the region <picture><source srcset="form_2079_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in K : \psi(x) &lt; 0 \}$" src="form_2079.png"/></picture> </p>
+<p>Flags for the region <picture><source srcset="form_2031_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in K : \psi(x) &lt; 0 \}$" src="form_2031.png"/></picture> </p>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8h_source.html#href_anchor">68</a> of file <a class="el" href="non__matching_2fe__values_8h_source.html">fe_values.h</a>.</p>
 
@@ -176,7 +176,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Flags for the region <picture><source srcset="form_2080_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in K : \psi(x) &gt; 0 \}$" src="form_2080.png"/></picture> </p>
+<p>Flags for the region <picture><source srcset="form_2032_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in K : \psi(x) &gt; 0 \}$" src="form_2032.png"/></picture> </p>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8h_source.html#href_anchor">73</a> of file <a class="el" href="non__matching_2fe__values_8h_source.html">fe_values.h</a>.</p>
 
@@ -193,7 +193,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Flags for the region <picture><source srcset="form_2081_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in K : \psi(x) = 0 \}$" src="form_2081.png"/></picture> </p>
+<p>Flags for the region <picture><source srcset="form_2033_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\{x \in K : \psi(x) = 0 \}$" src="form_2033.png"/></picture> </p>
 
 <p class="definition">Definition at line <a class="el" href="non__matching_2fe__values_8h_source.html#href_anchor">78</a> of file <a class="el" href="non__matching_2fe__values_8h_source.html">fe_values.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/structNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1HeightDirectionData.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/structNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1HeightDirectionData.html	2024-03-17 21:57:50.683279013 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/structNonMatching_1_1internal_1_1QuadratureGeneratorImplementation_1_1HeightDirectionData.html	2024-03-17 21:57:50.683279013 +0000
@@ -116,10 +116,10 @@
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>Data representing the best choice of height-function direction, which is returned by the function find_best_height_direction.</p>
 <p>This data consists of a coordinate direction</p>
-<p><picture><source srcset="form_2120_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i \in \{0, ..., dim - 1 \}$" src="form_2120.png"/></picture>,</p>
+<p><picture><source srcset="form_2111_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i \in \{0, ..., dim - 1 \}$" src="form_2111.png"/></picture>,</p>
 <p>and lower bound on the absolute value of the derivative of some associated function, f, taken in the above coordinate direction. That is, a bound <picture><source srcset="form_74_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$C$" src="form_74.png"/></picture> such that</p>
-<p><picture><source srcset="form_2121_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\frac{\partial f}{\partial x_i}| &gt; C$" src="form_2121.png"/></picture>,</p>
-<p>holding over some subset of <picture><source srcset="form_512_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^{dim}$" src="form_512.png"/></picture>. </p>
+<p><picture><source srcset="form_2112_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\frac{\partial f}{\partial x_i}| &gt; C$" src="form_2112.png"/></picture>,</p>
+<p>holding over some subset of <picture><source srcset="form_521_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb{R}^{dim}$" src="form_521.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">931</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
 </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
@@ -172,7 +172,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>The lower bound on <picture><source srcset="form_2152_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\frac{\partial f}{\partial x_i}|$" src="form_2152.png"/></picture>, described above. </p>
+<p>The lower bound on <picture><source srcset="form_2142_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$|\frac{\partial f}{\partial x_i}|$" src="form_2142.png"/></picture>, described above. </p>
 
 <p class="definition">Definition at line <a class="el" href="quadrature__generator_8h_source.html#href_anchor">949</a> of file <a class="el" href="quadrature__generator_8h_source.html">quadrature_generator.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/structProductType.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/structProductType.html	2024-03-17 21:57:50.707279162 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/structProductType.html	2024-03-17 21:57:50.711279186 +0000
@@ -132,10 +132,10 @@
 <div class="line"><span class="keyword">auto</span> product = t*u;</div>
 </div><!-- fragment --><p> The local alias of this structure represents the type the variable <code>product</code> would have.</p>
 <h3>Where is this useful</h3>
-<p>The purpose of this class is principally to represent the type one needs to use to represent the values or gradients of finite element fields at quadrature points. For example, assume you are storing the values <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> of unknowns in a Vector&lt;float&gt;, then evaluating <picture><source srcset="form_843_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(x_q) = \sum_j U_j
-\varphi_j(x_q)$" src="form_843.png"/></picture> at quadrature points results in values <picture><source srcset="form_844_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(x_q)$" src="form_844.png"/></picture> that need to be stored as <code>double</code> variables because the <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> are <code>float</code> values and the <picture><source srcset="form_845_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(x_q)$" src="form_845.png"/></picture> are computed as <code>double</code> values, and the product are then <code>double</code> values. On the other hand, if you store your unknowns <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> as <code>std::complex&lt;double&gt;</code> values and you try to evaluate <picture><source srcset="form_846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(x_q) = \sum_j U_j \nabla\varphi_j(x_q)$" src="form_846.png"/></picture> at quadrature points, then the gradients <picture><source srcset="form_847_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(x_q)$" src="form_847.png"/></picture> need to be stored as objects of type <code><a class="el" href="classTensor.html">Tensor</a>&lt;1,dim,std::complex&lt;double&gt;&gt;</code> because that's what you get when you multiply a complex number by a <code><a class="el" href="classTensor.html">Tensor</a>&lt;1,dim&gt;</code> (the type used to represent the gradient of shape functions of scalar finite elements).</p>
-<p>Likewise, if you are using a vector valued element (with dim components) and the <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> are stored as <code>double</code> variables, then <picture><source srcset="form_848_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(x_q) = \sum_j
-U_j \varphi_j(x_q)$" src="form_848.png"/></picture> needs to have type <code><a class="el" href="classTensor.html">Tensor</a>&lt;1,dim&gt;</code> (because the shape functions have type <code><a class="el" href="classTensor.html">Tensor</a>&lt;1,dim&gt;</code>). Finally, if you store the <picture><source srcset="form_99_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_99.png"/></picture> as objects of type <code>std::complex&lt;double&gt;</code> and you have a vector valued element, then the gradients <picture><source srcset="form_846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(x_q) = \sum_j U_j \nabla\varphi_j(x_q)$" src="form_846.png"/></picture> will result in objects of type <code><a class="el" href="classTensor.html">Tensor</a>&lt;2,dim,std::complex&lt;double&gt; &gt;</code>.</p>
+<p>The purpose of this class is principally to represent the type one needs to use to represent the values or gradients of finite element fields at quadrature points. For example, assume you are storing the values <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> of unknowns in a Vector&lt;float&gt;, then evaluating <picture><source srcset="form_843_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(x_q) = \sum_j U_j
+\varphi_j(x_q)$" src="form_843.png"/></picture> at quadrature points results in values <picture><source srcset="form_844_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(x_q)$" src="form_844.png"/></picture> that need to be stored as <code>double</code> variables because the <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> are <code>float</code> values and the <picture><source srcset="form_845_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\varphi_j(x_q)$" src="form_845.png"/></picture> are computed as <code>double</code> values, and the product are then <code>double</code> values. On the other hand, if you store your unknowns <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> as <code>std::complex&lt;double&gt;</code> values and you try to evaluate <picture><source srcset="form_846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(x_q) = \sum_j U_j \nabla\varphi_j(x_q)$" src="form_846.png"/></picture> at quadrature points, then the gradients <picture><source srcset="form_847_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(x_q)$" src="form_847.png"/></picture> need to be stored as objects of type <code><a class="el" href="classTensor.html">Tensor</a>&lt;1,dim,std::complex&lt;double&gt;&gt;</code> because that's what you get when you multiply a complex number by a <code><a class="el" href="classTensor.html">Tensor</a>&lt;1,dim&gt;</code> (the type used to represent the gradient of shape functions of scalar finite elements).</p>
+<p>Likewise, if you are using a vector valued element (with dim components) and the <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> are stored as <code>double</code> variables, then <picture><source srcset="form_848_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$u_h(x_q) = \sum_j
+U_j \varphi_j(x_q)$" src="form_848.png"/></picture> needs to have type <code><a class="el" href="classTensor.html">Tensor</a>&lt;1,dim&gt;</code> (because the shape functions have type <code><a class="el" href="classTensor.html">Tensor</a>&lt;1,dim&gt;</code>). Finally, if you store the <picture><source srcset="form_105_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$U_j$" src="form_105.png"/></picture> as objects of type <code>std::complex&lt;double&gt;</code> and you have a vector valued element, then the gradients <picture><source srcset="form_846_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\nabla u_h(x_q) = \sum_j U_j \nabla\varphi_j(x_q)$" src="form_846.png"/></picture> will result in objects of type <code><a class="el" href="classTensor.html">Tensor</a>&lt;2,dim,std::complex&lt;double&gt; &gt;</code>.</p>
 <p>In all of these cases, this type is used to identify which type needs to be used for the result of computing the product of unknowns and the values, gradients, or other properties of shape functions. </p>
 
 <p class="definition">Definition at line <a class="el" href="template__constraints_8h_source.html#href_anchor">481</a> of file <a class="el" href="template__constraints_8h_source.html">template_constraints.h</a>.</p>
/usr/share/doc/packages/dealii/doxygen/deal.II/structSUNDIALS_1_1SundialsPreconditioner.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/structSUNDIALS_1_1SundialsPreconditioner.html	2024-03-17 21:57:50.735279334 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/structSUNDIALS_1_1SundialsPreconditioner.html	2024-03-17 21:57:50.739279359 +0000
@@ -186,7 +186,7 @@
           <td class="paramkey"></td>
           <td></td>
           <td class="paramtype">const VectorType &amp;</td>          <td class="paramname"><span class="paramname"><em>src</em></span>&#href_anchor"memdoc">
-<p>Apply the wrapped preconditioner, i.e., solve <picture><source srcset="form_2677_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Px=b$" src="form_2677.png"/></picture> where <picture><source srcset="form_29_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_29.png"/></picture> is the <code>dst</code> vector and <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> the <code>src</code> vector.</p>
+<p>Apply the wrapped preconditioner, i.e., solve <picture><source srcset="form_2677_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$Px=b$" src="form_2677.png"/></picture> where <picture><source srcset="form_20_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$x$" src="form_20.png"/></picture> is the <code>dst</code> vector and <picture><source srcset="form_72_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$b$" src="form_72.png"/></picture> the <code>src</code> vector.</p>
 <dl class="params"><dt>Parameters</dt><dd>
   <table class="params">
     <tr><td class="paramname">dst</td><td>Result vector of the preconditioner application </td></tr>
/usr/share/doc/packages/dealii/doxygen/deal.II/structSynchronousIterators.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/structSynchronousIterators.html	2024-03-17 21:57:50.767279532 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/structSynchronousIterators.html	2024-03-17 21:57:50.771279557 +0000
@@ -326,7 +326,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Advance a tuple of iterators by <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>. </p>
+<p>Advance a tuple of iterators by <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="synchronous__iterator_8h_source.html#href_anchor">148</a> of file <a class="el" href="synchronous__iterator_8h_source.html">synchronous_iterator.h</a>.</p>
 
@@ -356,7 +356,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Advance a tuple of iterators by <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>. </p>
+<p>Advance a tuple of iterators by <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="synchronous__iterator_8h_source.html#href_anchor">161</a> of file <a class="el" href="synchronous__iterator_8h_source.html">synchronous_iterator.h</a>.</p>
 
@@ -386,7 +386,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Advance a tuple of iterators by <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>. </p>
+<p>Advance a tuple of iterators by <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="synchronous__iterator_8h_source.html#href_anchor">175</a> of file <a class="el" href="synchronous__iterator_8h_source.html">synchronous_iterator.h</a>.</p>
 
@@ -506,7 +506,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Advance the elements of this iterator by <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>. </p>
+<p>Advance the elements of this iterator by <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="synchronous__iterator_8h_source.html#href_anchor">236</a> of file <a class="el" href="synchronous__iterator_8h_source.html">synchronous_iterator.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/structinternal_1_1MatrixFreeFunctions_1_1MappingInfoStorage.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/structinternal_1_1MatrixFreeFunctions_1_1MappingInfoStorage.html	2024-03-17 21:57:50.831279928 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/structinternal_1_1MatrixFreeFunctions_1_1MappingInfoStorage.html	2024-03-17 21:57:50.839279977 +0000
@@ -416,7 +416,7 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>The storage of the gradients of the inverse Jacobian transformation. Because of symmetry, only the upper diagonal and diagonal part are needed. The first index runs through the derivatives, starting with the diagonal and then continuing row-wise, i.e., <picture><source srcset="form_1995_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial^2/\partial x_1 \partial x_2$" src="form_1995.png"/></picture> first, then <picture><source srcset="form_1996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial^2/\partial x_1 \partial x_3$" src="form_1996.png"/></picture>, and so on. The second index is the spatial coordinate.</p>
+<p>The storage of the gradients of the inverse Jacobian transformation. Because of symmetry, only the upper diagonal and diagonal part are needed. The first index runs through the derivatives, starting with the diagonal and then continuing row-wise, i.e., <picture><source srcset="form_1998_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial^2/\partial x_1 \partial x_2$" src="form_1998.png"/></picture> first, then <picture><source srcset="form_1999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial^2/\partial x_1 \partial x_3$" src="form_1999.png"/></picture>, and so on. The second index is the spatial coordinate.</p>
 <p>Indexed by <code>data_index_offsets</code>.</p>
 <p>Contains two fields for access from both sides for interior faces, but the default case (cell integrals or boundary integrals) only fills the zeroth component and ignores the first one. </p>
 
@@ -437,8 +437,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>The storage of the gradients of the Jacobian transformation. Because of symmetry, only the upper diagonal and diagonal part are needed. The first index runs through the derivatives, starting with the diagonal and then continuing row-wise, i.e., <picture><source srcset="form_1997_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial^2/\partial x_1 \partial
-x_2$" src="form_1997.png"/></picture> first, then <picture><source srcset="form_1996_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial^2/\partial x_1 \partial x_3$" src="form_1996.png"/></picture>, and so on. The second index is the spatial coordinate.</p>
+<p>The storage of the gradients of the Jacobian transformation. Because of symmetry, only the upper diagonal and diagonal part are needed. The first index runs through the derivatives, starting with the diagonal and then continuing row-wise, i.e., <picture><source srcset="form_2000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial^2/\partial x_1 \partial
+x_2$" src="form_2000.png"/></picture> first, then <picture><source srcset="form_1999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\partial^2/\partial x_1 \partial x_3$" src="form_1999.png"/></picture>, and so on. The second index is the spatial coordinate.</p>
 <p>Indexed by <code>data_index_offsets</code>.</p>
 <p>Contains two fields for access from both sides for interior faces, but the default case (cell integrals or boundary integrals) only fills the zeroth component and ignores the first one. </p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/structinternal_1_1MatrixFreeFunctions_1_1UnivariateShapeData.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/structinternal_1_1MatrixFreeFunctions_1_1UnivariateShapeData.html	2024-03-17 21:57:50.867280150 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/structinternal_1_1MatrixFreeFunctions_1_1UnivariateShapeData.html	2024-03-17 21:57:50.867280150 +0000
@@ -170,7 +170,7 @@
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><div class="compoundTemplParams">template&lt;typename Number&gt;<br />
-struct internal::MatrixFreeFunctions::UnivariateShapeData&lt; Number &gt;</div><p>This struct stores the shape functions, their gradients and Hessians evaluated for a one-dimensional section of a tensor product finite element and tensor product quadrature formula in reference coordinates. This data structure also includes the evaluation of quantities at the cell boundary and on the sub-interval <picture><source srcset="form_1999_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0, 0.5)$" src="form_1999.png"/></picture> and <picture><source srcset="form_2000_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0.5, 1)$" src="form_2000.png"/></picture> for face integrals. </p>
+struct internal::MatrixFreeFunctions::UnivariateShapeData&lt; Number &gt;</div><p>This struct stores the shape functions, their gradients and Hessians evaluated for a one-dimensional section of a tensor product finite element and tensor product quadrature formula in reference coordinates. This data structure also includes the evaluation of quantities at the cell boundary and on the sub-interval <picture><source srcset="form_2003_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0, 0.5)$" src="form_2003.png"/></picture> and <picture><source srcset="form_2004_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$(0.5, 1)$" src="form_2004.png"/></picture> for face integrals. </p>
 
 <p class="definition">Definition at line <a class="el" href="shape__info_8h_source.html#href_anchor">134</a> of file <a class="el" href="shape__info_8h_source.html">shape_info.h</a>.</p>
 </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
/usr/share/doc/packages/dealii/doxygen/deal.II/symmetric__tensor_8h.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/symmetric__tensor_8h.html	2024-03-17 21:57:50.915280446 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/symmetric__tensor_8h.html	2024-03-17 21:57:50.919280471 +0000
@@ -255,7 +255,7 @@
 <p>This method potentially offers the quickest computation if the pathological case is not encountered. </p>
 </td></tr>
 <tr><td class="fieldname"><a id="ac535cfc6fdfc0e23150b97e877e44e88a65b4954581b684416cb84c7aecbf0482" name="ac535cfc6fdfc0e23150b97e877e44e88a65b4954581b684416cb84c7aecbf0482"></a>ql_implicit_shifts&#160;</td><td class="fielddoc"><p>The iterative QL algorithm with implicit shifts applied after tridiagonalization of the tensor using the householder method.</p>
-<p>This method offers a compromise between speed of computation and its robustness. This method is particularly useful when the elements of <picture><source srcset="form_842_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_842.png"/></picture> have greatly varying magnitudes, which would typically lead to a loss of accuracy when computing the smaller eigenvalues. </p>
+<p>This method offers a compromise between speed of computation and its robustness. This method is particularly useful when the elements of <picture><source srcset="form_836_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$T$" src="form_836.png"/></picture> have greatly varying magnitudes, which would typically lead to a loss of accuracy when computing the smaller eigenvalues. </p>
 </td></tr>
 <tr><td class="fieldname"><a id="ac535cfc6fdfc0e23150b97e877e44e88a1606457c201437c4f914a83939e25722" name="ac535cfc6fdfc0e23150b97e877e44e88a1606457c201437c4f914a83939e25722"></a>jacobi&#160;</td><td class="fielddoc"><p>The iterative Jacobi algorithm.</p>
 <p>This method offers is the most robust of the available options, with reliable results obtained for even the most pathological cases. It is, however, the slowest algorithm of all of those implemented. </p>
@@ -374,7 +374,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the fourth-order symmetric identity tensor <picture><source srcset="form_776_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb S$" src="form_776.png"/></picture> which maps symmetric second-order tensors, such as <picture><source srcset="form_395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_395.png"/></picture>, to themselves.  </p><p class="formulaDsp">
+<p>Return the fourth-order symmetric identity tensor <picture><source srcset="form_776_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbb S$" src="form_776.png"/></picture> which maps symmetric second-order tensors, such as <picture><source srcset="form_401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_401.png"/></picture>, to themselves.  </p><p class="formulaDsp">
 <picture><source srcset="form_777_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \mathbb S : \mathbf A = \mathbf A
 \]" src="form_777.png"/></picture>
@@ -865,7 +865,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the second invariant of a tensor of rank 2. The second invariant of a tensor <picture><source srcset="form_395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_395.png"/></picture> is defined as  <picture><source srcset="form_809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_2 (\mathbf A) = II(\mathbf A) = \frac 12
+<p>Compute the second invariant of a tensor of rank 2. The second invariant of a tensor <picture><source srcset="form_401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_401.png"/></picture> is defined as  <picture><source srcset="form_809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_2 (\mathbf A) = II(\mathbf A) = \frac 12
 \left[ (\text{tr} \mathbf A)^2 - \text{tr} (\mathbf{A}^2) \right]$" src="form_809.png"/></picture>.</p>
 <p>For the kind of arguments to this function, i.e., a rank-2 tensor of size 1, the result is simply zero. </p>
 
@@ -897,11 +897,11 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the second invariant of a tensor of rank 2. The second invariant of a tensor <picture><source srcset="form_395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_395.png"/></picture> is defined as  <picture><source srcset="form_809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_2 (\mathbf A) = II(\mathbf A) = \frac 12
+<p>Compute the second invariant of a tensor of rank 2. The second invariant of a tensor <picture><source srcset="form_401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_401.png"/></picture> is defined as  <picture><source srcset="form_809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_2 (\mathbf A) = II(\mathbf A) = \frac 12
 \left[ (\text{tr} \mathbf A)^2 - \text{tr} (\mathbf{A}^2) \right]$" src="form_809.png"/></picture>.</p>
 <p>For the kind of arguments to this function, i.e., a symmetric rank-2 tensor of size 2, the result is (counting indices starting at one)  <picture><source srcset="form_810_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_2(\mathbf A) = II(\mathbf A) = \frac 12
   \left[ (A_{11} + A_{22})^2 - (A_{11}^2+2 A_{12}^2+ A_{22}^2) \right]
-  = A_{11} A_{22} - A_{12}^2$" src="form_810.png"/></picture>. As expected, for the <picture><source srcset="form_104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_104.png"/></picture> symmetric tensors this function handles, this equals the determinant of the tensor. (This is so because for <picture><source srcset="form_104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_104.png"/></picture> symmetric tensors, there really are only two invariants, so the second and third invariant are the same; the determinant is the third invariant.) </p>
+  = A_{11} A_{22} - A_{12}^2$" src="form_810.png"/></picture>. As expected, for the <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_97.png"/></picture> symmetric tensors this function handles, this equals the determinant of the tensor. (This is so because for <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_97.png"/></picture> symmetric tensors, there really are only two invariants, so the second and third invariant are the same; the determinant is the third invariant.) </p>
 
 <p class="definition">Definition at line <a class="el" href="symmetric__tensor_8h_source.html#href_anchor">2917</a> of file <a class="el" href="symmetric__tensor_8h_source.html">symmetric_tensor.h</a>.</p>
 
@@ -931,7 +931,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Compute the second invariant of a tensor of rank 2. The second invariant of a tensor <picture><source srcset="form_395_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_395.png"/></picture> is defined as  <picture><source srcset="form_809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_2 (\mathbf A) = II(\mathbf A) = \frac 12
+<p>Compute the second invariant of a tensor of rank 2. The second invariant of a tensor <picture><source srcset="form_401_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf A$" src="form_401.png"/></picture> is defined as  <picture><source srcset="form_809_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$I_2 (\mathbf A) = II(\mathbf A) = \frac 12
 \left[ (\text{tr} \mathbf A)^2 - \text{tr} (\mathbf{A}^2) \right]$" src="form_809.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="symmetric__tensor_8h_source.html#href_anchor">2934</a> of file <a class="el" href="symmetric__tensor_8h_source.html">symmetric_tensor.h</a>.</p>
@@ -974,8 +974,8 @@
         </tr>
       </table>
 </div><div class="memdoc">
-<p>Return the eigenvalues of a symmetric <picture><source srcset="form_104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_104.png"/></picture> tensor. The array of eigenvalues is sorted in descending order.</p>
-<p>For <picture><source srcset="form_104_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_104.png"/></picture> tensors, the eigenvalues of tensor <picture><source srcset="form_770_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf T$" src="form_770.png"/></picture> are the roots of <a href="https://en.wikipedia.org/wiki/Eigenvalue_algorithm#href_anchor">the characteristic polynomial</a> <picture><source srcset="form_812_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0 = \lambda^2
+<p>Return the eigenvalues of a symmetric <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_97.png"/></picture> tensor. The array of eigenvalues is sorted in descending order.</p>
+<p>For <picture><source srcset="form_97_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$2\times 2$" src="form_97.png"/></picture> tensors, the eigenvalues of tensor <picture><source srcset="form_770_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\mathbf T$" src="form_770.png"/></picture> are the roots of <a href="https://en.wikipedia.org/wiki/Eigenvalue_algorithm#href_anchor">the characteristic polynomial</a> <picture><source srcset="form_812_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$0 = \lambda^2
 - \lambda\;\text{tr}\mathbf{T} + \det \mathbf{T}$" src="form_812.png"/></picture> as given by  <picture><source srcset="form_813_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\lambda_1, \lambda_2 = \frac{1}{2} \left[ \text{tr} \mathbf{T} \pm
 \sqrt{(\text{tr} \mathbf{T})^2 - 4 \det \mathbf{T}} \right]$" src="form_813.png"/></picture>.</p>
 <dl class="section warning"><dt>Warning</dt><dd>The algorithm employed here determines the eigenvalues by computing the roots of the characteristic polynomial. In the case that there exists a common root (the eigenvalues are equal), the computation is <a href="https://scicomp.stackexchange.com/q/23686">subject to round-off errors</a> of order <picture><source srcset="form_814_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\sqrt{\epsilon}$" src="form_814.png"/></picture>. As an alternative, the <a class="el" href="#href_anchor">eigenvectors()</a> function provides a more robust, but costly, method to compute the eigenvalues of a symmetric tensor. </dd></dl>
/usr/share/doc/packages/dealii/doxygen/deal.II/synchronous__iterator_8h.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/synchronous__iterator_8h.html	2024-03-17 21:57:50.951280669 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/synchronous__iterator_8h.html	2024-03-17 21:57:50.951280669 +0000
@@ -220,7 +220,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Advance a tuple of iterators by <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>. </p>
+<p>Advance a tuple of iterators by <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="synchronous__iterator_8h_source.html#href_anchor">148</a> of file <a class="el" href="synchronous__iterator_8h_source.html">synchronous_iterator.h</a>.</p>
 
@@ -250,7 +250,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Advance a tuple of iterators by <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>. </p>
+<p>Advance a tuple of iterators by <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="synchronous__iterator_8h_source.html#href_anchor">161</a> of file <a class="el" href="synchronous__iterator_8h_source.html">synchronous_iterator.h</a>.</p>
 
@@ -280,7 +280,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Advance a tuple of iterators by <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>. </p>
+<p>Advance a tuple of iterators by <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="synchronous__iterator_8h_source.html#href_anchor">175</a> of file <a class="el" href="synchronous__iterator_8h_source.html">synchronous_iterator.h</a>.</p>
 
@@ -400,7 +400,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Advance the elements of this iterator by <picture><source srcset="form_110_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_110.png"/></picture>. </p>
+<p>Advance the elements of this iterator by <picture><source srcset="form_103_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n$" src="form_103.png"/></picture>. </p>
 
 <p class="definition">Definition at line <a class="el" href="synchronous__iterator_8h_source.html#href_anchor">236</a> of file <a class="el" href="synchronous__iterator_8h_source.html">synchronous_iterator.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/tensor_8h.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/tensor_8h.html	2024-03-17 21:57:50.995280941 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/tensor_8h.html	2024-03-17 21:57:50.991280916 +0000
@@ -633,11 +633,11 @@
 </div><div class="memdoc">
 <p>Entrywise multiplication of two tensor objects of general rank.</p>
 <p>This multiplication is also called "Hadamard-product" (c.f. <a href="https://en.wikipedia.org/wiki/Hadamard_product_(matrices)">https://en.wikipedia.org/wiki/Hadamard_product_(matrices)</a>), and generates a new tensor of size &lt;rank, dim&gt;:  </p><p class="formulaDsp">
-<picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
+<picture><source srcset="form_857_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaDsp" alt="\[
   \text{result}_{i, j}
   = \text{left}_{i, j}\circ
     \text{right}_{i, j}
-\]" src="form_860.png"/></picture>
+\]" src="form_857.png"/></picture>
 </p>
 <dl class="tparams"><dt>Template Parameters</dt><dd>
   <table class="tparams">
@@ -684,7 +684,7 @@
 </p>
 <dl class="section note"><dt>Note</dt><dd>For the <a class="el" href="classTensor.html">Tensor</a> class, the multiplication operator only performs a contraction over a single pair of indices. This is in contrast to the multiplication operator for <a class="el" href="classSymmetricTensor.html">SymmetricTensor</a>, for which the corresponding <code><a class="el" href="#href_anchor">operator*()</a></code> performs a double contraction. The origin of the difference in how <code><a class="el" href="#href_anchor">operator*()</a></code> is implemented between <a class="el" href="classTensor.html">Tensor</a> and <a class="el" href="classSymmetricTensor.html">SymmetricTensor</a> is that for the former, the product between two <a class="el" href="classTensor.html">Tensor</a> objects of same rank and dimension results in another <a class="el" href="classTensor.html">Tensor</a> object &ndash; that it, <code><a class="el" href="#href_anchor">operator*()</a></code> corresponds to the multiplicative group action within the group of tensors. On the other hand, there is no corresponding multiplicative group action with the set of symmetric tensors because, in general, the product of two symmetric tensors is a <em>nonsymmetric</em> tensor. As a consequence, for a mathematician, it is clear that <code><a class="el" href="#href_anchor">operator*()</a></code> for symmetric tensors must have a different meaning: namely the <em>dot</em> or <em>scalar product</em> that maps two symmetric tensors of rank 2 to a scalar. This corresponds to the double-dot (colon) operator whose meaning is then extended to the product of any two even-ranked symmetric tensors.</dd>
 <dd>
-In case the contraction yields a tensor of rank 0, that is, if <code>rank_1==rank_2==1</code>, then a scalar number is returned as an unwrapped number type. Return the <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_861.png"/></picture> norm of the given rank-2 tensor, where <picture><source srcset="form_862_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf T\|_1 = \max_j \sum_i |T_{ij}|$" src="form_862.png"/></picture> (maximum of the sums over columns). </dd></dl>
+In case the contraction yields a tensor of rank 0, that is, if <code>rank_1==rank_2==1</code>, then a scalar number is returned as an unwrapped number type. Return the <picture><source srcset="form_858_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_1$" src="form_858.png"/></picture> norm of the given rank-2 tensor, where <picture><source srcset="form_859_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf T\|_1 = \max_j \sum_i |T_{ij}|$" src="form_859.png"/></picture> (maximum of the sums over columns). </dd></dl>
 
 <p class="definition">Definition at line <a class="el" href="tensor_8h_source.html#href_anchor">3035</a> of file <a class="el" href="tensor_8h_source.html">tensor.h</a>.</p>
 
@@ -714,7 +714,7 @@
   </tr>
 </table>
 </div><div class="memdoc">
-<p>Return the <picture><source srcset="form_863_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_863.png"/></picture> norm of the given rank-2 tensor, where <picture><source srcset="form_864_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf T\|_\infty = \max_i \sum_j |T_{ij}|$" src="form_864.png"/></picture> (maximum of the sums over rows). </p>
+<p>Return the <picture><source srcset="form_860_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$l_\infty$" src="form_860.png"/></picture> norm of the given rank-2 tensor, where <picture><source srcset="form_861_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$\|\mathbf T\|_\infty = \max_i \sum_j |T_{ij}|$" src="form_861.png"/></picture> (maximum of the sums over rows). </p>
 
 <p class="definition">Definition at line <a class="el" href="tensor_8h_source.html#href_anchor">3061</a> of file <a class="el" href="tensor_8h_source.html">tensor.h</a>.</p>
 
/usr/share/doc/packages/dealii/doxygen/deal.II/todo.html differs (HTML document, ASCII text, with very long lines)
--- old//usr/share/doc/packages/dealii/doxygen/deal.II/todo.html	2024-03-17 21:57:51.015281064 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.II/todo.html	2024-03-17 21:57:51.015281064 +0000
@@ -106,20 +106,20 @@
 <dt>Class <a class="el" href="classDifferentiation_1_1AD_1_1HelperBase.html">Differentiation::AD::HelperBase&lt; ADNumberTypeCode, ScalarType &gt;</a>  </dt>
 <dd><a class="anchor" id="_todo000005"></a>Make this class thread safe for Sacado number and ADOL-C tapeless numbers (if supported).  </dd>
 <dt>Member <a class="el" href="group__Exceptions.html#href_anchor">DoFTools::ExcFiniteElementsDontMatch</a>  ()</dt>
-<dd><a class="anchor" id="_todo000011"></a>Write description </dd>
+<dd><a class="anchor" id="_todo000008"></a>Write description </dd>
 <dt>Member <a class="el" href="group__Exceptions.html#href_anchor">DoFTools::ExcGridNotCoarser</a>  ()</dt>
-<dd><a class="anchor" id="_todo000012"></a>Write description </dd>
+<dd><a class="anchor" id="_todo000009"></a>Write description </dd>
 <dt>Member <a class="el" href="group__Exceptions.html#href_anchor">DoFTools::ExcGridsDontMatch</a>  ()</dt>
-<dd><a class="anchor" id="_todo000013"></a>Write description </dd>
+<dd><a class="anchor" id="_todo000010"></a>Write description </dd>
 <dt>Member <a class="el" href="group__Exceptions.html#href_anchor">DoFTools::ExcInvalidBoundaryIndicator</a>  ()</dt>
-<dd><a class="anchor" id="_todo000014"></a>Write description </dd>
+<dd><a class="anchor" id="_todo000011"></a>Write description </dd>
 <dt>Member <a class="el" href="namespaceDoFTools.html#href_anchor">DoFTools::map_support_points_to_dofs</a>  (const <a class="el" href="classMapping.html">Mapping&lt; dim, spacedim &gt;</a> &amp;mapping, const <a class="el" href="classDoFHandler.html">DoFHandler&lt; dim, spacedim &gt;</a> &amp;dof_handler, std::map&lt; <a class="el" href="classPoint.html">Point&lt; spacedim &gt;</a>, <a class="el" href="namespacetypes.html#href_anchor">types::global_dof_index</a>, Comp &gt; &amp;point_to_index_map)</dt>
-<dd><a class="anchor" id="_todo000010"></a>This function should generate a multimap, rather than just a map, since several dofs may be located at the same support point. Currently, only the last value in the map returned by <a class="el" href="namespaceDoFTools.html#href_anchor">map_dofs_to_support_points()</a> for each point will be returned.  </dd>
+<dd><a class="anchor" id="_todo000007"></a>This function should generate a multimap, rather than just a map, since several dofs may be located at the same support point. Currently, only the last value in the map returned by <a class="el" href="namespaceDoFTools.html#href_anchor">map_dofs_to_support_points()</a> for each point will be returned.  </dd>
 <dt>Class <a class="el" href="classFE__ABF.html">FE_ABF&lt; dim &gt;</a>  </dt>
-<dd><a class="anchor" id="_todo000007"></a>Even if this element is implemented for two and three space dimensions, the definition of the node values relies on consistently oriented faces in 3d. Therefore, care should be taken on complicated meshes. </dd>
+<dd><a class="anchor" id="_todo000012"></a>Even if this element is implemented for two and three space dimensions, the definition of the node values relies on consistently oriented faces in 3d. Therefore, care should be taken on complicated meshes. </dd>
 <dt>Class <a class="el" href="classFE__BDM.html">FE_BDM&lt; dim &gt;</a>  </dt>
-<dd><p class="startdd"><a class="anchor" id="_todo000009"></a>Restriction matrices are missing.</p>
-<p class="enddd"><a class="anchor" id="_todo000008"></a>The 3d version exhibits some numerical instabilities, in particular for higher order </p>
+<dd><p class="startdd"><a class="anchor" id="_todo000013"></a>The 3d version exhibits some numerical instabilities, in particular for higher order</p>
+<p class="enddd"><a class="anchor" id="_todo000014"></a>Restriction matrices are missing. </p>
 </dd>
 <dt>Class <a class="el" href="classFE__Nedelec.html">FE_Nedelec&lt; dim &gt;</a>  </dt>
 <dd><a class="anchor" id="_todo000015"></a>Even if this element is implemented for two and three space dimensions, the definition of the node values relies on consistently oriented faces in 3d. Therefore, care should be taken on complicated meshes. </dd>
@@ -128,9 +128,9 @@
 <dt>Class <a class="el" href="classFE__RT__Bubbles.html">FE_RT_Bubbles&lt; dim &gt;</a>  </dt>
 <dd><a class="anchor" id="_todo000017"></a>Implement restriction matrices  </dd>
 <dt>Member <a class="el" href="group__Exceptions.html#href_anchor">FESubfaceValues&lt; dim, spacedim &gt;::ExcFaceHasNoSubfaces</a>  ()</dt>
-<dd><a class="anchor" id="_todo000021"></a>Document this </dd>
+<dd><a class="anchor" id="_todo000019"></a>Document this </dd>
 <dt>Member <a class="el" href="group__Exceptions.html#href_anchor">FESubfaceValues&lt; dim, spacedim &gt;::ExcReinitCalledWithBoundaryFace</a>  ()</dt>
-<dd><a class="anchor" id="_todo000020"></a>Document this </dd>
+<dd><a class="anchor" id="_todo000018"></a>Document this </dd>
 <dt>Member <a class="el" href="classGinkgoWrappers_1_1SolverBase.html#href_anchor">GinkgoWrappers::SolverBase&lt; ValueType, IndexType &gt;::system_matrix</a>  </dt>
 <dd><a class="anchor" id="_todo000027"></a>Templatize based on Matrix type.  </dd>
 <dt>Member <a class="el" href="classinternal_1_1TriangulationImplementation_1_1TriaObjects.html#href_anchor">internal::TriangulationImplementation::TriaObjects::next_free_pair_object</a>  (const <a class="el" href="classTriangulation.html">Triangulation&lt; dim, spacedim &gt;</a> &amp;tria)</dt>
@@ -142,25 +142,25 @@
 <dt>Member <a class="el" href="namespaceLocalIntegrators_1_1Divergence.html#href_anchor">LocalIntegrators::Divergence::gradient_residual</a>  (<a class="el" href="classVector.html">Vector&lt; number &gt;</a> &amp;result, const FEValuesBase&lt; dim &gt; &amp;fetest, const std::vector&lt; double &gt; &amp;input, const double factor=1.)</dt>
 <dd><a class="anchor" id="_todo000025"></a>Verify: The function <a class="el" href="namespaceLocalIntegrators_1_1Divergence.html#href_anchor">gradient_matrix()</a> is the Frechet derivative of this function with respect to the test functions.  </dd>
 <dt>Class <a class="el" href="classMapping.html">Mapping&lt; dim, spacedim &gt;</a>  </dt>
-<dd><a class="anchor" id="_todo000018"></a>Document what happens in the codimension-1 case. </dd>
+<dd><a class="anchor" id="_todo000020"></a>Document what happens in the codimension-1 case. </dd>
 <dt>Member <a class="el" href="classMapping.html#href_anchor">Mapping&lt; dim, spacedim &gt;::transform</a>  (const <a class="el" href="classArrayView.html">ArrayView</a>&lt; const <a class="el" href="classTensor.html">Tensor&lt; 2, dim &gt;</a> &gt; &amp;input, const MappingKind kind, const typename Mapping&lt; dim, spacedim &gt;::InternalDataBase &amp;internal, const <a class="el" href="classArrayView.html">ArrayView</a>&lt; <a class="el" href="classTensor.html">Tensor&lt; 2, spacedim &gt;</a> &gt; &amp;output) const =0</dt>
-<dd><a class="anchor" id="_todo000019"></a>The formulas for mapping_covariant_gradient, mapping_contravariant_gradient and mapping_piola_gradient are only true as stated for linear mappings. If, for example, the mapping is bilinear (or has a higher order polynomial degree) then there is a missing term associated with the derivative of <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture>. </dd>
+<dd><a class="anchor" id="_todo000021"></a>The formulas for mapping_covariant_gradient, mapping_contravariant_gradient and mapping_piola_gradient are only true as stated for linear mappings. If, for example, the mapping is bilinear (or has a higher order polynomial degree) then there is a missing term associated with the derivative of <picture><source srcset="form_766_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$J$" src="form_766.png"/></picture>. </dd>
 <dt>Class <a class="el" href="classMatrixBlock.html">MatrixBlock&lt; MatrixType &gt;</a>  </dt>
 <dd><a class="anchor" id="_todo000028"></a>Example for the product preconditioner of the pressure Schur complement. </dd>
+<dt>Member <a class="el" href="classMatrixBlock.html#href_anchor">MatrixBlock&lt; MatrixType &gt;::add</a>  (const std::vector&lt; size_type &gt; &amp;indices, const FullMatrix&lt; number &gt; &amp;full_matrix, const bool elide_zero_values=true)</dt>
+<dd><a class="anchor" id="_todo000029"></a><code>elide_zero_values</code> is currently ignored. </dd>
 <dt>Member <a class="el" href="classMatrixBlock.html#href_anchor">MatrixBlock&lt; MatrixType &gt;::add</a>  (const std::vector&lt; size_type &gt; &amp;row_indices, const std::vector&lt; size_type &gt; &amp;col_indices, const FullMatrix&lt; number &gt; &amp;full_matrix, const bool elide_zero_values=true)</dt>
 <dd><a class="anchor" id="_todo000030"></a><code>elide_zero_values</code> is currently ignored. </dd>
 <dt>Member <a class="el" href="classMatrixBlock.html#href_anchor">MatrixBlock&lt; MatrixType &gt;::add</a>  (const size_type row_index, const std::vector&lt; size_type &gt; &amp;col_indices, const std::vector&lt; number &gt; &amp;values, const bool elide_zero_values=true)</dt>
 <dd><a class="anchor" id="_todo000031"></a><code>elide_zero_values</code> is currently ignored. </dd>
-<dt>Member <a class="el" href="classMatrixBlock.html#href_anchor">MatrixBlock&lt; MatrixType &gt;::add</a>  (const std::vector&lt; size_type &gt; &amp;indices, const FullMatrix&lt; number &gt; &amp;full_matrix, const bool elide_zero_values=true)</dt>
-<dd><a class="anchor" id="_todo000029"></a><code>elide_zero_values</code> is currently ignored. </dd>
 <dt>Member <a class="el" href="namespaceMatrixCreator.html#href_anchor">MatrixCreator::create_boundary_mass_matrix</a>  (const <a class="el" href="classMapping.html">Mapping&lt; dim, spacedim &gt;</a> &amp;mapping, const <a class="el" href="classDoFHandler.html">DoFHandler&lt; dim, spacedim &gt;</a> &amp;dof, const <a class="el" href="classQuadrature.html">Quadrature</a>&lt; dim - 1 &gt; &amp;q, SparseMatrix&lt; number &gt; &amp;matrix, const std::map&lt; <a class="el" href="namespacetypes.html#href_anchor">types::boundary_id</a>, const Function&lt; spacedim, number &gt; * &gt; &amp;boundary_functions, <a class="el" href="classVector.html">Vector&lt; number &gt;</a> &amp;rhs_vector, std::vector&lt; types::global_dof_index &gt; &amp;dof_to_boundary_mapping, const Function&lt; spacedim, number &gt; *const weight=0, std::vector&lt; unsigned int &gt; component_mapping={})</dt>
 <dd><a class="anchor" id="_todo000038"></a>This function does not work for finite elements with cell-dependent shape functions.  </dd>
 <dt>Class <a class="el" href="classMeshWorker_1_1Assembler_1_1MGMatrixSimple.html">MeshWorker::Assembler::MGMatrixSimple&lt; MatrixType &gt;</a>  </dt>
 <dd><a class="anchor" id="_todo000034"></a>The matrix structures needed for assembling level matrices with local refinement and continuous elements are missing. </dd>
 <dt>Class <a class="el" href="classMeshWorker_1_1Assembler_1_1ResidualLocalBlocksToGlobalBlocks.html">MeshWorker::Assembler::ResidualLocalBlocksToGlobalBlocks&lt; VectorType &gt;</a>  </dt>
-<dd><a class="anchor" id="_todo000033"></a>Comprehensive model currently not implemented. </dd>
+<dd><a class="anchor" id="_todo000032"></a>Comprehensive model currently not implemented. </dd>
 <dt>Class <a class="el" href="classMeshWorker_1_1DoFInfoBox.html">MeshWorker::DoFInfoBox&lt; dim, DOFINFO &gt;</a>  </dt>
-<dd><a class="anchor" id="_todo000032"></a>Currently, we are storing an object for the cells and two for each face. We could gather all face data pertaining to the cell itself in one object, saving a bit of memory and a few operations, but sacrificing some cleanliness. </dd>
+<dd><a class="anchor" id="_todo000033"></a>Currently, we are storing an object for the cells and two for each face. We could gather all face data pertaining to the cell itself in one object, saving a bit of memory and a few operations, but sacrificing some cleanliness. </dd>
 <dt>Class <a class="el" href="classMGTransferBase.html">MGTransferBase&lt; VectorType &gt;</a>  </dt>
 <dd><a class="anchor" id="_todo000035"></a>update the following documentation, since it does not reflect the latest changes in structure. </dd>
 <dt>Class <a class="el" href="classPathSearch.html">PathSearch</a>  </dt>
/usr/share/doc/packages/dealii/doxygen/deal.tag differs (XML 1.0 document text)
--- old//usr/share/doc/packages/dealii/doxygen/deal.tag	2023-10-24 08:03:04.000000000 +0000
+++ new//usr/share/doc/packages/dealii/doxygen/deal.tag	2023-10-24 08:03:04.000000000 +0000
@@ -460426,12 +460426,12 @@
     <name>changes_between_4_0_and_5_0</name>
     <title>Changes between Version 4.0 and 5.0</title>
     <filename>changes_between_4_0_and_5_0.html</filename>
+    <docanchor file="recent_changes.html">incompatible</docanchor>
   </compound>
   <compound kind="page">
     <name>changes_between_5_0_and_5_1</name>
     <title>Changes between Version 5.0 and 5.1</title>
     <filename>changes_between_5_0_and_5_1.html</filename>
-    <docanchor file="recent_changes.html">incompatible</docanchor>
   </compound>
   <compound kind="page">
     <name>changes_between_5_1_and_5_2</name>
@@ -460645,7 +460645,11 @@
     <docanchor file="step_74.html">Overview</docanchor>
     <docanchor file="step_74.html">Theequation</docanchor>
     <docanchor file="step_12.html">Thetestproblem</docanchor>
+    <docanchor file="step_82.html">Equationdata</docanchor>
     <docanchor file="step_12.html">TheScratchDataandCopyDataclasses</docanchor>
+    <docanchor file="step_12b.html">TheAdvectionProblemclass</docanchor>
+    <docanchor file="step_74.html">Theassemble_systemfunction</docanchor>
+    <docanchor file="step_12b.html">Alltherest</docanchor>
     <docanchor file="step_12.html">dg-vs-cg</docanchor>
     <docanchor file="step_12.html">Whyusediscontinuouselements</docanchor>
   </compound>
@@ -460654,11 +460658,7 @@
     <title>The step-12b tutorial program</title>
     <filename>step_12b.html</filename>
     <docanchor file="step_9.html">Thetestcase</docanchor>
-    <docanchor file="step_82.html">Equationdata</docanchor>
-    <docanchor file="step_12b.html">TheAdvectionProblemclass</docanchor>
-    <docanchor file="step_74.html">Theassemble_systemfunction</docanchor>
     <docanchor file="step_39.html">Thelocalintegrators</docanchor>
-    <docanchor file="step_12b.html">Alltherest</docanchor>
   </compound>
   <compound kind="page">
     <name>step_13</name>
@@ -460790,6 +460790,7 @@
     <filename>step_18.html</filename>
     <docanchor file="step_18.html">Quasistaticelasticdeformation</docanchor>
     <docanchor file="step_18.html">Motivationofthemodel</docanchor>
+    <docanchor file="step_58.html">Timediscretization</docanchor>
     <docanchor file="step_18.html">Updatingthestressvariable</docanchor>
     <docanchor file="step_18.html">Parallelgraphicaloutput</docanchor>
     <docanchor file="step_18.html">Atriangulationwithautomaticpartitioning</docanchor>
@@ -460823,7 +460824,6 @@
     <name>step_19</name>
     <title>The step-19 tutorial program</title>
     <filename>step_19.html</filename>
-    <docanchor file="step_58.html">Timediscretization</docanchor>
     <docanchor file="step_19.html">Spatialdiscretization</docanchor>
     <docanchor file="step_19.html">Dealingwithparticlesprogrammatically</docanchor>
     <docanchor file="step_19.html">Globaldefinitions</docanchor>
@@ -460865,12 +460865,14 @@
     <docanchor file="step_20.html">Theequations</docanchor>
     <docanchor file="step_20.html">Formulationweakformanddiscreteproblem</docanchor>
     <docanchor file="step_72.html">Assemblingthelinearsystem</docanchor>
+    <docanchor file="step_55.html">Linearsolversandpreconditioners</docanchor>
     <docanchor file="step_20.html">SolvingusingtheSchurcomplement</docanchor>
     <docanchor file="step_20.html">TheLinearOperatorframeworkindealII</docanchor>
     <docanchor file="step_20.html">ApreconditionerfortheSchurcomplement</docanchor>
     <docanchor file="step_58.html">Definitionofthetestcase</docanchor>
     <docanchor file="step_20.html">ThecodeMixedLaplaceProblemcodeclasstemplate</docanchor>
     <docanchor file="step_61.html">Righthandsideboundaryvaluesandexactsolution</docanchor>
+    <docanchor file="step_21.html">Theinversepermeabilitytensor</docanchor>
     <docanchor file="step_20.html">MixedLaplaceProblemclassimplementation</docanchor>
     <docanchor file="step_20.html">MixedLaplaceProblemMixedLaplaceProblem</docanchor>
     <docanchor file="step_20.html">MixedLaplaceProblemmake_grid_and_dofs</docanchor>
@@ -460899,11 +460901,9 @@
     <docanchor file="step_21.html">Pressureboundaryvalues</docanchor>
     <docanchor file="step_21.html">Saturationboundaryvalues</docanchor>
     <docanchor file="step_21.html">Initialdata</docanchor>
-    <docanchor file="step_21.html">Theinversepermeabilitytensor</docanchor>
     <docanchor file="step_21.html">Singlecurvingcrackpermeability</docanchor>
     <docanchor file="step_21.html">Randommediumpermeability</docanchor>
     <docanchor file="step_21.html">Theinversemobilityandsaturationfunctions</docanchor>
-    <docanchor file="step_55.html">Linearsolversandpreconditioners</docanchor>
     <docanchor file="step_21.html">codeTwoPhaseFlowProblemcodeclassimplementation</docanchor>
     <docanchor file="step_21.html">TwoPhaseFlowProblemTwoPhaseFlowProblem</docanchor>
     <docanchor file="step_21.html">TwoPhaseFlowProblemmake_grid_and_dofs</docanchor>
overalldiffered=1 (number of pkgs that are not bit-by-bit identical: 0 is good)
overall=1