\doxysection{src/include/serif/backend/mfem/operators/volume\+\_\+computations.hpp File Reference} \hypertarget{volume__computations_8hpp}{}\label{volume__computations_8hpp}\index{src/include/serif/backend/mfem/operators/volume\_computations.hpp@{src/include/serif/backend/mfem/operators/volume\_computations.hpp}} {\ttfamily \#include $<$expected$>$}\newline {\ttfamily \#include $<$memory$>$}\newline {\ttfamily \#include $<$tuple$>$}\newline {\ttfamily \#include $<$utility$>$}\newline {\ttfamily \#include "{}serif/backend/mfem/operators/volume\+\_\+stages.\+hpp"{}}\newline {\ttfamily \#include "{}serif/backend/mfem/operators/volume\+\_\+inputs.\+hpp"{}}\newline {\ttfamily \#include "{}serif/utils/dependencies/dependencies.\+hpp"{}}\newline Include dependency graph for volume\+\_\+computations.\+hpp\+: \nopagebreak \begin{figure}[H] \begin{center} \leavevmode \includegraphics[width=350pt]{volume__computations_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__computations_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*{Typedefs} \begin{DoxyCompactItemize} \item {\footnotesize template$<$std\+::size\+\_\+t Contribution, typename OperandT, typename Scope = void$>$ }\\using \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a3ab2921f86a4c7968445336f3667e928}{serif\+::operators\+::backend\+::mfem\+::\+Volume\+Operand\+Result}} \begin{DoxyCompactList}\small\item\em Values need a mapping node only when the operand\textquotesingle{}s physical representation depends on geometry. \end{DoxyCompactList}\item {\footnotesize template$<$typename CacheT, typename Scope = void$>$ }\\using \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_ab42320d34c9062b28227dfe8cef248df}{serif\+::operators\+::backend\+::mfem\+::\+Volume\+Equation\+Of}} = typename std\+::remove\+\_\+cvref\+\_\+t$<$decltype(std\+::declval$<$const CacheT\&$>$().template get$<$typename \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1volume__keys_1_1_scoped}{volume\+\_\+keys\+::\+Scoped}}$<$Scope$>$\+::\+Linearization$>$())$>$\+::\+Equation \begin{DoxyCompactList}\small\item\em Recover the equation type from a cache\textquotesingle{}s accepted result type, without accessing a result. \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsubsection*{Functions} \begin{DoxyCompactItemize} \item {\footnotesize template$<$std\+::size\+\_\+t Contribution, typename OperandT, Volume\+Equation EquationT, typename SchemaT, typename Scope = void$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a77af4190fb0cc72deff394bcc0cff123}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+operand\+\_\+computations}} (const std\+::shared\+\_\+ptr$<$ \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_scratch}{Volume\+Scratch}} $>$ \&scratch) \begin{DoxyCompactList}\small\item\em Declare one coefficient contraction, followed by a physical mapping when the space requires it. \end{DoxyCompactList}\item {\footnotesize template$<$std\+::size\+\_\+t Index, typename Scope, Volume\+Equation EquationT, typename SchemaT, typename ContributionT, typename... Operands$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_aae521e0754471b48f4d497fc0365ff9b}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+contribution\+\_\+computations}} (const std\+::shared\+\_\+ptr$<$ const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_configuration}{Volume\+Configuration}}$<$ EquationT, SchemaT $>$ $>$ \&configuration, const std\+::shared\+\_\+ptr$<$ \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_scratch}{Volume\+Scratch}} $>$ \&scratch, \mbox{\hyperlink{structserif_1_1operators_1_1_contribution_binding}{Contribution\+Binding}}$<$ ContributionT $>$ contribution, \mbox{\hyperlink{structserif_1_1utils_1_1types_1_1_type_list}{utils\+::types\+::\+Type\+List}}$<$ Operands... $>$) \begin{DoxyCompactList}\small\item\em Build one contribution\textquotesingle{}s branch in the same order as its numerical description. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, Volume\+Equation EquationT, typename SchemaT, std\+::size\+\_\+t... Indices$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a70d90fed173baf383ef397352c4d6c5c}{serif\+::operators\+::backend\+::mfem\+::connect\+\_\+volume\+\_\+contributions}} (const std\+::shared\+\_\+ptr$<$ const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_configuration}{Volume\+Configuration}}$<$ EquationT, SchemaT $>$ $>$ \&configuration, std\+::index\+\_\+sequence$<$ Indices... $>$) \begin{DoxyCompactList}\small\item\em Expose contribution computations so deformation and equations can share one dependency graph. \end{DoxyCompactList}\item {\footnotesize template$<$Volume\+Equation EquationT, std\+::size\+\_\+t Index, typename Scope = void, typename CacheT$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a45ae71910873ac5e984c7440d0adbba9}{serif\+::operators\+::backend\+::mfem\+::report\+\_\+contribution\+\_\+preparation}} (const CacheT \&cache, \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_numerical_work}{Numerical\+Work}} \&report) \begin{DoxyCompactList}\small\item\em Convert the dependency engine\textquotesingle{}s node statuses to numerical work counts for one contribution. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, Volume\+Equation EquationT, typename SchemaT$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a6ea978d5b2c099dafd286905ca130c27}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+volume\+\_\+equation\+\_\+computations}} (std\+::shared\+\_\+ptr$<$ const EquationT $>$ equation, const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_discretization}{Volume\+Discretization}}$<$ typename Equation\+T\+::\+Test, SchemaT $>$ \&discretization, \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_options}{Volume\+Options}} options=\{\}) \begin{DoxyCompactList}\small\item\em Declare reusable volume computations without selecting their source of displacement. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, Volume\+Equation EquationT, typename SchemaT$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a052c1dfb95a09efd879a80acb8534996}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+volume\+\_\+equation\+\_\+computations}} (EquationT equation, const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_discretization}{Volume\+Discretization}}$<$ typename Equation\+T\+::\+Test, SchemaT $>$ \&discretization, \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_options}{Volume\+Options}} options=\{\}) \begin{DoxyCompactList}\small\item\em Own standalone equations while allowing complete models to share their existing immutable members. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, Volume\+Equation EquationT, typename SchemaT, typename InputsT$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_ae5282620930f0820d84b347f1d50065a}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+volume\+\_\+equation\+\_\+cache}} (EquationT equation, const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_discretization}{Volume\+Discretization}}$<$ typename Equation\+T\+::\+Test, SchemaT $>$ \&discretization, const InputsT \&inputs, \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_volume_options}{Volume\+Options}} options=\{\}) \begin{DoxyCompactList}\small\item\em Construct a standalone cache from the same computations used by a coupled deformation graph. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, typename CacheT, typename DiscretizationT, typename CoefficientsT$>$ }\\std\+::expected$<$ void, \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_preparation_rejection}{Preparation\+Rejection}} $>$ \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a1cee0edddef4ad7821dee6a438ef7581}{serif\+::operators\+::backend\+::mfem\+::try\+\_\+prepare\+\_\+volume}} (CacheT \&cache, const DiscretizationT \&discretization, const CoefficientsT \&term\+\_\+coefficients, const \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \&displacement\+\_\+coefficients, \mbox{\hyperlink{namespaceserif_1_1utils_1_1dependencies_a84cfff3388a09373636c15a3817a0782}{Preparation\+Mode}} mode=Preparation\+Mode\+::reuse\+\_\+unchanged) \begin{DoxyCompactList}\small\item\em Validate current inputs and atomically publish a complete volume linearization. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, typename CacheT, typename DiscretizationT, typename CoefficientsT$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_aaf6f3bdae2f07026938d1dd3666e8bd9}{serif\+::operators\+::backend\+::mfem\+::prepare\+\_\+volume}} (CacheT \&cache, const DiscretizationT \&discretization, const CoefficientsT \&term\+\_\+coefficients, const \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a317d4e0bea2ef8780ac3747cfe62bf72}{\+::mfem\+::\+Vector}} \&displacement\+\_\+coefficients, \mbox{\hyperlink{namespaceserif_1_1utils_1_1dependencies_a84cfff3388a09373636c15a3817a0782}{Preparation\+Mode}} mode=Preparation\+Mode\+::reuse\+\_\+unchanged) \begin{DoxyCompactList}\small\item\em Throw a caller-\/visible numerical error when a complete preparation cannot be accepted. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, typename CacheT$>$ }\\\mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_numerical_work}{Numerical\+Work}} \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a0afea8af6370ad21d9b0779a24885e25}{serif\+::operators\+::backend\+::mfem\+::volume\+\_\+work\+\_\+report}} (const CacheT \&cache) \begin{DoxyCompactList}\small\item\em Derive work counts from accepted node statuses; no second report lifecycle is stored. \end{DoxyCompactList}\end{DoxyCompactItemize}