\doxysection{src/include/serif/backend/mfem/operators/volume\+\_\+field\+\_\+block.hpp File Reference} \hypertarget{volume__field__block_8hpp}{}\label{volume__field__block_8hpp}\index{src/include/serif/backend/mfem/operators/volume\_field\_block.hpp@{src/include/serif/backend/mfem/operators/volume\_field\_block.hpp}} {\ttfamily \#include $<$algorithm$>$}\newline {\ttfamily \#include $<$concepts$>$}\newline {\ttfamily \#include $<$functional$>$}\newline {\ttfamily \#include $<$memory$>$}\newline {\ttfamily \#include $<$vector$>$}\newline {\ttfamily \#include "{}serif/backend/mfem/discretization/element\+\_\+coordinates.\+hpp"{}}\newline {\ttfamily \#include "{}serif/backend/mfem/operators/linearized\+\_\+block.\+hpp"{}}\newline {\ttfamily \#include "{}serif/backend/mfem/operators/volume\+\_\+application.\+hpp"{}}\newline {\ttfamily \#include "{}serif/backend/mfem/shared/parallel.\+hpp"{}}\newline Include dependency graph for volume\+\_\+field\+\_\+block.\+hpp\+: \nopagebreak \begin{figure}[H] \begin{center} \leavevmode \includegraphics[width=350pt]{volume__field__block_8hpp__incl} \end{center} \end{figure} This graph shows which files directly or indirectly include this file\+: \nopagebreak \begin{figure}[H] \begin{center} \leavevmode \includegraphics[width=350pt]{volume__field__block_8hpp__dep__incl} \end{center} \end{figure} \doxysubsubsection*{Classes} \begin{DoxyCompactItemize} \item class \mbox{\hyperlink{classserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator}{serif\+::operators\+::backend\+::mfem\+::detail\+::\+Volume\+Field\+Operator$<$ Field, Equation, Schema $>$}} \begin{DoxyCompactList}\small\item\em Retain accepted data while applying a single field coupling with reusable contraction scratch. \end{DoxyCompactList}\item struct \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_volume_field_operator_1_1_scratch}{serif\+::operators\+::backend\+::mfem\+::detail\+::\+Volume\+Field\+Operator$<$ Field, Equation, Schema $>$\+::\+Scratch}} \begin{DoxyCompactList}\small\item\em One worker\textquotesingle{}s element scratch. \end{DoxyCompactList}\item struct \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probed_element_block}{serif\+::operators\+::backend\+::mfem\+::detail\+::\+Probed\+Element\+Block}} \begin{DoxyCompactList}\small\item\em One element\textquotesingle{}s probed block\+: column c\textquotesingle{}s integrated values for every local row, column-\/major. \end{DoxyCompactList}\item struct \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probe_scratch}{serif\+::operators\+::backend\+::mfem\+::detail\+::\+Probe\+Scratch}} \begin{DoxyCompactList}\small\item\em Per-\/worker scratch for probing element blocks. \end{DoxyCompactList}\item struct \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_coefficient_expansion}{serif\+::operators\+::backend\+::mfem\+::detail\+::\+Coefficient\+Expansion}} \begin{DoxyCompactList}\small\item\em Weighted reduced coordinates of each local coordinate, as CSR\+: local i owns \mbox{[}offsets\mbox{[}i\mbox{]}, offsets\mbox{[}i+1\mbox{]}). \end{DoxyCompactList}\item struct \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_constrained_element_block}{serif\+::operators\+::backend\+::mfem\+::detail\+::\+Constrained\+Element\+Block}} \begin{DoxyCompactList}\small\item\em One element\textquotesingle{}s probed block on constrained bindings\+: column-\/major values and both constraint expansions. \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsubsection*{Namespaces} \begin{DoxyCompactItemize} \item namespace \mbox{\hyperlink{namespaceserif}{serif}} \item namespace \mbox{\hyperlink{namespaceserif_1_1operators}{serif\+::operators}} \item namespace \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend}{serif\+::operators\+::backend}} \item namespace \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem}{serif\+::operators\+::backend\+::mfem}} \item namespace \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail}{serif\+::operators\+::backend\+::mfem\+::detail}} \end{DoxyCompactItemize} \doxysubsubsection*{Functions} \begin{DoxyCompactItemize} \item {\footnotesize template$<$typename Field, typename Equation, typename \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_abb729acf4b6bc637b867180dc6739b46}{Schema}}, typename Visit$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_abb1a893a5fb0670283d9989d1ac6f4e7}{serif\+::operators\+::backend\+::mfem\+::detail\+::for\+\_\+each\+\_\+field\+\_\+element}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ Equation, \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_abb729acf4b6bc637b867180dc6739b46}{Schema}} $>$ \&data, Visit \&\&visit) \begin{DoxyCompactList}\small\item\em Ignore a structurally absent field before gathering coefficients or touching contribution bases. \end{DoxyCompactList}\item {\footnotesize template$<$typename Field, typename Equation, typename Contribution$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_aa70faca762d4549cb73a42d78c5c88f6}{serif\+::operators\+::backend\+::mfem\+::detail\+::field\+\_\+integrand}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_element_data}{Element\+Data}}$<$ \mbox{\hyperlink{structserif_1_1operators_1_1_equation_plan}{Equation\+Plan}}$<$ Equation $>$\+::operand\+\_\+count $>$ \&element, const \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \&direction, \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \&integrand, \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \&samples, \mbox{\hyperlink{structserif_1_1discretization_1_1backend_1_1mfem_1_1_basis_workspace}{Basis\+Workspace}} \&workspace) \begin{DoxyCompactList}\small\item\em Contract only the requested physical field; geometry is frozen in this accepted linearization. \end{DoxyCompactList}\item {\footnotesize template$<$typename Field, typename Equation$>$ }\\consteval std\+::size\+\_\+t \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_aaddd86c07d54c546cbaad5ca845225c6}{serif\+::operators\+::backend\+::mfem\+::detail\+::field\+\_\+column}} () \begin{DoxyCompactList}\small\item\em Locate a physical field in the equation\textquotesingle{}s unique coefficient columns. \end{DoxyCompactList}\item std\+::shared\+\_\+ptr$<$ const \+::mfem\+::\+Sparse\+Matrix $>$ \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_ae7dfb772f1834905d73ff43cfa43c710}{serif\+::operators\+::backend\+::mfem\+::detail\+::make\+\_\+csr}} (const std\+::vector$<$ std\+::vector$<$ int $>$ $>$ \&row\+\_\+columns, const std\+::vector$<$ std\+::vector$<$ double $>$ $>$ \&row\+\_\+values, const int height, const int width) \begin{DoxyCompactList}\small\item\em Write MFEM-\/style CSR rows (already in Finalize() order) into an owning \doxylink{namespaceserif_a90679f321c52b8a722250593c545d1c0}{Sparse\+Matrix}. \end{DoxyCompactList}\item std\+::shared\+\_\+ptr$<$ const \+::mfem\+::\+Sparse\+Matrix $>$ \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_ad9796d4821ba553a3da6dde44ab7d171}{serif\+::operators\+::backend\+::mfem\+::detail\+::finalize\+\_\+probed\+\_\+blocks}} (const std\+::vector$<$ \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_probed_element_block}{Probed\+Element\+Block}} $>$ \&blocks, const int height, const int width) \begin{DoxyCompactList}\small\item\em Sparse\+Matrix\+::\+Add for every probed entry followed by Finalize(), built without MFEM\textquotesingle{}s linked rows. \end{DoxyCompactList}\item std\+::shared\+\_\+ptr$<$ const \+::mfem\+::\+Sparse\+Matrix $>$ \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_1_1detail_a336109e5f1a8feca9a40eb97491c8fe1}{serif\+::operators\+::backend\+::mfem\+::detail\+::finalize\+\_\+constrained\+\_\+blocks}} (const std\+::vector$<$ \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1detail_1_1_constrained_element_block}{Constrained\+Element\+Block}} $>$ \&blocks, const int height, const int width) \begin{DoxyCompactList}\small\item\em The constrained form of finalize\+\_\+probed\+\_\+blocks\+: Sparse\+Matrix\+::\+Add(row\+\_\+index, column\+\_\+index, row\+\_\+weight \texorpdfstring{$\ast$}{*} value \texorpdfstring{$\ast$}{*} column\+\_\+weight) for every element, column, local row, row coefficient and column coefficient in that order, followed by Finalize(). \end{DoxyCompactList}\item {\footnotesize template$<$typename Field, Volume\+Equation Equation, typename \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_abb729acf4b6bc637b867180dc6739b46}{Schema}}$>$ }\\std\+::shared\+\_\+ptr$<$ const \+::mfem\+::\+Sparse\+Matrix $>$ \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a2e74a168003d1826779050608d9271f8}{serif\+::operators\+::backend\+::mfem\+::assemble\+\_\+volume\+\_\+field}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ Equation, \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_abb729acf4b6bc637b867180dc6739b46}{Schema}} $>$ \&data) \begin{DoxyCompactList}\small\item\em Assemble a selected field block from accepted weighted derivatives, never by probing the whole system. \end{DoxyCompactList}\item {\footnotesize template$<$typename Field, Volume\+Equation Equation, typename \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_abb729acf4b6bc637b867180dc6739b46}{Schema}}$>$ }\\std\+::vector$<$ double $>$ \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_acc3520d8d4786ac311e71eca37407696}{serif\+::operators\+::backend\+::mfem\+::volume\+\_\+field\+\_\+diagonal}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ Equation, \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_abb729acf4b6bc637b867180dc6739b46}{Schema}} $>$ \&data) \begin{DoxyCompactList}\small\item\em Extract exact physical diagonals, retaining constraint cross terms when hanging nodes are present. \end{DoxyCompactList}\item {\footnotesize template$<$typename Field, Volume\+Equation Equation, typename \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_abb729acf4b6bc637b867180dc6739b46}{Schema}}$>$ }\\\mbox{\hyperlink{classserif_1_1operators_1_1backend_1_1mfem_1_1_linearized_block}{Linearized\+Block}} \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a1cdce781103a0654eb036130ddc8e590}{serif\+::operators\+::backend\+::mfem\+::volume\+\_\+field\+\_\+block}} (std\+::shared\+\_\+ptr$<$ const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ Equation, \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_abb729acf4b6bc637b867180dc6739b46}{Schema}} $>$ $>$ data) \begin{DoxyCompactList}\small\item\em Expose efficient physical block operations from an owning accepted dependency result. \end{DoxyCompactList}\end{DoxyCompactItemize}