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