serif::discretization::forms serif::discretization::forms::boundary_flux serif::discretization::forms::divergence serif::discretization::forms::force serif::discretization::forms::form serif::discretization::forms::FormDescriptor serif::discretization::forms::FormTraits serif::discretization::forms::FormTraits< boundary_flux< TrialT, TestT > > serif::discretization::forms::FormTraits< divergence< TrialT, TestT > > serif::discretization::forms::FormTraits< force< TrialT, TestT > > serif::discretization::forms::FormTraits< mass< TrialT, TestT > > serif::discretization::forms::FormTraits< projection< TrialT, TestT > > serif::discretization::forms::FormTraits< source< TrialT, TestT > > serif::discretization::forms::mass serif::discretization::forms::Operand serif::discretization::forms::OperandResult serif::discretization::forms::OperandResult< OperandT > serif::discretization::forms::Operation serif::discretization::forms::OperationValue serif::discretization::forms::OperationValue< 0, Operation::Gradient > serif::discretization::forms::OperationValue< 0, Operation::Value > serif::discretization::forms::OperationValue< 1, Operation::Curl > serif::discretization::forms::OperationValue< 1, Operation::Divergence > serif::discretization::forms::OperationValue< 1, Operation::Gradient > serif::discretization::forms::OperationValue< 1, Operation::NormalTrace > serif::discretization::forms::OperationValue< 1, Operation::Value > serif::discretization::forms::projection serif::discretization::forms::source serif::discretization::forms::ValueComponents serif::discretization::forms::ValueComponents< double > serif::discretization::forms::ValueComponents< std::array< Entry, Size > > serif::discretization::forms::ValueComponents< void > std::array< double, 3 > using serif::discretization::forms::VectorValue = std::array<double, 3> VectorValue serif::discretization::forms::VectorValue Alias for a rank 1 tensor of dimension 3 with elements doubles. TodoThis file was a mistake, the information it is is helpful yes, however, it has lost generality, lost good type information, and does not need to be separate Really we should refactor this to be part of Operation, remove the assumption of 3 dimensionality, and probably fall back to something like a span rather than an array. std::array< VectorValue, 3 > using serif::discretization::forms::MatrixValue = std::array<VectorValue, 3> MatrixValue serif::discretization::forms::MatrixValue Alias for a rank 2 tensor of dimension 3 with cells as doubles. IsOperand OperandT OperandT OperandResult< OperandT >::type using serif::discretization::forms::OperandValue = OperandResult<OperandT>::type OperandValue serif::discretization::forms::OperandValue 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 OperandResult struct. OperandT The operand type to determine the value type for. typename OutputT typename InputT std::conditional_t< std::same_as< OutputT, double >, InputT, std::conditional_t< std::same_as< InputT, double >, OutputT, std::array< std::array< double, component_count< InputT > >, component_count< OutputT > > > > using serif::discretization::forms::PartialDerivative = std::conditional_t<std::same_as<OutputT, double>, InputT, std::conditional_t<std::same_as<InputT, double>, OutputT, std::array<std::array<double, component_count<InputT>>, component_count<OutputT>>>> PartialDerivative serif::discretization::forms::PartialDerivative 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 OperandResult struct. OutputT The output type of the partial derivative. InputT The input type of the partial derivative. TodoShould probably be consolidated with the other PartialDerivative system... No, should definitely be consolidated... Form FormT FormT FormDescriptor FormDescriptor serif::discretization::forms::form_descriptor form_descriptor serif::discretization::forms::form_descriptor { .name = FormT::name, .trial = blocks::term_descriptor<typename FormT::trial_type>, .test = blocks::term_descriptor<typename FormT::test_type> } Specialization of the FormDescriptor class at compile time for some particular compile-time form. This allows us to generate constexpr instances of this struct at compile time and usable at runtime. FormT The form to generate a descriptor for typename ValueT int int serif::discretization::forms::component_count component_count serif::discretization::forms::component_count = ValueComponents<std::remove_cv_t<ValueT>>::value typename ValueT decltype(auto) decltype(auto) serif::discretization::forms::component (ValueT &value, int index) component serif::discretization::forms::component ValueT & value int index 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 OperandResult struct. ValueT The value type to read from. value The value to read from. index The index of the component to read. The component of the value at the specified index. typename OutputT typename InputT double double serif::discretization::forms::derivative_component (const PartialDerivative< OutputT, InputT > &value, int output, int input) derivative_component serif::discretization::forms::derivative_component const PartialDerivative< OutputT, InputT > & value int output int input Read one entry of a scalar/vector/matrix local derivative. OutputT The output type of the partial derivative. InputT The input type of the partial derivative. value The partial derivative to read from. output The index of the output component to read. input The index of the input component to read. The component of the partial derivative at the specified indices.