\doxysection{src/include/serif/operators/backend/mfem/nodal\+\_\+inputs.hpp File Reference} \hypertarget{nodal__inputs_8hpp}{}\label{nodal__inputs_8hpp}\index{src/include/serif/operators/backend/mfem/nodal\_inputs.hpp@{src/include/serif/operators/backend/mfem/nodal\_inputs.hpp}} {\ttfamily \#include $<$algorithm$>$}\newline {\ttfamily \#include $<$memory$>$}\newline {\ttfamily \#include $<$utility$>$}\newline {\ttfamily \#include $<$type\+\_\+traits$>$}\newline {\ttfamily \#include "{}serif/discretization/backend/mfem/coefficient\+\_\+tracking.\+hpp"{}}\newline {\ttfamily \#include "{}serif/discretization/backend/mfem/point\+\_\+dofs.\+hpp"{}}\newline {\ttfamily \#include "{}serif/operators/backend/mfem/nodal\+\_\+data.\+hpp"{}}\newline {\ttfamily \#include "{}serif/operators/backend/mfem/term\+\_\+coefficients.\+hpp"{}}\newline {\ttfamily \#include "{}serif/utils/dependencies/dependency\+\_\+context.\+hpp"{}}\newline Include dependency graph for nodal\+\_\+inputs.\+hpp\+:\nopagebreak \begin{figure}[H] \begin{center} \leavevmode \includegraphics[width=350pt]{nodal__inputs_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__inputs_8hpp__dep__incl} \end{center} \end{figure} \doxysubsubsection*{Classes} \begin{DoxyCompactItemize} \item struct \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1nodal__keys_1_1_scoped}{serif\+::operators\+::backend\+::mfem\+::nodal\+\_\+keys\+::\+Scoped$<$ Scope $>$}} \begin{DoxyCompactList}\small\item\em Name the private point selection and accepted results of one equation. \end{DoxyCompactList}\item struct \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1nodal__keys_1_1_scoped_1_1_bindings}{serif\+::operators\+::backend\+::mfem\+::nodal\+\_\+keys\+::\+Scoped$<$ Scope $>$\+::\+Bindings}} \item struct \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1nodal__keys_1_1_scoped_1_1_samples}{serif\+::operators\+::backend\+::mfem\+::nodal\+\_\+keys\+::\+Scoped$<$ Scope $>$\+::\+Samples}} \item struct \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1nodal__keys_1_1_scoped_1_1_linearization}{serif\+::operators\+::backend\+::mfem\+::nodal\+\_\+keys\+::\+Scoped$<$ Scope $>$\+::\+Linearization}} \item struct \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1nodal__keys_1_1_scoped_1_1_border_linearization}{serif\+::operators\+::backend\+::mfem\+::nodal\+\_\+keys\+::\+Scoped$<$ Scope $>$\+::\+Border\+Linearization}} \item struct \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_nodal_bindings}{serif\+::operators\+::backend\+::mfem\+::\+Nodal\+Bindings}} \begin{DoxyCompactList}\small\item\em Reference-\/coordinate edits invalidate a point selection even when coefficients are unchanged. \end{DoxyCompactList}\item struct \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_nodal_binding_tracking}{serif\+::operators\+::backend\+::mfem\+::\+Nodal\+Binding\+Tracking}} \begin{DoxyCompactList}\small\item\em Validate the live selection before comparing equation-\/local metadata snapshots. \end{DoxyCompactList}\item struct \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_selected_nodal_values}{serif\+::operators\+::backend\+::mfem\+::\+Selected\+Nodal\+Values}} \begin{DoxyCompactList}\small\item\em Selected coefficients are owned by the context; the selection has a stable shared identity. \end{DoxyCompactList}\item struct \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_nodal_value_tracking}{serif\+::operators\+::backend\+::mfem\+::\+Nodal\+Value\+Tracking}} \begin{DoxyCompactList}\small\item\em Moving the context or copying equal coefficients does not invalidate the nodal calculation. \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_1nodal__keys}{serif\+::operators\+::backend\+::mfem\+::nodal\+\_\+keys}} \end{DoxyCompactItemize} \doxysubsubsection*{Typedefs} \begin{DoxyCompactItemize} \item using \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_1_1nodal__keys_a46dc2a86521bb67725d40ba6b7f0a658}{serif\+::operators\+::backend\+::mfem\+::nodal\+\_\+keys\+::\+Linearization}} = \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1nodal__keys_1_1_scoped}{Scoped}}$<$void$>$\+::\+Linearization \item using \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_1_1nodal__keys_aabd462ed41b79dc1762db3f7d21f4418}{serif\+::operators\+::backend\+::mfem\+::nodal\+\_\+keys\+::\+Border\+Linearization}} = \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1nodal__keys_1_1_scoped}{Scoped}}$<$void$>$\+::\+Border\+Linearization \item {\footnotesize template$<$typename Scope, typename Test$>$ }\\using \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_1_1nodal__keys_a9ab6d4f6a629e92bbdb1b001448b139f}{serif\+::operators\+::backend\+::mfem\+::nodal\+\_\+keys\+::\+Selected\+Input}} = std\+::conditional\+\_\+t$<$std\+::is\+\_\+void\+\_\+v$<$Scope$>$, Test, typename \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1nodal__keys_1_1_scoped}{Scoped}}$<$Scope$>$\+::\+Samples$>$ \begin{DoxyCompactList}\small\item\em Preserve the standalone source spelling while distinguishing scoped selections. \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsubsection*{Functions} \begin{DoxyCompactItemize} \item {\footnotesize template$<$Nodal\+Value\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a669d3ec61994961e0528b57405de1a16}{serif\+::operators\+::backend\+::mfem\+::validate\+\_\+nodal\+\_\+selection}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_nodal_discretization}{Nodal\+Discretization}}$<$ EquationT, SchemaT $>$ \&discretization) \begin{DoxyCompactList}\small\item\em Check stored selection invariants before dereferencing or gathering any coefficient. \end{DoxyCompactList}\item {\footnotesize template$<$Nodal\+Value\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT$>$ }\\void \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_ac552aba528959c7ed1e9d31bfb06fa25}{serif\+::operators\+::backend\+::mfem\+::validate\+\_\+nodal\+\_\+discretization}} (const \mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_nodal_discretization}{Nodal\+Discretization}}$<$ EquationT, SchemaT $>$ \&discretization) \begin{DoxyCompactList}\small\item\em Admit only nodal spaces and the complete selection required by the equation\textquotesingle{}s point or boundary support. \end{DoxyCompactList}\item {\footnotesize template$<$Nodal\+Value\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_adea883807d35d940e6f2bd5ab6b9c99c}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+nodal\+\_\+discretization}} (const \mbox{\hyperlink{classserif_1_1discretization_1_1backend_1_1mfem_1_1_term_binding}{discretization\+::backend\+::mfem\+::\+Term\+Binding}}$<$ typename Equation\+T\+::\+Test, SchemaT $>$ \&residual\+\_\+binding, \mbox{\hyperlink{classserif_1_1discretization_1_1backend_1_1mfem_1_1_dof_selection}{discretization\+::backend\+::mfem\+::\+Dof\+Selection}} selected\+\_\+rows) \begin{DoxyCompactList}\small\item\em Validate a caller-\/supplied selection immediately, before constructing its computation graph. \end{DoxyCompactList}\item {\footnotesize template$<$Nodal\+Value\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT$>$ \newline requires requires \{ Equation\+T\+::reference\+\_\+position; \}}\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_ab41f1c25631900b889f781efeefac8e7}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+point\+\_\+discretization}} (const \mbox{\hyperlink{classserif_1_1discretization_1_1backend_1_1mfem_1_1_term_binding}{discretization\+::backend\+::mfem\+::\+Term\+Binding}}$<$ typename Equation\+T\+::\+Test, SchemaT $>$ \&residual\+\_\+binding) \begin{DoxyCompactList}\small\item\em Select the equation\textquotesingle{}s physical point once; coordinate changes require a new selection. \end{DoxyCompactList}\item {\footnotesize template$<$Nodal\+Value\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT$>$ \newline requires (discretization\+::domain\+::\+Is\+Boundary$<$\mbox{\hyperlink{namespaceserif_1_1equations_a7e2dbba73c1ee1b682885f1c178eb9f6}{equations\+::\+Support\+Of}}$<$EquationT$>$$>$ \&\& \mbox{\hyperlink{structserif_1_1discretization_1_1blocks_1_1_spatial_term_traits}{discretization\+::blocks\+::\+Spatial\+Term\+Traits}}$<$typename Equation\+T\+::\+Test$>$\+::rank == 0)}\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a321499eda172f3b3c793900252e207b4}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+boundary\+\_\+discretization}} (const \mbox{\hyperlink{classserif_1_1discretization_1_1backend_1_1mfem_1_1_term_binding}{discretization\+::backend\+::mfem\+::\+Term\+Binding}}$<$ typename Equation\+T\+::\+Test, SchemaT $>$ \&residual\+\_\+binding) \begin{DoxyCompactList}\small\item\em Select the scalar equation\textquotesingle{}s boundary through its declared schema support. \end{DoxyCompactList}\item {\footnotesize template$<$Affine\+Point\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT$>$ }\\auto \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a767159e39fe30fdb054fb8ac9fe9fdfc}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+point\+\_\+border\+\_\+discretization}} (const \mbox{\hyperlink{classserif_1_1discretization_1_1backend_1_1mfem_1_1_term_binding}{discretization\+::backend\+::mfem\+::\+Term\+Binding}}$<$ typename Equation\+T\+::\+Test, SchemaT $>$ \&residual\+\_\+binding, const \mbox{\hyperlink{classserif_1_1discretization_1_1backend_1_1mfem_1_1_term_binding}{discretization\+::backend\+::mfem\+::\+Term\+Binding}}$<$ typename Equation\+T\+::\+Border, SchemaT $>$ \&border\+\_\+binding) \begin{DoxyCompactList}\small\item\em Couple the selected scalar point to a global scalar on the same mesh. \end{DoxyCompactList}\item {\footnotesize template$<$Nodal\+Value\+Equation EquationT, discretization\+::domain\+::schema\+::\+Is\+Schema SchemaT, typename CoefficientsT$>$ }\\\mbox{\hyperlink{structserif_1_1operators_1_1backend_1_1mfem_1_1_selected_nodal_values}{Selected\+Nodal\+Values}} \mbox{\hyperlink{namespaceserif_1_1operators_1_1backend_1_1mfem_a56134f69869313c846c87c23419f562d}{serif\+::operators\+::backend\+::mfem\+::select\+\_\+nodal\+\_\+values}} (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 Validate the whole supplied vector, but cache only coefficients selected by this equation. \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_a94257347c3463708ace957baf9925279}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+nodal\+\_\+dependency\+\_\+context}} (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 The test term keys the selected coefficients needed by a 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_a3cb308e4e9c21524b9bf78c58a5c0d44}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+point\+\_\+border\+\_\+dependency\+\_\+context}} (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 A border scalar is a separate tracked source; changing it does not reevaluate the point equation. \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_a0238992d8811ebc4fe34c0a2c26597de}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+nodal\+\_\+binding\+\_\+input}} (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 Supply equation-\/local selection metadata and the common physical coefficient source. \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_a26db9cf012dac64476824051460d6d9d}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+nodal\+\_\+inputs}} (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 Supply a standalone nodal equation with its metadata and physical source. \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_a5053b2428046cf29e3bed002caf26b14}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+point\+\_\+border\+\_\+binding\+\_\+input}} (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 Validate a point border while sharing its field coefficients with other model equations. \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_ad9d5168fec5ab9f26a0b1947dc123e89}{serif\+::operators\+::backend\+::mfem\+::make\+\_\+point\+\_\+border\+\_\+inputs}} (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 Add the common physical sources consumed by a standalone affine point-\/border computation. \end{DoxyCompactList}\end{DoxyCompactItemize}