\doxysection{src/include/serif/operators/backend/mfem/nodal\+\_\+computations.hpp File Reference} \hypertarget{nodal__computations_8hpp}{}\label{nodal__computations_8hpp}\index{src/include/serif/operators/backend/mfem/nodal\_computations.hpp@{src/include/serif/operators/backend/mfem/nodal\_computations.hpp}} {\ttfamily \#include $<$expected$>$}\newline {\ttfamily \#include $<$utility$>$}\newline {\ttfamily \#include $<$tuple$>$}\newline {\ttfamily \#include "{}serif/operators/backend/mfem/nodal\+\_\+evaluation.\+hpp"{}}\newline {\ttfamily \#include "{}serif/operators/backend/mfem/nodal\+\_\+inputs.\+hpp"{}}\newline {\ttfamily \#include "{}serif/operators/backend/mfem/preparation.\+hpp"{}}\newline {\ttfamily \#include "{}serif/utils/dependencies/dependencies.\+hpp"{}}\newline Include dependency graph for nodal\+\_\+computations.\+hpp\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode \includegraphics[width=350pt]{nodal__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]{nodal__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*{Functions} \begin{DoxyCompactItemize} \item {\footnotesize template$<$typename Scope, typename Input\+Key, Nodal\+Value\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_afd39ae1e2676abf5f9bca84a5b5f8a11}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+nodal\+\_\+evaluation\+\_\+computation}} (EquationT equation, \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_nodal_discretization}{Nodal\+Discretization}}$<$ EquationT, SchemaT $>$ discretization) \begin{DoxyCompactList}\small\item\em Declare the point or boundary calculation; its fixed equation and selection move with the graph. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, Nodal\+Value\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_ae4111f5b0c924973ed1a14f0447457a0}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+nodal\+\_\+equation\+\_\+computation}} (EquationT equation, \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_nodal_discretization}{Nodal\+Discretization}}$<$ EquationT, SchemaT $>$ discretization) \begin{DoxyCompactList}\small\item\em Declare a standalone nodal evaluation from already selected coefficients. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, Nodal\+Value\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a3224205fc803428f6d320bf757c2ace7}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+nodal\+\_\+sampling\+\_\+computation}} (\mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_nodal_discretization}{Nodal\+Discretization}}$<$ EquationT, SchemaT $>$ discretization) \begin{DoxyCompactList}\small\item\em Select nodal coefficients from the same physical field source used by volume equations. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, Nodal\+Value\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_aa64fa93b19b53b4cc2a6c2e3f49138f9}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+nodal\+\_\+equation\+\_\+computations}} (EquationT equation, \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_nodal_discretization}{Nodal\+Discretization}}$<$ EquationT, SchemaT $>$ discretization) \begin{DoxyCompactList}\small\item\em Declare sampling and point physics as ordinary stages of a larger dependency graph. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, Affine\+Point\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a6c07266dbf644f15d01e1da900eba177}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+point\+\_\+border\+\_\+computation}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_point_border_discretization}{Point\+Border\+Discretization}}$<$ EquationT, SchemaT $>$ \&discretization) \begin{DoxyCompactList}\small\item\em Join the accepted point equation to its independently tracked global scalar. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, Affine\+Point\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a89d15d1f07d6e3b57e9b2798a2bac258}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+point\+\_\+border\+\_\+computations}} (EquationT equation, const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_point_border_discretization}{Point\+Border\+Discretization}}$<$ EquationT, SchemaT $>$ \&discretization) \begin{DoxyCompactList}\small\item\em Declare a complete affine point border without constructing an independent cache. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, Nodal\+Value\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT, typename CoefficientsT$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a47ed34944e6244b457221f9f4c7671a5}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+nodal\+\_\+equation\+\_\+cache}} (EquationT equation, const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_nodal_discretization}{Nodal\+Discretization}}$<$ EquationT, SchemaT $>$ \&discretization, const CoefficientsT \&term\+\_\+coefficients) \begin{DoxyCompactList}\small\item\em Construct an ordinary dependency cache without evaluating the nodal equation. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, Affine\+Point\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT, typename CoefficientsT$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_afdd5a164fef5493e3f62ee9579a534a0}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+point\+\_\+border\+\_\+cache}} (EquationT equation, const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_point_border_discretization}{Point\+Border\+Discretization}}$<$ EquationT, SchemaT $>$ \&discretization, const CoefficientsT \&term\+\_\+coefficients) \begin{DoxyCompactList}\small\item\em Keep the border scalar and point linearization in one dependency graph and one accepted result. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, typename CacheT, Nodal\+Value\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT, 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_ae965bdc890f9398f12e5041d55a0a71a}{serif\+::operators\+::backend\+::mfem\+::try\+\_\+prepare\+\_\+nodal}} (CacheT \&cache, const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_nodal_discretization}{Nodal\+Discretization}}$<$ EquationT, SchemaT $>$ \&discretization, const CoefficientsT \&term\+\_\+coefficients, const \mbox{\hyperlink{namespaceserif_1_1utils_1_1dependencies_a84cfff3388a09373636c15a3817a0782}{Preparation\+Mode}} mode=Preparation\+Mode\+::reuse\+\_\+unchanged) \begin{DoxyCompactList}\small\item\em Validate and gather the selected coefficients, then let the dependency cache decide what needs evaluation. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, typename CacheT, Affine\+Point\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT, 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_aa8db1f5aec0e64537404eb0767b5621f}{serif\+::operators\+::backend\+::mfem\+::try\+\_\+prepare\+\_\+point\+\_\+border}} (CacheT \&cache, const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_point_border_discretization}{Point\+Border\+Discretization}}$<$ EquationT, SchemaT $>$ \&discretization, const CoefficientsT \&term\+\_\+coefficients, const \mbox{\hyperlink{namespaceserif_1_1utils_1_1dependencies_a84cfff3388a09373636c15a3817a0782}{Preparation\+Mode}} mode=Preparation\+Mode\+::reuse\+\_\+unchanged) \begin{DoxyCompactList}\small\item\em Validate both point and scalar sources before publishing the complete border calculation. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, typename CacheT, typename DiscretizationT, typename CoefficientsT$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_ac7906fe37d6304fbb95402ac8dfed1e4}{serif\+::operators\+::backend\+::mfem\+::prepare\+\_\+nodal}} (CacheT \&cache, const DiscretizationT \&discretization, const CoefficientsT \&term\+\_\+coefficients, const \mbox{\hyperlink{namespaceserif_1_1utils_1_1dependencies_a84cfff3388a09373636c15a3817a0782}{Preparation\+Mode}} mode=Preparation\+Mode\+::reuse\+\_\+unchanged) \begin{DoxyCompactList}\small\item\em Translate a numerical rejection at the caller-\/facing throwing boundary. \end{DoxyCompactList}\item {\footnotesize template$<$typename Scope = void, typename CacheT, typename DiscretizationT, typename CoefficientsT$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a53c63d4c31ea0ba8e7958cd1c76679d5}{serif\+::operators\+::backend\+::mfem\+::prepare\+\_\+point\+\_\+border}} (CacheT \&cache, const DiscretizationT \&discretization, const CoefficientsT \&term\+\_\+coefficients, const \mbox{\hyperlink{namespaceserif_1_1utils_1_1dependencies_a84cfff3388a09373636c15a3817a0782}{Preparation\+Mode}} mode=Preparation\+Mode\+::reuse\+\_\+unchanged) \begin{DoxyCompactList}\small\item\em Translate an affine border\textquotesingle{}s numerical rejection at the caller-\/facing throwing boundary. \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_af49a0a0b65144d7a68caa590966cf766}{serif\+::operators\+::backend\+::mfem\+::nodal\+\_\+work\+\_\+report}} (const CacheT \&cache) \begin{DoxyCompactList}\small\item\em Derive numerical work from the dependency report, without a second report lifecycle. \end{DoxyCompactList}\end{DoxyCompactItemize}