70 typedef dealii::VectorizedArray<Number> scalar;
71 typedef dealii::Tensor<1, dim, dealii::VectorizedArray<Number>> vector;
72 typedef dealii::Tensor<2, dim, dealii::VectorizedArray<Number>> tensor;
74 typedef dealii::LinearAlgebra::distributed::Vector<Number> VectorType;
76 typedef CellIntegrator<dim, dim, Number> IntegratorCell;
77 typedef FaceIntegrator<dim, dim, Number> IntegratorFace;
81 reinit(dealii::MatrixFree<dim, Number>
const & matrix_free,
83 unsigned int const dof_index,
84 unsigned int const quad_index_linearized,
85 bool const use_own_velocity_storage)
91 std::make_shared<IntegratorCell>(matrix_free, dof_index, quad_index_linearized);
92 integrator_velocity_m =
93 std::make_shared<IntegratorFace>(matrix_free,
true, dof_index, quad_index_linearized);
94 integrator_velocity_p =
95 std::make_shared<IntegratorFace>(matrix_free,
false, dof_index, quad_index_linearized);
99 integrator_grid_velocity =
100 std::make_shared<IntegratorCell>(matrix_free, dof_index, quad_index_linearized);
101 integrator_grid_velocity_face =
102 std::make_shared<IntegratorFace>(matrix_free,
true, dof_index, quad_index_linearized);
105 if(use_own_velocity_storage)
108 matrix_free.initialize_dof_vector(velocity.own(), dof_index);
113 matrix_free.initialize_dof_vector(grid_velocity.own(), dof_index);
115 AssertThrow(data.formulation == FormulationConvectiveTerm::ConvectiveFormulation,
117 "ALE formulation can only be used in combination with ConvectiveFormulation"));
126 flags.cells = dealii::update_JxW_values | dealii::update_gradients;
127 flags.inner_faces = dealii::update_JxW_values | dealii::update_normal_vectors;
128 flags.boundary_faces = dealii::update_JxW_values | dealii::update_normal_vectors;
138 get_integrator_flags()
const
142 if(data.formulation == FormulationConvectiveTerm::DivergenceFormulation)
144 flags.cell_evaluate = dealii::EvaluationFlags::values;
145 flags.cell_integrate = dealii::EvaluationFlags::gradients;
147 flags.face_evaluate = dealii::EvaluationFlags::values;
148 flags.face_integrate = dealii::EvaluationFlags::values;
150 else if(data.formulation == FormulationConvectiveTerm::ConvectiveFormulation)
152 flags.cell_evaluate = dealii::EvaluationFlags::values | dealii::EvaluationFlags::gradients;
153 flags.cell_integrate = dealii::EvaluationFlags::values;
155 flags.face_evaluate = dealii::EvaluationFlags::values;
156 flags.face_integrate = dealii::EvaluationFlags::values;
160 AssertThrow(
false, dealii::ExcMessage(
"Not implemented."));
179 set_velocity_copy(VectorType
const & src)
181 velocity.own() = src;
185 set_velocity_ptr(VectorType
const & src)
191 set_grid_velocity_ptr(VectorType
const & src)
193 grid_velocity.reset(src);
197 get_grid_velocity()
const
199 return *grid_velocity;
203 update_ghost_values_velocity()
205 velocity->update_ghost_values();
209 update_ghost_values_grid_velocity()
212 grid_velocity->update_ghost_values();
216 zero_out_ghost_values_velocity()
218 velocity->zero_out_ghost_values();
222 zero_out_ghost_values_grid_velocity()
225 grid_velocity->zero_out_ghost_values();
228 inline DEAL_II_ALWAYS_INLINE
230 get_velocity_cell(
unsigned int const q)
const
232 return integrator_velocity->get_value(q);
235 inline DEAL_II_ALWAYS_INLINE
237 get_velocity_gradient_cell(
unsigned int const q)
const
239 return integrator_velocity->get_gradient(q);
242 inline DEAL_II_ALWAYS_INLINE
244 get_velocity_m(
unsigned int const q)
const
246 return integrator_velocity_m->get_value(q);
249 inline DEAL_II_ALWAYS_INLINE
251 get_velocity_p(
unsigned int const q)
const
253 return integrator_velocity_p->get_value(q);
257 inline DEAL_II_ALWAYS_INLINE
259 get_grid_velocity_cell(
unsigned int const q)
const
261 return integrator_grid_velocity->get_value(q);
267 inline DEAL_II_ALWAYS_INLINE
269 get_grid_velocity_face(
unsigned int const q)
const
271 return integrator_grid_velocity_face->get_value(q);
276 reinit_cell(
unsigned int const cell)
const
278 integrator_velocity->reinit(cell);
281 integrator_grid_velocity->reinit(cell);
283 if(data.formulation == FormulationConvectiveTerm::DivergenceFormulation)
285 integrator_velocity->gather_evaluate(*velocity, dealii::EvaluationFlags::values);
287 else if(data.formulation == FormulationConvectiveTerm::ConvectiveFormulation)
289 integrator_velocity->gather_evaluate(*velocity,
290 dealii::EvaluationFlags::values |
291 dealii::EvaluationFlags::gradients);
294 integrator_grid_velocity->gather_evaluate(*grid_velocity, dealii::EvaluationFlags::values);
298 AssertThrow(
false, dealii::ExcMessage(
"Not implemented."));
303 reinit_face(
unsigned int const face)
const
305 integrator_velocity_m->reinit(face);
306 integrator_velocity_m->gather_evaluate(*velocity, dealii::EvaluationFlags::values);
308 integrator_velocity_p->reinit(face);
309 integrator_velocity_p->gather_evaluate(*velocity, dealii::EvaluationFlags::values);
313 integrator_grid_velocity_face->reinit(face);
314 integrator_grid_velocity_face->gather_evaluate(*grid_velocity,
315 dealii::EvaluationFlags::values);
320 reinit_boundary_face(
unsigned int const face)
const
322 integrator_velocity_m->reinit(face);
323 integrator_velocity_m->gather_evaluate(*velocity, dealii::EvaluationFlags::values);
327 integrator_grid_velocity_face->reinit(face);
328 integrator_grid_velocity_face->gather_evaluate(*grid_velocity,
329 dealii::EvaluationFlags::values);
334 reinit_face_cell_based(
unsigned int const cell,
335 unsigned int const face,
336 dealii::types::boundary_id
const boundary_id)
const
338 integrator_velocity_m->reinit(cell, face);
339 integrator_velocity_m->gather_evaluate(*velocity, dealii::EvaluationFlags::values);
343 integrator_grid_velocity_face->reinit(cell, face);
344 integrator_grid_velocity_face->gather_evaluate(*grid_velocity,
345 dealii::EvaluationFlags::values);
348 if(boundary_id == dealii::numbers::internal_face_boundary_id)
364 inline DEAL_II_ALWAYS_INLINE
366 get_volume_flux_divergence_formulation(vector
const & delta_u,
unsigned int const q)
const
370 vector u = get_velocity_cell(q);
375 if(data.temporal_treatment == TreatmentOfConvectiveTerm::Implicit)
379 F = outer_product(u, delta_u);
380 F = F + transpose(F);
382 else if(data.temporal_treatment == TreatmentOfConvectiveTerm::LinearlyImplicit)
384 F = outer_product(delta_u, u);
388 AssertThrow(
false, dealii::ExcMessage(
"not implemented"));
396 inline DEAL_II_ALWAYS_INLINE
398 get_volume_flux_convective_formulation(vector
const & delta_u,
399 tensor
const & grad_delta_u,
400 unsigned int const q)
const
410 vector w = get_velocity_cell(q);
411 tensor grad_u = get_velocity_gradient_cell(q);
415 w -= get_grid_velocity_cell(q);
420 if(data.temporal_treatment == TreatmentOfConvectiveTerm::Implicit)
426 F = grad_u * delta_u + grad_delta_u * w;
428 else if(data.temporal_treatment == TreatmentOfConvectiveTerm::LinearlyImplicit)
432 F = grad_delta_u * w;
436 AssertThrow(
false, dealii::ExcMessage(
"not implemented"));
448 inline DEAL_II_ALWAYS_INLINE
449 std::tuple<vector, vector>
450 calculate_flux_nonlinear_interior_and_neighbor(vector
const & uM,
452 vector
const & normalM,
453 vector
const & u_grid)
const
455 vector flux_m, flux_p;
457 if(data.formulation == FormulationConvectiveTerm::DivergenceFormulation)
459 vector flux = calculate_lax_friedrichs_flux(uM, uP, normalM);
464 else if(data.formulation == FormulationConvectiveTerm::ConvectiveFormulation)
467 scalar average_u_normal = 0.5 * (uM + uP) * normalM;
469 average_u_normal -= u_grid * normalM;
471 flux = calculate_upwind_flux(uM, uP, average_u_normal);
475 flux_m = flux - average_u_normal * uM;
476 flux_p = -flux + average_u_normal * uP;
480 AssertThrow(
false, dealii::ExcMessage(
"Not implemented."));
483 return std::make_tuple(flux_m, flux_p);
491 inline DEAL_II_ALWAYS_INLINE
493 calculate_flux_nonlinear_boundary(vector
const & uM,
495 vector
const & normalM,
496 vector
const & u_grid,
497 BoundaryTypeU
const & boundary_type)
const
501 if(data.formulation == FormulationConvectiveTerm::DivergenceFormulation)
503 flux = calculate_lax_friedrichs_flux(uM, uP, normalM);
505 if(boundary_type == BoundaryTypeU::Neumann and data.use_outflow_bc ==
true)
506 apply_outflow_bc(flux, uM * normalM);
508 else if(data.formulation == FormulationConvectiveTerm::ConvectiveFormulation)
510 scalar average_u_normal = 0.5 * (uM + uP) * normalM;
512 average_u_normal -= u_grid * normalM;
514 flux = calculate_upwind_flux(uM, uP, average_u_normal);
516 if(boundary_type == BoundaryTypeU::Neumann and data.use_outflow_bc ==
true)
517 apply_outflow_bc(flux, average_u_normal);
521 flux = flux - average_u_normal * uM;
525 AssertThrow(
false, dealii::ExcMessage(
"Not implemented."));
537 inline DEAL_II_ALWAYS_INLINE
538 std::tuple<vector, vector>
539 calculate_flux_linear_operator_interior_and_neighbor(vector
const & uM,
541 vector
const & delta_uM,
542 vector
const & delta_uP,
543 vector
const & normalM,
544 unsigned int const q)
const
548 if(data.formulation == FormulationConvectiveTerm::DivergenceFormulation)
550 if(data.temporal_treatment == TreatmentOfConvectiveTerm::Implicit)
554 fluxM = calculate_lax_friedrichs_flux_linearized(uM, uP, delta_uM, delta_uP, normalM);
557 else if(data.temporal_treatment == TreatmentOfConvectiveTerm::LinearlyImplicit)
559 fluxM = calculate_lax_friedrichs_flux_linear_transport(uM, uP, delta_uM, delta_uP, normalM);
564 AssertThrow(
false, dealii::ExcMessage(
"not implemented"));
567 else if(data.formulation == FormulationConvectiveTerm::ConvectiveFormulation)
571 u_grid = get_grid_velocity_face(q);
573 if(data.temporal_treatment == TreatmentOfConvectiveTerm::Implicit)
577 vector flux = calculate_upwind_flux_linearized(uM, uP, u_grid, delta_uM, delta_uP, normalM);
579 scalar average_u_normal = 0.5 * (uM + uP) * normalM;
581 average_u_normal -= u_grid * normalM;
583 scalar average_delta_u_normal = 0.5 * (delta_uM + delta_uP) * normalM;
587 fluxM = flux - average_u_normal * delta_uM - average_delta_u_normal * uM;
589 fluxP = -flux + average_u_normal * delta_uP + average_delta_u_normal * uP;
591 else if(data.temporal_treatment == TreatmentOfConvectiveTerm::LinearlyImplicit)
596 scalar average_u_normal = 0.5 * (uM + uP) * normalM;
598 average_u_normal -= u_grid * normalM;
600 flux = calculate_upwind_flux(delta_uM, delta_uP, average_u_normal);
604 fluxM = flux - average_u_normal * delta_uM;
605 fluxP = -flux + average_u_normal * delta_uP;
609 AssertThrow(
false, dealii::ExcMessage(
"not implemented"));
614 AssertThrow(
false, dealii::ExcMessage(
"Not implemented."));
617 return std::make_tuple(fluxM, fluxP);
624 inline DEAL_II_ALWAYS_INLINE
626 calculate_flux_linear_operator_interior(vector
const & uM,
628 vector
const & delta_uM,
629 vector
const & delta_uP,
630 vector
const & normalM,
631 unsigned int const q)
const
635 if(data.formulation == FormulationConvectiveTerm::DivergenceFormulation)
637 if(data.temporal_treatment == TreatmentOfConvectiveTerm::Implicit)
640 flux = calculate_lax_friedrichs_flux_linearized(uM, uP, delta_uM, delta_uP, normalM);
642 else if(data.temporal_treatment == TreatmentOfConvectiveTerm::LinearlyImplicit)
644 flux = calculate_lax_friedrichs_flux_linear_transport(uM, uP, delta_uM, delta_uP, normalM);
648 AssertThrow(
false, dealii::ExcMessage(
"not implemented"));
651 else if(data.formulation == FormulationConvectiveTerm::ConvectiveFormulation)
655 u_grid = get_grid_velocity_face(q);
657 if(data.temporal_treatment == TreatmentOfConvectiveTerm::Implicit)
661 flux = calculate_upwind_flux_linearized(uM, uP, u_grid, delta_uM, delta_uP, normalM);
663 scalar average_u_normal = 0.5 * (uM + uP) * normalM;
666 average_u_normal -= u_grid * normalM;
668 scalar average_delta_u_normal = 0.5 * (delta_uM + delta_uP) * normalM;
672 flux = flux - average_u_normal * delta_uM - average_delta_u_normal * uM;
674 else if(data.temporal_treatment == TreatmentOfConvectiveTerm::LinearlyImplicit)
679 scalar average_u_normal = 0.5 * (uM + uP) * normalM;
681 average_u_normal -= u_grid * normalM;
683 flux = calculate_upwind_flux(delta_uM, delta_uP, average_u_normal);
687 flux = flux - average_u_normal * delta_uM;
691 AssertThrow(
false, dealii::ExcMessage(
"not implemented"));
696 AssertThrow(
false, dealii::ExcMessage(
"Not implemented."));
708 inline DEAL_II_ALWAYS_INLINE
710 calculate_flux_linear_operator_boundary(vector
const & uM,
712 vector
const & delta_uM,
713 vector
const & delta_uP,
714 vector
const & normalM,
715 BoundaryTypeU
const & boundary_type,
716 unsigned int const q)
const
720 if(data.formulation == FormulationConvectiveTerm::DivergenceFormulation)
722 if(data.temporal_treatment == TreatmentOfConvectiveTerm::Implicit)
725 flux = calculate_lax_friedrichs_flux_linearized(uM, uP, delta_uM, delta_uP, normalM);
727 if(boundary_type == BoundaryTypeU::Neumann and data.use_outflow_bc ==
true)
728 apply_outflow_bc(flux, uM * normalM);
730 else if(data.temporal_treatment == TreatmentOfConvectiveTerm::LinearlyImplicit)
732 flux = calculate_lax_friedrichs_flux_linear_transport(uM, uP, delta_uM, delta_uP, normalM);
734 if(boundary_type == BoundaryTypeU::Neumann and data.use_outflow_bc ==
true)
735 apply_outflow_bc(flux, uM * normalM);
739 AssertThrow(
false, dealii::ExcMessage(
"not implemented"));
742 else if(data.formulation == FormulationConvectiveTerm::ConvectiveFormulation)
746 u_grid = get_grid_velocity_face(q);
748 if(data.temporal_treatment == TreatmentOfConvectiveTerm::Implicit)
751 flux = calculate_upwind_flux_linearized(uM, uP, u_grid, delta_uM, delta_uP, normalM);
753 scalar average_u_normal = 0.5 * (uM + uP) * normalM;
755 average_u_normal -= u_grid * normalM;
757 if(boundary_type == BoundaryTypeU::Neumann and data.use_outflow_bc ==
true)
758 apply_outflow_bc(flux, average_u_normal);
760 scalar average_delta_u_normal = 0.5 * (delta_uM + delta_uP) * normalM;
764 flux = flux - average_u_normal * delta_uM - average_delta_u_normal * uM;
766 else if(data.temporal_treatment == TreatmentOfConvectiveTerm::LinearlyImplicit)
771 scalar average_u_normal = 0.5 * (uM + uP) * normalM;
773 average_u_normal -= u_grid * normalM;
775 flux = calculate_upwind_flux(delta_uM, delta_uP, average_u_normal);
777 if(boundary_type == BoundaryTypeU::Neumann and data.use_outflow_bc ==
true)
778 apply_outflow_bc(flux, average_u_normal);
782 flux = flux - average_u_normal * delta_uM;
786 AssertThrow(
false, dealii::ExcMessage(
"not implemented"));
791 AssertThrow(
false, dealii::ExcMessage(
"Not implemented."));
804 inline DEAL_II_ALWAYS_INLINE
806 calculate_lambda(scalar
const & uM_n, scalar
const & uP_n)
const
808 return data.upwind_factor * 2.0 * std::max(std::abs(uM_n), std::abs(uP_n));
814 inline DEAL_II_ALWAYS_INLINE
816 calculate_lax_friedrichs_flux(vector
const & uM,
818 vector
const & normalM)
const
820 scalar uM_n = uM * normalM;
821 scalar uP_n = uP * normalM;
823 vector average_normal_flux =
824 dealii::make_vectorized_array<Number>(0.5) * (uM * uM_n + uP * uP_n);
826 vector jump_value = uM - uP;
828 scalar lambda = calculate_lambda(uM_n, uP_n);
830 return (average_normal_flux + 0.5 * lambda * jump_value);
837 inline DEAL_II_ALWAYS_INLINE
839 calculate_lax_friedrichs_flux_linear_transport(vector
const & wM,
843 vector
const & normalM)
const
845 scalar wM_n = wM * normalM;
846 scalar wP_n = wP * normalM;
848 vector average_normal_flux =
849 dealii::make_vectorized_array<Number>(0.5) * (uM * wM_n + uP * wP_n);
851 vector jump_value = uM - uP;
855 scalar lambda = 0.5 * calculate_lambda(wM_n, wP_n);
857 return (average_normal_flux + 0.5 * lambda * jump_value);
863 inline DEAL_II_ALWAYS_INLINE
865 calculate_lax_friedrichs_flux_linearized(vector
const & uM,
867 vector
const & delta_uM,
868 vector
const & delta_uP,
869 vector
const & normalM)
const
871 scalar uM_n = uM * normalM;
872 scalar uP_n = uP * normalM;
874 scalar delta_uM_n = delta_uM * normalM;
875 scalar delta_uP_n = delta_uP * normalM;
877 vector average_normal_flux =
878 dealii::make_vectorized_array<Number>(0.5) *
879 (uM * delta_uM_n + delta_uM * uM_n + uP * delta_uP_n + delta_uP * uP_n);
881 vector jump_value = delta_uM - delta_uP;
883 scalar lambda = calculate_lambda(uM_n, uP_n);
885 return (average_normal_flux + 0.5 * lambda * jump_value);
893 inline DEAL_II_ALWAYS_INLINE
895 calculate_upwind_flux(vector
const & uM,
897 scalar
const & average_normal_velocity)
const
899 vector average_velocity = 0.5 * (uM + uP);
901 vector jump_value = uM - uP;
903 return (average_normal_velocity * average_velocity +
904 data.upwind_factor * 0.5 * std::abs(average_normal_velocity) * jump_value);
910 inline DEAL_II_ALWAYS_INLINE
912 calculate_upwind_flux_linearized(vector
const & uM,
914 vector
const & u_grid,
915 vector
const & delta_uM,
916 vector
const & delta_uP,
917 vector
const & normalM)
const
919 vector average_velocity = 0.5 * (uM + uP);
920 vector delta_average_velocity = 0.5 * (delta_uM + delta_uP);
922 scalar average_normal_velocity = average_velocity * normalM;
924 average_normal_velocity -= u_grid * normalM;
926 scalar delta_average_normal_velocity = delta_average_velocity * normalM;
928 vector jump_value = delta_uM - delta_uP;
930 return (average_normal_velocity * delta_average_velocity +
931 delta_average_normal_velocity * average_velocity +
932 data.upwind_factor * 0.5 * std::abs(average_normal_velocity) * jump_value);
938 inline DEAL_II_ALWAYS_INLINE
940 apply_outflow_bc(vector & flux, scalar
const & normal_velocity)
const
946 scalar outflow_indicator = dealii::make_vectorized_array<Number>(1.0);
948 for(
unsigned int v = 0; v < dealii::VectorizedArray<Number>::size(); ++v)
950 if(normal_velocity[v] < 0.0)
951 outflow_indicator[v] = 0.0;
955 flux = outflow_indicator * flux;
968 std::shared_ptr<IntegratorCell> integrator_velocity;
969 std::shared_ptr<IntegratorFace> integrator_velocity_m;
970 std::shared_ptr<IntegratorFace> integrator_velocity_p;
972 std::shared_ptr<IntegratorCell> integrator_grid_velocity;
973 std::shared_ptr<IntegratorFace> integrator_grid_velocity_face;
1006class ConvectiveOperator :
public OperatorBase<dim, Number, dim>
1009 typedef dealii::VectorizedArray<Number> scalar;
1010 typedef dealii::Tensor<1, dim, dealii::VectorizedArray<Number>> vector;
1011 typedef dealii::Tensor<2, dim, dealii::VectorizedArray<Number>> tensor;
1013 typedef ConvectiveOperator<dim, Number> This;
1015 typedef OperatorBase<dim, Number, dim> Base;
1017 typedef typename Base::VectorType VectorType;
1018 typedef typename Base::Range Range;
1019 typedef typename Base::IntegratorCell IntegratorCell;
1020 typedef typename Base::IntegratorFace IntegratorFace;
1022 ConvectiveOperator()
1027 set_velocity_copy(VectorType
const & src)
const;
1030 set_velocity_ptr(VectorType
const & src)
const;
1032 dealii::LinearAlgebra::distributed::Vector<Number>
const &
1033 get_velocity()
const;
1036 initialize(dealii::MatrixFree<dim, Number>
const & matrix_free,
1037 dealii::AffineConstraints<Number>
const & affine_constraints,
1045 evaluate_nonlinear_operator(VectorType & dst, VectorType
const & src, Number
const time)
const;
1048 evaluate_nonlinear_operator_add(VectorType & dst,
1049 VectorType
const & src,
1050 Number
const time)
const;
1055 evaluate(VectorType & dst, VectorType
const & src)
const final;
1058 evaluate_add(VectorType & dst, VectorType
const & src)
const final;
1065 cell_loop_nonlinear_operator(dealii::MatrixFree<dim, Number>
const & matrix_free,
1067 VectorType
const & src,
1068 Range
const & cell_range)
const;
1071 face_loop_nonlinear_operator(dealii::MatrixFree<dim, Number>
const & matrix_free,
1073 VectorType
const & src,
1074 Range
const & face_range)
const;
1077 boundary_face_loop_nonlinear_operator(dealii::MatrixFree<dim, Number>
const & matrix_free,
1079 VectorType
const & src,
1080 Range
const & face_range)
const;
1083 do_cell_integral_nonlinear_operator(IntegratorCell & integrator,
1084 IntegratorCell & integrator_u_grid)
const;
1087 do_face_integral_nonlinear_operator(IntegratorFace & integrator_m,
1088 IntegratorFace & integrator_p,
1089 IntegratorFace & integrator_grid_velocity)
const;
1092 do_boundary_integral_nonlinear_operator(IntegratorFace & integrator,
1093 IntegratorFace & integrator_grid_velocity,
1094 dealii::types::boundary_id
const & boundary_id)
const;
1102 reinit_cell_derived(IntegratorCell & integrator,
unsigned int const cell)
const final;
1106 reinit_face_derived(IntegratorFace & integrator_m,
1107 IntegratorFace & integrator_p,
1108 unsigned int const face)
const final;
1112 reinit_boundary_face_derived(IntegratorFace & integrator_m,
unsigned int const face)
const final;
1116 reinit_face_cell_based_derived(IntegratorFace & integrator_m,
1117 IntegratorFace & integrator_p,
1118 unsigned int const cell,
1119 unsigned int const face,
1120 dealii::types::boundary_id
const boundary_id)
const final;
1124 do_cell_integral(IntegratorCell & integrator)
const final;
1128 do_face_integral(IntegratorFace & integrator_m, IntegratorFace & integrator_p)
const final;
1132 do_face_int_integral(IntegratorFace & integrator_m, IntegratorFace & integrator_p)
const final;
1141 do_face_int_integral_cell_based(IntegratorFace & integrator_m,
1142 IntegratorFace & integrator_p)
const final;
1146 do_face_ext_integral(IntegratorFace & integrator_m, IntegratorFace & integrator_p)
const final;
1150 do_boundary_integral(IntegratorFace & integrator,
1151 OperatorType
const & operator_type,
1152 dealii::types::boundary_id
const & boundary_id)
const final;
1156 std::shared_ptr<Operators::ConvectiveKernel<dim, Number>> kernel;