\doxysection{src/include/serif/discretization/forms/value.hpp File Reference} \hypertarget{value_8hpp}{}\label{value_8hpp}\index{src/include/serif/discretization/forms/value.hpp@{src/include/serif/discretization/forms/value.hpp}} Encode compile time information about the shape (rank) and data type of the result of various Operations. {\ttfamily \#include $<$array$>$}\newline {\ttfamily \#include $<$type\+\_\+traits$>$}\newline {\ttfamily \#include "{}serif/discretization/blocks/traits.\+hpp"{}}\newline {\ttfamily \#include "{}serif/discretization/forms/operands.\+hpp"{}}\newline Include dependency graph for value.\+hpp\+: \nopagebreak \begin{figure}[H] \begin{center} \leavevmode \includegraphics[width=350pt]{value_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]{value_8hpp__dep__incl} \end{center} \end{figure} \doxysubsubsection*{Classes} \begin{DoxyCompactItemize} \item struct \mbox{\hyperlink{structserif_1_1discretization_1_1forms_1_1_operation_value_3_010_00_01_operation_1_1_value_01_4}{serif\+::discretization\+::forms\+::\+Operation\+Value$<$ 0, Operation\+::\+Value $>$}} \begin{DoxyCompactList}\small\item\em The value of a rank 0 tensor is a scalar, a double in the case of SERiF where we restrict ourselves to double precision. \end{DoxyCompactList}\item struct \mbox{\hyperlink{structserif_1_1discretization_1_1forms_1_1_operation_value_3_011_00_01_operation_1_1_value_01_4}{serif\+::discretization\+::forms\+::\+Operation\+Value$<$ 1, Operation\+::\+Value $>$}} \begin{DoxyCompactList}\small\item\em The value of a rank 1 tensor is a rank 1 tensor (a vector of doubles in SERiF) \end{DoxyCompactList}\item struct \mbox{\hyperlink{structserif_1_1discretization_1_1forms_1_1_operation_value_3_011_00_01_operation_1_1_divergence_01_4}{serif\+::discretization\+::forms\+::\+Operation\+Value$<$ 1, Operation\+::\+Divergence $>$}} \begin{DoxyCompactList}\small\item\em The divergence of a rank one tensor is a scalar (a double) \end{DoxyCompactList}\item struct \mbox{\hyperlink{structserif_1_1discretization_1_1forms_1_1_operation_value_3_010_00_01_operation_1_1_gradient_01_4}{serif\+::discretization\+::forms\+::\+Operation\+Value$<$ 0, Operation\+::\+Gradient $>$}} \begin{DoxyCompactList}\small\item\em The gradient of a rank 0 tensor is a rank 1 tensor (a vector of doubles) \end{DoxyCompactList}\item struct \mbox{\hyperlink{structserif_1_1discretization_1_1forms_1_1_operation_value_3_011_00_01_operation_1_1_gradient_01_4}{serif\+::discretization\+::forms\+::\+Operation\+Value$<$ 1, Operation\+::\+Gradient $>$}} \begin{DoxyCompactList}\small\item\em \doxylink{namespaceserif_ab7690da8665e9d9bd2fa8e8534cd6e57}{Vector} gradients use G\mbox{[}component\mbox{]}\mbox{[}derivative\mbox{]} = partial\+\_\+derivative(u\+\_\+component, x\+\_\+derivative). \end{DoxyCompactList}\item struct \mbox{\hyperlink{structserif_1_1discretization_1_1forms_1_1_operation_value_3_011_00_01_operation_1_1_curl_01_4}{serif\+::discretization\+::forms\+::\+Operation\+Value$<$ 1, Operation\+::\+Curl $>$}} \begin{DoxyCompactList}\small\item\em The curl of a rank 1 tensor is a rank 1 tensor (a vector of doubles) \end{DoxyCompactList}\item struct \mbox{\hyperlink{structserif_1_1discretization_1_1forms_1_1_operation_value_3_011_00_01_operation_1_1_normal_trace_01_4}{serif\+::discretization\+::forms\+::\+Operation\+Value$<$ 1, Operation\+::\+Normal\+Trace $>$}} \item struct \mbox{\hyperlink{structserif_1_1discretization_1_1forms_1_1_operand_result_3_01_operand_t_01_4}{serif\+::discretization\+::forms\+::\+Operand\+Result$<$ Operand\+T $>$}} \begin{DoxyCompactList}\small\item\em Specialization of the \doxylink{structserif_1_1discretization_1_1forms_1_1_operand_result}{Operand\+Result} struct for operands that are valid operands (satisfy the \doxylink{conceptserif_1_1discretization_1_1forms_1_1_is_operand}{Is\+Operand} concept) and are spatial terms (e.\+g defined over the domain, think mass density). This specialization uses the \doxylink{structserif_1_1discretization_1_1forms_1_1_operation_value}{Operation\+Value} struct to determine the value type of the result of the operand based on its term type and operation type. \end{DoxyCompactList}\item struct \mbox{\hyperlink{structserif_1_1discretization_1_1forms_1_1_value_components_3_01double_01_4}{serif\+::discretization\+::forms\+::\+Value\+Components$<$ double $>$}} \item struct \mbox{\hyperlink{structserif_1_1discretization_1_1forms_1_1_value_components_3_01void_01_4}{serif\+::discretization\+::forms\+::\+Value\+Components$<$ void $>$}} \item struct \mbox{\hyperlink{structserif_1_1discretization_1_1forms_1_1_value_components_3_01std_1_1array_3_01_entry_00_01_size_01_4_01_4}{serif\+::discretization\+::forms\+::\+Value\+Components$<$ std\+::array$<$ Entry, Size $>$ $>$}} \end{DoxyCompactItemize} \doxysubsubsection*{Namespaces} \begin{DoxyCompactItemize} \item namespace \mbox{\hyperlink{namespaceserif}{serif}} \item namespace \mbox{\hyperlink{namespaceserif_1_1discretization}{serif\+::discretization}} \item namespace \mbox{\hyperlink{namespaceserif_1_1discretization_1_1forms}{serif\+::discretization\+::forms}} \end{DoxyCompactItemize} \doxysubsubsection*{Typedefs} \begin{DoxyCompactItemize} \item using \mbox{\hyperlink{namespaceserif_1_1discretization_1_1forms_a19001a41347e243892d7bfef18abd174}{serif\+::discretization\+::forms\+::\+Vector\+Value}} = std\+::array$<$double, 3$>$ \begin{DoxyCompactList}\small\item\em Alias for a rank 1 tensor of dimension 3 with elements doubles. \end{DoxyCompactList}\item using \mbox{\hyperlink{namespaceserif_1_1discretization_1_1forms_aecbaccd35c1209031d60ea7348d6a452}{serif\+::discretization\+::forms\+::\+Matrix\+Value}} = std\+::array$<$\mbox{\hyperlink{namespaceserif_1_1discretization_1_1forms_a19001a41347e243892d7bfef18abd174}{Vector\+Value}}, 3$>$ \begin{DoxyCompactList}\small\item\em Alias for a rank 2 tensor of dimension 3 with cells as doubles. \end{DoxyCompactList}\item {\footnotesize template$<$Is\+Operand OperandT$>$ }\\using \mbox{\hyperlink{namespaceserif_1_1discretization_1_1forms_ab58e222c3ef402eeceadd03fd04180bf}{serif\+::discretization\+::forms\+::\+Operand\+Value}} = \mbox{\hyperlink{structserif_1_1discretization_1_1forms_1_1_operand_result}{Operand\+Result}}$<$OperandT$>$\+::type \begin{DoxyCompactList}\small\item\em Alias for the value type of an operand. This is a convenience alias that allows you to easily access the value type of an operand without having to explicitly use the \doxylink{structserif_1_1discretization_1_1forms_1_1_operand_result}{Operand\+Result} struct. \end{DoxyCompactList}\item {\footnotesize template$<$typename OutputT, typename InputT$>$ }\\using \mbox{\hyperlink{namespaceserif_1_1discretization_1_1forms_a259c1476be2e462d8cd07c803434af69}{serif\+::discretization\+::forms\+::\+Partial\+Derivative}} \begin{DoxyCompactList}\small\item\em Alias for the partial derivative of some output type with respect to some input type. This is a convenience alias that allows you to easily access the partial derivative type without having to explicitly use the \doxylink{structserif_1_1discretization_1_1forms_1_1_operand_result}{Operand\+Result} struct. \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsubsection*{Functions} \begin{DoxyCompactItemize} \item {\footnotesize template$<$typename ValueT$>$ }\\decltype(auto) \mbox{\hyperlink{namespaceserif_1_1discretization_1_1forms_aa4daa912e2157d80dc731a6ce2349dfe}{serif\+::discretization\+::forms\+::component}} (ValueT \&value, int index) \begin{DoxyCompactList}\small\item\em Read one entry of a scalar/vector/matrix value. This is a convenience function that allows you to easily access the components of a value type without having to explicitly use the \doxylink{structserif_1_1discretization_1_1forms_1_1_operand_result}{Operand\+Result} struct. \end{DoxyCompactList}\item {\footnotesize template$<$typename OutputT, typename InputT$>$ }\\double \mbox{\hyperlink{namespaceserif_1_1discretization_1_1forms_a2adce8ae20f5f99c4302d9446cad1ebb}{serif\+::discretization\+::forms\+::derivative\+\_\+component}} (const \mbox{\hyperlink{namespaceserif_1_1discretization_1_1forms_a259c1476be2e462d8cd07c803434af69}{Partial\+Derivative}}$<$ OutputT, InputT $>$ \&value, int output, int input) \begin{DoxyCompactList}\small\item\em Read one entry of a scalar/vector/matrix local derivative. \end{DoxyCompactList}\end{DoxyCompactItemize} \doxysubsubsection*{Variables} \begin{DoxyCompactItemize} \item {\footnotesize template$<$typename ValueT$>$ }\\constexpr int \mbox{\hyperlink{namespaceserif_1_1discretization_1_1forms_a8ff94af3602610b4765e1e1e87aebdb9}{serif\+::discretization\+::forms\+::component\+\_\+count}} = \mbox{\hyperlink{structserif_1_1discretization_1_1forms_1_1_value_components}{Value\+Components}}$<$std\+::remove\+\_\+cv\+\_\+t$<$ValueT$>$$>$\+::value \end{DoxyCompactItemize} \doxysubsection{Detailed Description} Encode compile time information about the shape (rank) and data type of the result of various Operations. \begin{DoxyAuthor}{Author} Emily M. Boudreaux \end{DoxyAuthor} \begin{DoxyRefDesc}{Todo} \item[\mbox{\hyperlink{todo__todo000030}{Todo}}]This should be consolidated and removed. This information could be injected into the Operation itself. \end{DoxyRefDesc}