21#ifndef EXADG_STRUCTURE_SPATIAL_DISCRETIZATION_OPERATORS_BOUNDARY_CONDITIONS_H_
22#define EXADG_STRUCTURE_SPATIAL_DISCRETIZATION_OPERATORS_BOUNDARY_CONDITIONS_H_
25#include <exadg/functions_and_boundary_conditions/evaluate_functions.h>
26#include <exadg/matrix_free/integrators.h>
27#include <exadg/structure/user_interface/boundary_descriptor.h>
36template<
int dim,
typename Number>
37inline DEAL_II_ALWAYS_INLINE
38 dealii::Tensor<1, dim, dealii::VectorizedArray<Number>>
39 calculate_neumann_value(
unsigned int const q,
40 FaceIntegrator<dim, dim, Number>
const & integrator,
41 BoundaryType
const & boundary_type,
42 dealii::types::boundary_id
const boundary_id,
46 dealii::Tensor<1, dim, dealii::VectorizedArray<Number>> traction;
48 if(boundary_type == BoundaryType::Neumann)
50 auto bc = boundary_descriptor->neumann_bc.find(boundary_id)->second;
51 auto q_points = integrator.quadrature_point(q);
53 traction = FunctionEvaluator<1, dim, Number>::value(*bc, q_points, time);
55 else if(boundary_type == BoundaryType::NeumannCached)
57 auto bc = boundary_descriptor->get_neumann_cached_data();
59 traction = FunctionEvaluator<1, dim, Number>::value(*bc,
60 integrator.get_current_cell_index(),
62 integrator.get_quadrature_index());
68 AssertThrow(boundary_type == BoundaryType::Dirichlet or
69 boundary_type == BoundaryType::DirichletCached,
70 dealii::ExcMessage(
"Boundary type of face is invalid or not implemented."));
Definition boundary_descriptor.h:48