1 #include "local_solution.hpp"     7 template <
typename real, 
int dim, 
int n_components>
     9     : finite_element(i_finite_element), n_dofs(i_finite_element.dofs_per_cell) {
    11            dealii::ExcMessage(
"Number of components must match finite element system"));
    15 template <
typename real, 
int dim, 
int n_components>
    17     const std::vector<dealii::Point<dim>> &unit_points)
 const {
    18     const unsigned int n_points = unit_points.size();
    19     std::vector<std::array<real, n_components>> values(n_points);
    21     for (
unsigned int i_point = 0; i_point < n_points; ++i_point) {
    22         for (
int i_component = 0; i_component < n_components; ++i_component) {
    23             values[i_point][i_component] = 0;
    25         for (
unsigned int i_dof = 0; i_dof < 
n_dofs; ++i_dof) {
    26             const int i_component = 
finite_element.system_to_component_index(i_dof).first;
    27             values[i_point][i_component] +=
    35 template <
typename real, 
int dim, 
int n_components>
    36 std::vector<std::array<dealii::Tensor<1, dim, real>, n_components>>
    38     const unsigned int n_points = unit_points.size();
    39     std::vector<std::array<dealii::Tensor<1, dim, real>, n_components>> gradients(unit_points.size());
    41     for (
unsigned int i_point = 0; i_point < n_points; ++i_point) {
    42         for (
int i_component = 0; i_component < n_components; ++i_component) {
    43             gradients[i_point][i_component] = 0;
    45         for (
unsigned int i_dof = 0; i_dof < 
n_dofs; ++i_dof) {
    46             const int i_component = 
finite_element.system_to_component_index(i_dof).first;
    47             dealii::Tensor<1, dim, double> shape_grad =
    48                 finite_element.shape_grad_component(i_dof, unit_points[i_point], i_component);
    49             for (
int d = 0; d < dim; ++d) {
    50                 gradients[i_point][i_component][d] += 
coefficients[i_dof] * shape_grad[d];
    58 #define POSSIBLE_NSTATE (1)(2)(3)(4)(5)(6)(7)    61 #define INSTANTIATE_DISTRIBUTED(r, data, nstate)                  \    62     template class LocalSolution<double, PHILIP_DIM, nstate>;     \    63     template class LocalSolution<FadType, PHILIP_DIM, nstate>;    \    64     template class LocalSolution<RadType, PHILIP_DIM, nstate>;    \    65     template class LocalSolution<FadFadType, PHILIP_DIM, nstate>; \    66     template class LocalSolution<RadFadType, PHILIP_DIM, nstate>;    67 BOOST_PP_SEQ_FOR_EACH(INSTANTIATE_DISTRIBUTED, _, POSSIBLE_NSTATE)
 LocalSolution(const dealii::FESystem< dim, dim > &finite_element)
Constructor. 
const unsigned int n_dofs
Number of degrees of freedom. 
Files for the baseline physics. 
std::vector< std::array< real, n_components > > evaluate_values(const std::vector< dealii::Point< dim >> &unit_points) const
Obtain values at unit points. 
std::vector< std::array< dealii::Tensor< 1, dim, real >, n_components > > evaluate_reference_gradients(const std::vector< dealii::Point< dim >> &unit_points) const
std::vector< real > coefficients
Solution coefficients in the finite element basis. 
const dealii::FESystem< dim, dim > & finite_element
Reference to the finite element system used to represent the solution.