\doxysection{src/include/serif/backend/mfem/operators/volume\+\_\+application.hpp File Reference} \hypertarget{volume__application_8hpp}{}\label{volume__application_8hpp}\index{src/include/serif/backend/mfem/operators/volume\_application.hpp@{src/include/serif/backend/mfem/operators/volume\_application.hpp}} {\ttfamily \#include $<$algorithm$>$}\newline {\ttfamily \#include $<$array$>$}\newline {\ttfamily \#include $<$functional$>$}\newline {\ttfamily \#include $<$span$>$}\newline {\ttfamily \#include $<$tuple$>$}\newline {\ttfamily \#include $<$vector$>$}\newline {\ttfamily \#include "{}serif/backend/mfem/operators/volume\+\_\+inputs.\+hpp"{}}\newline {\ttfamily \#include "{}serif/backend/mfem/operators/element\+\_\+evaluation.\+hpp"{}}\newline {\ttfamily \#include "{}serif/backend/mfem/operators/element\+\_\+transpose.\+hpp"{}}\newline {\ttfamily \#include "{}serif/backend/mfem/shared/parallel.\+hpp"{}}\newline Include dependency graph for volume\+\_\+application.\+hpp\+: \nopagebreak \begin{figure}[H] \begin{center} \leavevmode \includegraphics[width=350pt]{volume__application_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__application_8hpp__dep__incl} \end{center} \end{figure} \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}} \end{DoxyCompactItemize} \doxysubsubsection*{Functions} \begin{DoxyCompactItemize} \item {\footnotesize template$<$Volume\+Equation EquationT, typename SchemaT$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a2ce0b21e25c656b47e0495e92d737149}{serif\+::operators\+::backend\+::mfem\+::validate\+\_\+volume\+\_\+data}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ EquationT, SchemaT $>$ \&data) \begin{DoxyCompactList}\small\item\em Reject changes to discretization objects borrowed by an accepted linearization. \end{DoxyCompactList}\item {\footnotesize template$<$Volume\+Equation EquationT, typename SchemaT, typename VisitT$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a718862dd1fe657d4885b011fd55cde46}{serif\+::operators\+::backend\+::mfem\+::for\+\_\+each\+\_\+volume\+\_\+element}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ EquationT, SchemaT $>$ \&data, VisitT \&\&visit) \begin{DoxyCompactList}\small\item\em Visit each contribution\textquotesingle{}s own batch in equation order, without scanning other contributions. \end{DoxyCompactList}\item {\footnotesize template$<$Volume\+Equation EquationT, typename SchemaT, typename VisitT$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_abbac49d7d6daa9ce9fe76342339d94fe}{serif\+::operators\+::backend\+::mfem\+::for\+\_\+each\+\_\+volume\+\_\+linearization}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ EquationT, SchemaT $>$ \&data, VisitT \&\&visit) \begin{DoxyCompactList}\small\item\em Visit equation data together with its graph-\/owned local geometry derivative matrix. \end{DoxyCompactList}\item {\footnotesize template$<$Volume\+Equation EquationT, typename SchemaT$>$ }\\int \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_aff66659e150d476efb64d1a9651cde42}{serif\+::operators\+::backend\+::mfem\+::volume\+\_\+height}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ EquationT, SchemaT $>$ \&data) \begin{DoxyCompactList}\small\item\em Return the supported residual size. \end{DoxyCompactList}\item {\footnotesize template$<$Volume\+Equation EquationT, typename SchemaT$>$ }\\int \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a33f731c05cee3a752100263240731095}{serif\+::operators\+::backend\+::mfem\+::volume\+\_\+width}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ EquationT, SchemaT $>$ \&data) \begin{DoxyCompactList}\small\item\em Packed directions contain unique coefficient terms followed by displacement. \end{DoxyCompactList}\item {\footnotesize template$<$Volume\+Equation EquationT, typename SchemaT$>$ }\\std\+::size\+\_\+t \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a368650f559a68f188f858849afdd7471}{serif\+::operators\+::backend\+::mfem\+::tensor\+\_\+element\+\_\+count}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ EquationT, SchemaT $>$ \&data) \begin{DoxyCompactList}\small\item\em Count contribution-\/elements using tensor contractions for any sampled basis. \end{DoxyCompactList}\item {\footnotesize template$<$Volume\+Equation EquationT, typename SchemaT$>$ }\\int \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a3aa198a397c6c767f89de3518c127b76}{serif\+::operators\+::backend\+::mfem\+::integration\+\_\+order}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ EquationT, SchemaT $>$ \&data, int element) \begin{DoxyCompactList}\small\item\em Return the largest contribution quadrature order on a supported mesh element. \end{DoxyCompactList}\item {\footnotesize template$<$Volume\+Equation EquationT, typename SchemaT$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a1efb6ecb2c7b725a60484600e7f82196}{serif\+::operators\+::backend\+::mfem\+::volume\+\_\+residual}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ EquationT, SchemaT $>$ \&data, \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \&result) \begin{DoxyCompactList}\small\item\em Copy the residual already assembled and checked when this result was accepted. \end{DoxyCompactList}\item {\footnotesize template$<$std\+::size\+\_\+t Count$>$ }\\std\+::array$<$ \mbox{\hyperlink{classserif_1_1discretization_1_1backend_1_1mfem_1_1_dof_map_1_1_elements}{discretization\+::backend\+::mfem\+::\+Dof\+Map\+::\+Elements}}, Count $>$ \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_aec7527f93b877c641a13bc997d00a68e}{serif\+::operators\+::backend\+::mfem\+::column\+\_\+elements}} (const std\+::array$<$ const \mbox{\hyperlink{classserif_1_1discretization_1_1backend_1_1mfem_1_1_dof_map}{discretization\+::backend\+::mfem\+::\+Dof\+Map}} \texorpdfstring{$\ast$}{*}, Count $>$ \&columns) \begin{DoxyCompactList}\small\item\em Validate coefficient bindings once before a complete element traversal. \end{DoxyCompactList}\item {\footnotesize template$<$bool Fields = true, bool Geometry = true, Volume\+Equation EquationT, typename SchemaT$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_acf1a4b7b266494712953eae77707edc4}{serif\+::operators\+::backend\+::mfem\+::apply\+\_\+volume\+\_\+direction}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ EquationT, SchemaT $>$ \&data, const std\+::array$<$ const \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \texorpdfstring{$\ast$}{*}, \mbox{\hyperlink{structserif_1_1operators_1_1_equation_plan}{Equation\+Plan}}$<$ EquationT $>$\+::column\+\_\+count $>$ \&directions, const \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \&displacement\+\_\+direction, \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_workspace}{Workspace}} \&workspace, \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \&result) \begin{DoxyCompactList}\small\item\em Apply only the requested directions and assemble their supported residual contribution. \end{DoxyCompactList}\item {\footnotesize template$<$Volume\+Equation EquationT, typename SchemaT$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a65e4f364402b0e2486b3bc0a849f5ca4}{serif\+::operators\+::backend\+::mfem\+::apply\+\_\+volume\+\_\+displacements}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ EquationT, SchemaT $>$ \&data, std\+::span$<$ const \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \texorpdfstring{$\ast$}{*}const $>$ displacement\+\_\+directions, std\+::span$<$\mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \texorpdfstring{$\ast$}{*}const $>$ results) \begin{DoxyCompactList}\small\item\em apply\+\_\+volume\+\_\+direction$<$false, true$>$ for several displacement directions in one traversal. \end{DoxyCompactList}\item {\footnotesize template$<$Volume\+Equation EquationT, typename SchemaT, typename CoefficientsT$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a4942d6272956339f36fed0b324db245d}{serif\+::operators\+::backend\+::mfem\+::apply\+\_\+jacobian}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ EquationT, SchemaT $>$ \&data, const CoefficientsT \&direction, const \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \&displacement\+\_\+direction, \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_workspace}{Workspace}} \&workspace, \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \&result) \begin{DoxyCompactList}\small\item\em Apply a direction whose terms explicitly name the accepted coefficient bindings. \end{DoxyCompactList}\item {\footnotesize template$<$Volume\+Equation EquationT, typename SchemaT$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_aa4416680f0b6aafd7ce3e0b317031f06}{serif\+::operators\+::backend\+::mfem\+::apply\+\_\+jacobian}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ EquationT, SchemaT $>$ \&data, const \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \&direction, \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_workspace}{Workspace}} \&workspace, \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \&result) \begin{DoxyCompactList}\small\item\em Unpack unique coefficient terms and displacement, then use the same numerical action. \end{DoxyCompactList}\item {\footnotesize template$<$Volume\+Equation EquationT, typename SchemaT$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_ad1aedc69453bbdc1c7746c64f8d88812}{serif\+::operators\+::backend\+::mfem\+::apply\+\_\+jacobian\+\_\+transpose}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_data}{Volume\+Data}}$<$ EquationT, SchemaT $>$ \&data, const \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \&residual\+\_\+dual, \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_workspace}{Workspace}} \&workspace, \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \&result) \begin{DoxyCompactList}\small\item\em Assemble the full coordinate transpose in the same packed order as the forward action. \end{DoxyCompactList}\end{DoxyCompactItemize}